]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/scenegraph/structural/StructuralParentNode.java
1ae000969cfe2f4f1830f38b78220a0055b83db5
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / structural / StructuralParentNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.scenegraph.structural;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collection;\r
16 import java.util.List;\r
17 \r
18 import org.simantics.g3d.ontology.G3D;\r
19 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
20 import org.simantics.g3d.property.annotations.SetPropertyValue;\r
21 import org.simantics.g3d.scenegraph.base.ParentNode;\r
22 import org.simantics.layer0.Layer0;\r
23 import org.simantics.objmap.graph.annotations.RelatedGetValue;\r
24 import org.simantics.objmap.graph.annotations.RelatedSetValue;\r
25 import org.simantics.objmap.structural.IStructuralObject;\r
26 \r
27 public abstract class StructuralParentNode<T extends IStructuralNode> extends ParentNode<T> implements IStructuralNode{\r
28 \r
29         private String name;\r
30         \r
31 \r
32         @RelatedGetValue(Layer0.URIs.HasName)\r
33         @GetPropertyValue(value = Layer0.URIs.HasName, tabId = "Default", name = "Name")\r
34         public String getName() {\r
35                 return name;\r
36         }\r
37         \r
38         @RelatedSetValue(Layer0.URIs.HasName)\r
39         @SetPropertyValue(Layer0.URIs.HasName)\r
40         public void setName(String name) {\r
41                 if (name == null)\r
42                         return;\r
43                 this.name = name;\r
44                 firePropertyChanged(Layer0.URIs.HasName);\r
45         }\r
46         \r
47         @Override\r
48         public String toString() {\r
49                 return getName();\r
50         }\r
51         \r
52         public boolean isPartOfInstantiatedModel() {\r
53                 return ctx.size() > 0;\r
54         }\r
55         \r
56         public boolean isExposed() {\r
57                 if (ctx.size() == 0)\r
58                         return true;\r
59                 return getPublishedBy().contains(ctx.get(0));\r
60         }\r
61         \r
62         @Override\r
63         public boolean isInstantiatedModelRoot() {\r
64                 return ctx.size() == 1 && this.equals(ctx.get(0));\r
65         }\r
66         \r
67         @Override\r
68         public boolean isPublishable() {\r
69                 return !isPartOfInstantiatedModel();\r
70         }\r
71         \r
72         private List<IStructuralObject> ctx = new ArrayList<IStructuralObject>(1);\r
73         @Override\r
74         public List<IStructuralObject> getContext() {\r
75                 return ctx;\r
76         }\r
77         \r
78         @Override\r
79         public void setContext(List<IStructuralObject> object) {\r
80                 ctx = object;\r
81         }\r
82         \r
83         private List<IStructuralNode> publisher = new ArrayList<IStructuralNode>(1);\r
84         \r
85         @Override\r
86         public void addPublishedBy(IStructuralNode node) {\r
87                 publisher.add(node);\r
88                 firePropertyChanged(G3D.URIs.publishes);\r
89         }\r
90         \r
91         @Override\r
92         public Collection<IStructuralNode> getPublishedBy() {\r
93                 return publisher;\r
94         }\r
95         \r
96         @Override\r
97         public void removePublishedBy(IStructuralNode node) {\r
98                 if (publisher.remove(node))\r
99                         firePropertyChanged(G3D.URIs.publishes);\r
100         }\r
101         \r
102         @Override\r
103         public void remove() {\r
104                 IStructuralRootNode root = (IStructuralRootNode)getRootNode();\r
105                 if (root.getPublished().contains(this))\r
106                         root.removePublished(this);\r
107                 \r
108                 super.remove();\r
109         }\r
110 }\r