I need create 2 TemporaryResource to show the same GeoResource but using different filter.
I faild and I found the problem is the same name in tempresource. Then I use FeatureTypeBuilder to setName.
if (resource.getIdentifier().
getRef().equalsIgnoreCase("customers")) {
FeatureCollection fc1 = null;
FeatureCollection fc2 = null;
FilterFactory filterFactory = FilterFactoryFinder.createFilterFactory();
Filter filter1 = filterFactory.createCompareFilter(CompareFilter.COMPARE_EQUALS);
Filter filter2 = filterFactory.createCompareFilter(CompareFilter.COMPARE_EQUALS);
((CompareFilter) filter1).addLeftValue(filterFactory.createAttributeExpression("CUSTOMER_ID"));
((CompareFilter) filter1).addRightValue(filterFactory.createLiteralExpression(Integer.valueOf(scno1)));
((CompareFilter) filter2).addLeftValue(filterFactory.createAttributeExpression("CUSTOMER_ID"));
((CompareFilter) filter2).addRightValue(filterFactory.createLiteralExpression(Integer.valueOf(scno2)));
fc1 = resource.resolve(FeatureSource.class, monitor).getFeatures(filter1);
FeatureTypeBuilder builder = FeatureTypeBuilder.newInstance(fc1.getFeatureType().getTypeName());
builder.importType(fc1.getFeatureType());
builder.setName( "CUSTOMERS" );
IGeoResource geoResource1 = CatalogPlugin.getDefault().getLocalCatalog().createTemporaryResource(fc1.getSchema());
FeatureStore featureStore1 = geoResource1.resolve(FeatureStore.class, monitor);
featureStore1.addFeatures(fc1);
localresources1.add(geoResource1);
//ApplicationGIS.addLayersToMap(map1, Collections.singletonList(geoResource1), 0);
AddLayersCommand alCommand = new AddLayersCommand(localresources1, 0);
map1.executeSyncWithoutUndo(alCommand);
OpenProjectElementCommand command1 = new OpenProjectElementCommand(map1);
project.sendASync(command1);
fc2 = resource.resolve(FeatureSource.class, monitor).getFeatures(filter2);
FeatureTypeBuilder builder1 = FeatureTypeBuilder.newInstance("customer");
builder1.importType(fc1.getSchema());
builder1.setName("customer2");
FeatureTypeBuilder builder2=FeatureTypeBuilder.newInstance("CUSTOMERS");
builder2.importType(fc2.getFeatureType());
builder2.setName( "CUSTOMER" );
System.out.println("fc2.size: "+fc2.size());
System.out.println(fc2.getFeatureType().getTypeName());
IGeoResource geoResource2 = CatalogPlugin.getDefault().getLocalCatalog().createTemporaryResource(builder2.getFeatureType());
FeatureStore featureStore2 = geoResource2.resolve(FeatureStore.class, monitor);
featureStore2.addFeatures(fc2);
localresources2.add(geoResource2);
//ApplicationGIS.addLayersToMap(map2, Collections.singletonList(geoResource1), 0);
AddLayersCommand blCommand = new AddLayersCommand(localresources2, 0);
map2.executeSyncWithoutUndo(blCommand);
OpenProjectElementCommand command2 = new OpenProjectElementCommand(map2);
project.sendASync(command2);
break;
}
}
org.geotools.data.DataSourceException: Could not create CUSTOMER out of provided feature: CUSTOMERS.-7182dc8:122e9ce2ccc:-7ffd
at org.geotools.data.AbstractFeatureStore.addFeatures(AbstractFeatureStore.java:255)
at com.geosat.addservice.view.CommonComparison.addMapFromOracle(CommonComparison.java:226)
at com.geosat.addservice.view.CommonComparison.access$18(CommonComparison.java:132)
at com.geosat.addservice.view.CommonComparison$10.handleEvent(CommonComparison.java:826)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at net.refractions.udig.internal.ui.UDIGApplication.start(UDIGApplication.java:93)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
at org.eclipse.equinox.launcher.Main.main(Main.java:1148)
Caused by: IllegalAttribute: null , but got null
at org.geotools.feature.DefaultFeature.setAttributes(DefaultFeature.java:258)
at org.geotools.data.AbstractFeatureStore.addFeatures(AbstractFeatureStore.java:253)
... 28 more
any idea??