1 package org.simantics.graph.representation;
\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
8 public class TransferableGraphUtils {
\r
10 public static Collection<Identity> getRoots(TransferableGraph1 tg) {
\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
20 public static Identity findRootWithName(TransferableGraph1 tg, String name) {
\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
32 public static Identity findExternalWithName(TransferableGraph1 tg, String name) {
\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
44 public static Identity findExternalWithNameAndParent(TransferableGraph1 tg, int parent, String name) {
\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
56 public static Identity findExternal(TransferableGraph1 tg, String uri) {
\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
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
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
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
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
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
112 public static String getName(TransferableGraph1 tg, Identity id) {
\r
113 return getName(id);
\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
127 Optional optional = (Optional)id.definition;
\r
128 return optional.name;
\r
132 public static String getRootType(Identity id) {
\r
133 if(id.definition instanceof Root) {
\r
134 Root root = (Root)id.definition;
\r
137 throw new IllegalArgumentException("Expected root, got " + id);
\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
148 public static String getURI(TransferableGraph1 tg, int id) {
\r
149 return getURI(tg.resourceCount, tg.identities, id);
\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
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
172 return "<internal reference " + id + ">:";
\r