]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/scenegraph/base/Node.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / base / Node.java
1 package org.simantics.g3d.scenegraph.base;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 \r
7 public abstract class Node implements INode {\r
8         public transient static long               IDCOUNTER              = 1;\r
9         protected transient ParentNode<?>          parent                 = null;\r
10         protected transient String                                 parentName                     = null; \r
11         protected Long                             id                     = IDCOUNTER++;\r
12         \r
13 \r
14     public Long getId() {\r
15         return id;\r
16     }\r
17 \r
18 \r
19     public ParentNode<?> getParent() {\r
20         return parent;\r
21     }\r
22 \r
23     \r
24     @Override\r
25     public String getParentRel() {\r
26         return parentName;\r
27     }\r
28     \r
29     public void setParent(ParentNode<?> parent, String name) {\r
30         this.parent = parent;\r
31         this.parentName = name;\r
32     }\r
33     \r
34     public ParentNode<?> getRootNode() {\r
35         return parent != null ? parent.getRootNode() : null;\r
36     }\r
37     \r
38     public void remove() {\r
39         if (parent != null) {\r
40             parent.removeNode(parentName, this);\r
41         }\r
42     }\r
43     \r
44     public void deattach() {\r
45         if (parent != null) {\r
46             parent.deattachNode(parentName, this);\r
47         }\r
48     }\r
49     \r
50     public void init() {\r
51     }\r
52     \r
53     public void cleanup() {\r
54         if (parent != null) {\r
55             parent.removeNode(parentName, this);\r
56         }\r
57     }\r
58     \r
59     @Override\r
60         public String toString() {\r
61                 return getClass().getSimpleName();\r
62         }\r
63     \r
64     protected List<NodeListener> listeners = new ArrayList<NodeListener>();\r
65         \r
66         @Override\r
67         public void addListener(NodeListener listener) {\r
68                 if (!listeners.contains(listener))\r
69                         listeners.add(listener);\r
70         }\r
71         \r
72         @Override\r
73         public void removeListener(NodeListener listener) {\r
74                 listeners.remove(listener);\r
75         }\r
76         \r
77         @Override\r
78         public List<NodeListener> getListeners() {\r
79                 return listeners;\r
80         }\r
81         \r
82         protected void firePropertyChanged(String id) {\r
83                 for (NodeListener listener : listeners) {\r
84                         listener.propertyChanged(this, id);\r
85                 }\r
86         }\r
87     \r
88 }\r