1 package org.simantics.interop.xmlio;
\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
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
14 public class MigrateLoadRule extends DefaultLoadRule {
\r
16 Set<String> ontologies = new HashSet<String>();
\r
17 Map<String,String> ontologyVersions = new HashMap<String, String>();
\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
25 for (Resource ontology : graph.getObjects(lib, l0.ConsistsOf)) {
\r
26 if (!graph.isInstanceOf(ontology, l0.Ontology))
\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
37 public Resource getResource(ReadGraph graph, String uri) throws DatabaseException {
\r
38 return super.getResource(graph, getUri(uri));
\r
41 //Map<String,String> mappedUris = new HashMap<String, String>();
\r
43 private String getUri(String uri) {
\r
45 String parsed[] = parse(uri);
\r
46 String currentUri = parsed[0] + "-" + ontologyVersions.get(parsed[0]) + "/" + parsed[2];
\r
50 private String[] parse(String uri) {
\r
51 int startVer = uri.indexOf("-");
\r
52 int endVer = uri.indexOf("/", startVer);
\r
54 return new String[]{uri.substring(0,startVer),uri.substring(startVer+1)};
\r
56 return new String[]{uri.substring(0,startVer),uri.substring(startVer+1,endVer),uri.substring(endVer+1)};
\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
66 return super.createValue(graph, value, types);
\r