]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/VTKSelectionItem.java
Perform node map updates in a procedure instead of a request
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / VTKSelectionItem.java
index 222da8b92012de4a404d0d3f862b84ed926768e3..deb812722b238065fc512e0525a9e9d1d0f67190 100644 (file)
@@ -22,34 +22,33 @@ import vtk.vtkProp;
 public class VTKSelectionItem<DBObject> implements IAdaptable{
 
        private vtkProp prop;
-       private IG3DNode node;
+       private INode node;
        private DBObject resource;
        
-       public VTKSelectionItem(vtkProp prop, IG3DNode node, DBObject res) {
+       public VTKSelectionItem(vtkProp prop, INode node, DBObject res) {
                this.prop = prop;
                this.node = node;
                this.resource = res;
        }
 
-       @SuppressWarnings("rawtypes")
        @Override
-       public Object getAdapter(Class adapter) {
-               if (adapter == Resource.class)
+       public <T> T getAdapter(Class<T> adapter) {
+               if (adapter.isAssignableFrom(Resource.class))
                        if (resource instanceof Resource)
-                               return resource;
+                               return adapter.cast(resource);
                        else
                                return null;
-               if (adapter == StructuralResource.class)
+               if (adapter.isAssignableFrom(StructuralResource.class))
                        if (resource instanceof StructuralResource)
-                               return resource;
+                               return adapter.cast(resource);
                        else
                                return null;
-               if (adapter == vtkProp.class)
-                       return prop;
-               if (adapter == IG3DNode.class)
-                       return node;
-               if (adapter == INode.class)
-                       return node;
+               if (adapter.isAssignableFrom(vtkProp.class))
+                       return adapter.cast(prop);
+               if (adapter.isAssignableFrom(IG3DNode.class) && node instanceof IG3DNode)
+                       return adapter.cast(node);
+               if (adapter.isAssignableFrom(INode.class))
+                       return adapter.cast(node);
                return null;
        }