]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop.xmlio/src/org/simantics/interop/xmlio/MigrateLoadRule.java
Handling property change from Literal to SCLValue
[simantics/interop.git] / org.simantics.interop.xmlio / src / org / simantics / interop / xmlio / MigrateLoadRule.java
1 package org.simantics.interop.xmlio;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.HashSet;\r
5 import java.util.List;\r
6 import java.util.Map;\r
7 import java.util.Set;\r
8 \r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.layer0.Layer0;\r
13 \r
14 public class MigrateLoadRule extends DefaultLoadRule {\r
15         \r
16         Set<String> ontologies = new HashSet<String>();\r
17         Map<String,String> ontologyVersions = new HashMap<String, String>();\r
18         \r
19         public MigrateLoadRule(ReadGraph graph) throws DatabaseException{\r
20                 Resource root = graph.getSession().getRootLibrary();\r
21                 Layer0 l0 = Layer0.getInstance(graph);\r
22                 for (Resource lib : graph.getObjects(root, l0.ConsistsOf)) {\r
23                         if (!graph.isInstanceOf(lib, l0.Library))\r
24                                 continue;\r
25                         for (Resource ontology : graph.getObjects(lib, l0.ConsistsOf)) {\r
26                                 if (!graph.isInstanceOf(ontology, l0.Ontology))\r
27                                         continue;\r
28                                 String uri = graph.getURI(ontology);\r
29                                 String parsed[] = parse(uri);\r
30                                 ontologies.add(parsed[0]);\r
31                                 ontologyVersions.put(parsed[0], parsed[1]);\r
32                         }\r
33                 }\r
34                 \r
35         }\r
36         @Override\r
37         public Resource getResource(ReadGraph graph, String uri) throws DatabaseException {\r
38                 return super.getResource(graph, getUri(uri));\r
39         }\r
40         \r
41         //Map<String,String> mappedUris = new HashMap<String, String>();\r
42         \r
43         private String getUri(String uri) {\r
44                 \r
45                 String parsed[] = parse(uri);\r
46                 String currentUri = parsed[0] + "-" + ontologyVersions.get(parsed[0]) + "/" + parsed[2];\r
47                 return currentUri;\r
48         }\r
49         \r
50         private String[] parse(String uri) {\r
51                 int startVer = uri.indexOf("-");\r
52                 int endVer = uri.indexOf("/", startVer);\r
53                 if (endVer == -1) {\r
54                         return new String[]{uri.substring(0,startVer),uri.substring(startVer+1)};\r
55                 } else {\r
56                         return new String[]{uri.substring(0,startVer),uri.substring(startVer+1,endVer),uri.substring(endVer+1)};\r
57                 }\r
58                 \r
59         }\r
60         \r
61         @Override\r
62         public Object createValue(ReadGraph graph, List<String> value, List<String> types) throws DatabaseException {\r
63                 for (int i = 0; i < types.size(); i++) {\r
64                         types.set(i, getUri(types.get(i)));\r
65                 }\r
66                 return super.createValue(graph, value, types);\r
67         }\r
68 }\r