]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.ui/src/org/simantics/scenegraph/ui/NodeProxy.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph.ui / src / org / simantics / scenegraph / ui / NodeProxy.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in 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.scenegraph.ui;\r
13 \r
14 import java.lang.ref.WeakReference;\r
15 \r
16 import org.simantics.scenegraph.INode;\r
17 \r
18 /**\r
19  * @author Tuukka Lehtonen\r
20  */\r
21 class NodeProxy {\r
22 \r
23     WeakReference<INode> ref;\r
24     String               id;\r
25 \r
26     NodeProxy(INode n) {\r
27         this(n, null);\r
28     }\r
29 \r
30     NodeProxy(INode n, String id) {\r
31         this.ref = new WeakReference<INode>(n);\r
32         this.id = id;\r
33     }\r
34 \r
35     INode getNode() {\r
36         return ref.get();\r
37     }\r
38 \r
39     @Override\r
40     public String toString() {\r
41         StringBuilder sb = new StringBuilder();\r
42         INode n = getNode();\r
43         if (id != null) {\r
44             sb.append("[");\r
45             sb.append(id);\r
46             sb.append("] ");\r
47         }\r
48         if (n == null) {\r
49             sb.append("(collected)");\r
50         } else {\r
51             sb.append(n.getSimpleClassName());\r
52         }\r
53         return sb.toString();\r
54     }\r
55 \r
56     public String getTypeName() {\r
57         INode n = getNode();\r
58         return n == null ? "-" : n.getSimpleClassName();\r
59     }\r
60 \r
61     public String getInternalId() {\r
62         INode n = getNode();\r
63         if (n == null)\r
64             return "-";\r
65         return n.getId().toString();\r
66     }\r
67 \r
68     public String getId() {\r
69         return id;\r
70     }\r
71 \r
72     @Override\r
73     public int hashCode() {\r
74         final int prime = 31;\r
75         int result = 1;\r
76         result = prime * result + ((id == null) ? 0 : id.hashCode());\r
77         INode node = getNode();\r
78         result = prime * result + ((node == null) ? 0 : node.hashCode());\r
79         return result;\r
80     }\r
81 \r
82     @Override\r
83     public boolean equals(Object obj) {\r
84         if (this == obj)\r
85             return true;\r
86         if (obj == null)\r
87             return false;\r
88         if (getClass() != obj.getClass())\r
89             return false;\r
90         NodeProxy other = (NodeProxy) obj;\r
91         if (id == null) {\r
92             if (other.id != null)\r
93                 return false;\r
94         } else if (!id.equals(other.id))\r
95             return false;\r
96 \r
97         INode node = getNode();\r
98         INode otherNode = other.getNode();\r
99         if (node == null || otherNode == null)\r
100             // Collected nodes are never equal to any other node\r
101             return false;\r
102 \r
103         return node.equals(otherNode);\r
104     }\r
105 \r
106 }