]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/scenegraph/structural/StructuralParentNode.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / structural / StructuralParentNode.java
diff --git a/org.simantics.g3d/src/org/simantics/g3d/scenegraph/structural/StructuralParentNode.java b/org.simantics.g3d/src/org/simantics/g3d/scenegraph/structural/StructuralParentNode.java
new file mode 100644 (file)
index 0000000..d5e41a5
--- /dev/null
@@ -0,0 +1,99 @@
+package org.simantics.g3d.scenegraph.structural;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.simantics.g3d.ontology.G3D;\r
+import org.simantics.g3d.property.annotations.GetPropertyValue;\r
+import org.simantics.g3d.property.annotations.SetPropertyValue;\r
+import org.simantics.g3d.scenegraph.base.ParentNode;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
+import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
+import org.simantics.objmap.structural.IStructuralObject;\r
+\r
+public abstract class StructuralParentNode<T extends IStructuralNode> extends ParentNode<T> implements IStructuralNode{\r
+\r
+       private String name;\r
+       \r
+\r
+       @RelatedGetValue(Layer0.URIs.HasName)\r
+       @GetPropertyValue(value = Layer0.URIs.HasName, tabId = "Default", name = "Name")\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       \r
+       @RelatedSetValue(Layer0.URIs.HasName)\r
+       @SetPropertyValue(Layer0.URIs.HasName)\r
+       public void setName(String name) {\r
+               if (name == null)\r
+                       return;\r
+               this.name = name;\r
+               firePropertyChanged(Layer0.URIs.HasName);\r
+       }\r
+       \r
+       @Override\r
+       public String toString() {\r
+               return getName();\r
+       }\r
+       \r
+       public boolean isPartOfInstantiatedModel() {\r
+               return ctx.size() > 0;\r
+       }\r
+       \r
+       public boolean isExposed() {\r
+               if (ctx.size() == 0)\r
+                       return true;\r
+               return getPublishedBy().contains(ctx.get(0));\r
+       }\r
+       \r
+       @Override\r
+       public boolean isInstantiatedModelRoot() {\r
+               return ctx.size() == 1 && this.equals(ctx.get(0));\r
+       }\r
+       \r
+       @Override\r
+       public boolean isPublishable() {\r
+               return !isPartOfInstantiatedModel();\r
+       }\r
+       \r
+       private List<IStructuralObject> ctx = new ArrayList<IStructuralObject>(1);\r
+       @Override\r
+       public List<IStructuralObject> getContext() {\r
+               return ctx;\r
+       }\r
+       \r
+       @Override\r
+       public void setContext(List<IStructuralObject> object) {\r
+               ctx = object;\r
+       }\r
+       \r
+    private List<IStructuralNode> publisher = new ArrayList<IStructuralNode>(1);\r
+       \r
+       @Override\r
+       public void addPublishedBy(IStructuralNode node) {\r
+               publisher.add(node);\r
+               firePropertyChanged(G3D.URIs.publishes);\r
+       }\r
+       \r
+       @Override\r
+       public Collection<IStructuralNode> getPublishedBy() {\r
+               return publisher;\r
+       }\r
+       \r
+       @Override\r
+       public void removePublishedBy(IStructuralNode node) {\r
+               if (publisher.remove(node))\r
+                       firePropertyChanged(G3D.URIs.publishes);\r
+       }\r
+       \r
+       @Override\r
+       public void remove() {\r
+               IStructuralRootNode root = (IStructuralRootNode)getRootNode();\r
+               if (root.getPublished().contains(this))\r
+                       root.removePublished(this);\r
+               \r
+               super.remove();\r
+       }\r
+}\r