]> gerrit.simantics Code Review - simantics/3d.git/blob - 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
1 package org.simantics.g3d.scenegraph.structural;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.List;\r
6 \r
7 import org.simantics.g3d.ontology.G3D;\r
8 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
9 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
10 import org.simantics.g3d.scenegraph.base.ParentNode;\r
11 import org.simantics.layer0.Layer0;\r
12 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
13 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
14 import org.simantics.objmap.structural.IStructuralObject;\r
15 \r
16 public abstract class StructuralParentNode<T extends IStructuralNode> extends ParentNode<T> implements IStructuralNode{\r
17 \r
18         private String name;\r
19         \r
20 \r
21         @RelatedGetValue(Layer0.URIs.HasName)\r
22         @GetPropertyValue(value = Layer0.URIs.HasName, tabId = "Default", name = "Name")\r
23         public String getName() {\r
24                 return name;\r
25         }\r
26         \r
27         @RelatedSetValue(Layer0.URIs.HasName)\r
28         @SetPropertyValue(Layer0.URIs.HasName)\r
29         public void setName(String name) {\r
30                 if (name == null)\r
31                         return;\r
32                 this.name = name;\r
33                 firePropertyChanged(Layer0.URIs.HasName);\r
34         }\r
35         \r
36         @Override\r
37         public String toString() {\r
38                 return getName();\r
39         }\r
40         \r
41         public boolean isPartOfInstantiatedModel() {\r
42                 return ctx.size() > 0;\r
43         }\r
44         \r
45         public boolean isExposed() {\r
46                 if (ctx.size() == 0)\r
47                         return true;\r
48                 return getPublishedBy().contains(ctx.get(0));\r
49         }\r
50         \r
51         @Override\r
52         public boolean isInstantiatedModelRoot() {\r
53                 return ctx.size() == 1 && this.equals(ctx.get(0));\r
54         }\r
55         \r
56         @Override\r
57         public boolean isPublishable() {\r
58                 return !isPartOfInstantiatedModel();\r
59         }\r
60         \r
61         private List<IStructuralObject> ctx = new ArrayList<IStructuralObject>(1);\r
62         @Override\r
63         public List<IStructuralObject> getContext() {\r
64                 return ctx;\r
65         }\r
66         \r
67         @Override\r
68         public void setContext(List<IStructuralObject> object) {\r
69                 ctx = object;\r
70         }\r
71         \r
72     private List<IStructuralNode> publisher = new ArrayList<IStructuralNode>(1);\r
73         \r
74         @Override\r
75         public void addPublishedBy(IStructuralNode node) {\r
76                 publisher.add(node);\r
77                 firePropertyChanged(G3D.URIs.publishes);\r
78         }\r
79         \r
80         @Override\r
81         public Collection<IStructuralNode> getPublishedBy() {\r
82                 return publisher;\r
83         }\r
84         \r
85         @Override\r
86         public void removePublishedBy(IStructuralNode node) {\r
87                 if (publisher.remove(node))\r
88                         firePropertyChanged(G3D.URIs.publishes);\r
89         }\r
90         \r
91         @Override\r
92         public void remove() {\r
93                 IStructuralRootNode root = (IStructuralRootNode)getRootNode();\r
94                 if (root.getPublished().contains(this))\r
95                         root.removePublished(this);\r
96                 \r
97                 super.remove();\r
98         }\r
99 }\r