]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraphUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.graph / src / org / simantics / graph / representation / TransferableGraphUtils.java
1 package org.simantics.graph.representation;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.HashMap;\r
6 import java.util.Map;\r
7 \r
8 public class TransferableGraphUtils {\r
9 \r
10         public static Collection<Identity> getRoots(TransferableGraph1 tg) {\r
11                 \r
12                 ArrayList<Identity> result = new ArrayList<Identity>();\r
13                 for(Identity id : tg.identities) {\r
14                         if(id.definition instanceof Root) result.add(id);\r
15                 }\r
16                 return result;\r
17                 \r
18         }\r
19         \r
20         public static Identity findRootWithName(TransferableGraph1 tg, String name) {\r
21                 \r
22                 for(Identity id : tg.identities) {\r
23                         if(id.definition instanceof Root) {\r
24                                 Root ext = (Root)id.definition;\r
25                                 if(ext.name.equals(name)) return id;\r
26                         }\r
27                 }\r
28                 return null;\r
29                 \r
30         }\r
31 \r
32         public static Identity findExternalWithName(TransferableGraph1 tg, String name) {\r
33                 \r
34                 for(Identity id : tg.identities) {\r
35                         if(id.definition instanceof External) {\r
36                                 External ext = (External)id.definition;\r
37                                 if(ext.name.equals(name)) return id;\r
38                         }\r
39                 }\r
40                 return null;\r
41                 \r
42         }\r
43 \r
44         public static Identity findExternalWithNameAndParent(TransferableGraph1 tg, int parent, String name) {\r
45                 \r
46                 for(Identity id : tg.identities) {\r
47                         if(id.definition instanceof External) {\r
48                                 External ext = (External)id.definition;\r
49                                 if(ext.name.equals(name) && ext.parent == parent) return id;\r
50                         }\r
51                 }\r
52                 return null;\r
53                 \r
54         }\r
55         \r
56         public static Identity findExternal(TransferableGraph1 tg, String uri) {\r
57                 \r
58                 Identity identity = findExternalWithName(tg, "http:/");\r
59                 if(identity == null) identity = findExternalWithName(tg, "");\r
60                 if(identity == null) identity = findRootWithName(tg, "");\r
61                 if("http:/".equals(uri)) return identity;\r
62                 String[] tokens = uri.substring("http://".length()).split("/");\r
63                 for(String token : tokens) {\r
64                         identity = findExternalWithNameAndParent(tg, identity.resource, token);\r
65                 }\r
66                 return identity;\r
67                 \r
68         }\r
69         \r
70         public static Collection<Identity> getChildren(TransferableGraph1 tg, Identity parent) {\r
71                 ArrayList<Identity> result = new ArrayList<Identity>();\r
72                 System.err.println("children for " + parent.resource);\r
73                 for(Identity id : tg.identities) {\r
74                         if(id.definition instanceof Internal) {\r
75                                 Internal internal = (Internal)id.definition;\r
76                                 System.err.println("internal with parent " + internal.parent);\r
77                                 if(internal.parent == parent.resource) result.add(id);\r
78                         }\r
79                 }\r
80                 findExternal(tg, "http://www.simantics.org/Layer0-1.1/ConsistsOf");\r
81                 for(int i=0;i<tg.statements.length;i+=4) {\r
82                         if(tg.statements[i] == parent.resource)\r
83                                 System.err.println("related to parent  " + tg.statements[i+3]);\r
84                 }\r
85                 return result;\r
86         }\r
87         \r
88         public static int getPossibleObject(TransferableGraph1 tg, Identity subject, String predicate) {\r
89                 Identity p = findExternal(tg, predicate);\r
90                 if(p == null) return 0;\r
91                 int result = 0;\r
92                 for(int i=0;i<tg.statements.length;i+=4) {\r
93                         if(tg.statements[i] == subject.resource && tg.statements[i+1] == p.resource) {\r
94                                 if(result != 0) return 0;\r
95                                 result = tg.statements[i+3];\r
96                         }\r
97                 }\r
98                 return result;\r
99         }\r
100 \r
101         public static Map<Identity, String> getNames(TransferableGraph1 tg, Collection<Identity> ids) {\r
102                 Map<Identity, String> result = new HashMap<Identity, String>();\r
103                 for(Identity id : ids) {\r
104                         if(id.definition instanceof Internal) {\r
105                                 Internal internal = (Internal)id.definition;\r
106                                 result.put(id, internal.name);\r
107                         }\r
108                 }\r
109                 return result;\r
110         }\r
111 \r
112         public static String getName(TransferableGraph1 tg, Identity id) {\r
113                 return getName(id);\r
114         }\r
115 \r
116         public static String getName(Identity id) {\r
117                 if(id.definition instanceof Internal) {\r
118                         Internal internal = (Internal)id.definition;\r
119                         return internal.name;\r
120                 } else if(id.definition instanceof External) {\r
121                         External external = (External)id.definition;\r
122                         return external.name;\r
123                 } else if(id.definition instanceof Root) {\r
124                         Root root = (Root)id.definition;\r
125                         return root.name;\r
126                 } else  {\r
127                         Optional optional = (Optional)id.definition;\r
128                         return optional.name;\r
129                 }\r
130         }\r
131 \r
132         public static String getRootType(Identity id) {\r
133                 if(id.definition instanceof Root) {\r
134                         Root root = (Root)id.definition;\r
135                         return root.type;\r
136                 } else  {\r
137                         throw new IllegalArgumentException("Expected root, got " + id);\r
138                 }\r
139         }\r
140 \r
141         public static Value findValue(TransferableGraph1 tg, int subject) {\r
142                 for(Value v : tg.values) {\r
143                         if(v.resource == subject) return v;\r
144                 }\r
145                 return null;\r
146         }\r
147         \r
148         public static String getURI(TransferableGraph1 tg, int id) {\r
149             return getURI(tg.resourceCount, tg.identities, id);\r
150         }\r
151         \r
152         public static String getURI(int resourceCount, Identity[] identities, int id) {\r
153             for(Identity identity : identities) {\r
154                 if(identity.resource == id) {\r
155                     IdentityDefinition definition = identity.definition;\r
156                     if(definition instanceof External) {\r
157                         External def = (External)definition;\r
158                         if(def.parent == -1) return "http:/";\r
159                         else return getURI(resourceCount, identities, def.parent) + "/" + def.name;\r
160                     } else if(definition instanceof Root) {\r
161                         Root def = (Root)definition;\r
162                         return def.name;\r
163                     } else if (definition instanceof Internal) {\r
164                         Internal def = (Internal)definition;\r
165                         System.err.println("External URI error: parent was internal '" + def.name + "'");\r
166                         return "";\r
167                     } else {\r
168                         return "";\r
169                     }\r
170                 }\r
171             }       \r
172             return "<internal reference " + id + ">:";\r
173         }\r
174         \r
175 }\r