]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.xmlio/src/org/simantics/interop/xmlio/MigrateLoadRule.java
refs #3842
[simantics/interop.git] / org.simantics.interop.xmlio / src / org / simantics / interop / xmlio / MigrateLoadRule.java
diff --git a/org.simantics.interop.xmlio/src/org/simantics/interop/xmlio/MigrateLoadRule.java b/org.simantics.interop.xmlio/src/org/simantics/interop/xmlio/MigrateLoadRule.java
new file mode 100644 (file)
index 0000000..e0d5fdc
--- /dev/null
@@ -0,0 +1,68 @@
+package org.simantics.interop.xmlio;\r
+\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.layer0.Layer0;\r
+\r
+public class MigrateLoadRule extends DefaultLoadRule {\r
+       \r
+       Set<String> ontologies = new HashSet<String>();\r
+       Map<String,String> ontologyVersions = new HashMap<String, String>();\r
+       \r
+       public MigrateLoadRule(ReadGraph graph) throws DatabaseException{\r
+               Resource root = graph.getSession().getRootLibrary();\r
+               Layer0 l0 = Layer0.getInstance(graph);\r
+               for (Resource lib : graph.getObjects(root, l0.ConsistsOf)) {\r
+                       if (!graph.isInstanceOf(lib, l0.Library))\r
+                               continue;\r
+                       for (Resource ontology : graph.getObjects(lib, l0.ConsistsOf)) {\r
+                               if (!graph.isInstanceOf(ontology, l0.Ontology))\r
+                                       continue;\r
+                               String uri = graph.getURI(ontology);\r
+                               String parsed[] = parse(uri);\r
+                               ontologies.add(parsed[0]);\r
+                               ontologyVersions.put(parsed[0], parsed[1]);\r
+                       }\r
+               }\r
+               \r
+       }\r
+       @Override\r
+       public Resource getResource(ReadGraph graph, String uri) throws DatabaseException {\r
+               return super.getResource(graph, getUri(uri));\r
+       }\r
+       \r
+       //Map<String,String> mappedUris = new HashMap<String, String>();\r
+       \r
+       private String getUri(String uri) {\r
+               \r
+               String parsed[] = parse(uri);\r
+               String currentUri = parsed[0] + "-" + ontologyVersions.get(parsed[0]) + "/" + parsed[2];\r
+               return currentUri;\r
+       }\r
+       \r
+       private String[] parse(String uri) {\r
+               int startVer = uri.indexOf("-");\r
+               int endVer = uri.indexOf("/", startVer);\r
+               if (endVer == -1) {\r
+                       return new String[]{uri.substring(0,startVer),uri.substring(startVer+1)};\r
+               } else {\r
+                       return new String[]{uri.substring(0,startVer),uri.substring(startVer+1,endVer),uri.substring(endVer+1)};\r
+               }\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public Object createValue(ReadGraph graph, List<String> value, List<String> types) throws DatabaseException {\r
+               for (int i = 0; i < types.size(); i++) {\r
+                       types.set(i, getUri(types.get(i)));\r
+               }\r
+               return super.createValue(graph, value, types);\r
+       }\r
+}\r