]> gerrit.simantics Code Review - simantics/sysdyn.git/blob
e4e8fde68c0423b97d0ee5961452b1ea02d94eb0
[simantics/sysdyn.git] /
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2012 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.sysdyn.ui.browser.nodeTypes;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.Collections;\r
16 import java.util.WeakHashMap;\r
17 \r
18 import org.simantics.browsing.ui.NodeContext;\r
19 import org.simantics.browsing.ui.common.NodeContextBuilder;\r
20 import org.simantics.browsing.ui.model.nodetypes.NodeType;\r
21 import org.simantics.browsing.ui.model.nodetypes.SpecialNodeType;\r
22 import org.simantics.db.ReadGraph;\r
23 import org.simantics.db.Resource;\r
24 import org.simantics.db.common.utils.NameUtils;\r
25 import org.simantics.db.exception.DatabaseException;\r
26 import org.simantics.ui.selection.WorkbenchSelectionElement;\r
27 \r
28 /**\r
29  * Experimental node type for Module symbols. Copied mostly from {@link SpecialNodeType}. \r
30  * Not necessary needed.\r
31  * \r
32  * @author Teemu Lempinen\r
33  *\r
34  */\r
35 public class ModuleSymbolNodeType implements NodeType {\r
36     \r
37     private Resource resource;\r
38     private Class<?> contentType;\r
39     \r
40     private static final WeakHashMap<Resource, ModuleSymbolNodeType> nodeTypeCache =\r
41             new WeakHashMap<Resource, ModuleSymbolNodeType>();\r
42 \r
43     public ModuleSymbolNodeType(Resource resource) {\r
44         this.resource = resource;\r
45         this.contentType = Resource.class;\r
46     }\r
47     \r
48     public static ModuleSymbolNodeType  create(Resource entityType) {\r
49         synchronized(nodeTypeCache) {\r
50             ModuleSymbolNodeType result = nodeTypeCache.get(entityType);\r
51             if(result == null) {\r
52                 result = new ModuleSymbolNodeType(entityType);\r
53                 nodeTypeCache.put(entityType, result);\r
54             }\r
55             return result;\r
56         }\r
57     }\r
58 \r
59     @Override\r
60     public NodeContext createNodeContext(ReadGraph graph, Object content)\r
61             throws DatabaseException {\r
62         if(contentType.isInstance(content))\r
63             return NodeContextBuilder.buildWithData(KEY_SEQUENCE,\r
64                     new Object[] {content, this}\r
65             );\r
66         else\r
67             return null;\r
68     }\r
69 \r
70     @Override\r
71     public Class<?> getContentType() {\r
72         return contentType;\r
73     }\r
74 \r
75     @Override\r
76     public int hashCode() {\r
77         return resource.hashCode();\r
78     }\r
79 \r
80     @Override\r
81     public boolean equals(Object obj) {\r
82         if (this == obj)\r
83             return true;\r
84         if (obj == null)\r
85             return false;\r
86         if (getClass() != obj.getClass())\r
87             return false;\r
88         ModuleSymbolNodeType other = (ModuleSymbolNodeType) obj;\r
89         return resource.equals(other.resource);\r
90     }\r
91 \r
92     @Override\r
93     public boolean inherits(ReadGraph graph, NodeType superType) {\r
94         // Special node type does not support inheritance\r
95         return equals(superType);\r
96     }\r
97 \r
98     @Override\r
99     public Collection<NodeType> getSuper(ReadGraph g) {\r
100         return Collections.emptyList();\r
101     }\r
102     \r
103     @Override\r
104     public String toString(ReadGraph graph) throws DatabaseException {\r
105         return "(" + NameUtils.getSafeName(graph, resource) + ")";\r
106     }\r
107 \r
108     @Override\r
109     public WorkbenchSelectionElement getWorkbenchSelectionElement(NodeContext context) {\r
110         return null;\r
111     }\r
112     \r
113 \r
114 }\r