X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.graph.db%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fdb%2FStreamingTransferableGraphImportProcess.java;h=c9b48b32591fce602c7a5aacec56c23f3b7fe9c9;hb=refs%2Fchanges%2F02%2F1402%2F2;hp=754ae61233f1e2b36460801a2743495b967af439;hpb=8aa0b1dd8b4ddd5d14e18c79d236c58decbaddcd;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.graph.db/src/org/simantics/graph/db/StreamingTransferableGraphImportProcess.java b/bundles/org.simantics.graph.db/src/org/simantics/graph/db/StreamingTransferableGraphImportProcess.java index 754ae6123..c9b48b325 100644 --- a/bundles/org.simantics.graph.db/src/org/simantics/graph/db/StreamingTransferableGraphImportProcess.java +++ b/bundles/org.simantics.graph.db/src/org/simantics/graph/db/StreamingTransferableGraphImportProcess.java @@ -163,8 +163,8 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap void addMissing(int handleIndex, String external) { allMissingExternals.put(external, handleIndex); Set removals = new HashSet<>(); - for(String ext : missingExternals) if(ext.startsWith(external)) return; - for(String ext : missingExternals) if(external.startsWith(ext)) removals.add(ext); + for(String ext : missingExternals) if(ext.startsWith(external + "/")) return; + for(String ext : missingExternals) if(external.startsWith(ext + "/")) removals.add(ext); missingExternals.removeAll(removals); missingExternals.add(external); } @@ -210,18 +210,18 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap TransientCacheAsyncListener.instance()); Resource child = childMap.get(def.name); if(child == null) { - addMissing(identity.resource, graph.getURI(parent) + "/" + def.name); + addMissing(identity.resource, graph.getURI(parent) + "/" + URIStringUtils.escape(def.name)); } else { handles[identity.resource] = builder.handle(child); } } else { - addMissing(identity.resource, TransferableGraphUtils.getURI(resourceCount, identityMap, def.parent) + "/" + def.name); + addMissing(identity.resource, TransferableGraphUtils.getURI(resourceCount, identityMap, def.parent) + "/" + URIStringUtils.escape(def.name)); } } } } else if(definition instanceof Internal) { - String uri = TransferableGraphUtils.getTrueURI(resourceCount, identityMap, identity.resource); + String uri = TransferableGraphUtils.getURI(resourceCount, identityMap, identity.resource); Resource existing = graph.getPossibleResource(uri); if(existing != null) { existingInternalMap.put(identity.resource, existing); @@ -251,11 +251,13 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap @Override public Resource createChild(WriteOnlyGraph graph, Resource parent, Resource child, String name) throws DatabaseException { + //System.err.println("child " + parent + " - " + child + " = " + name); if(child == null) child = graph.newResource(); Resource nameResource = graph.newResource(); graph.claim(nameResource, InstanceOf, null, String); graph.claimValue(nameResource, name, WriteBindings.STRING); graph.claim(child, HasName, NameOf, nameResource); + graph.claim(parent, ConsistsOf, PartOf, child); return child; } @@ -289,7 +291,7 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap ClusteringSupport support = graph.getService(ClusteringSupport.class); if(id == Extensions.ROOT_LIBRARY_CLUSTER_SET || id == Extensions.INDEX_ROOT_CLUSTER_SET) return; Resource indexRootClusterSetResource = rootLibrary; - if(support.isClusterSet(indexRoot)) { + if(indexRoot != null && support.isClusterSet(indexRoot)) { indexRootClusterSetResource = indexRoot; } else { graph.setClusterSet4NewResource(rootLibrary); @@ -339,11 +341,15 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap Collections.sort(missing); for(String uri : missing) { String[] parts = URIStringUtils.splitURI(uri); + // URIStringUtils.splitURI returns root URI in non-standard format, so fix it manually as a workaround + if (parts[0].equals("http://")) { + parts[0] = "http:/"; + } Resource parent = resolvedParents.get(parts[0]); // TODO: proper exception message if(parent == null) { - throw new IllegalStateException("!!"); + throw new IllegalStateException("Missing URI: " + uri); } Resource childResource = graph.newResource(); @@ -351,7 +357,7 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap Resource nameResource = graph.newResource(); graph.claim(nameResource, InstanceOf, null, String); - graph.claimValue(nameResource, parts[1], WriteBindings.STRING); + graph.claimValue(nameResource, URIStringUtils.unescape(parts[1]), WriteBindings.STRING); graph.claim(childResource, HasName, NameOf, nameResource); graph.claim(parent, ConsistsOf, PartOf, childResource); @@ -453,7 +459,6 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap } else if(definition instanceof Internal) { Internal def = (Internal)definition; - Resource external = existingInternalMap.get(identity.resource); if(external != null) { handles[identity.resource] = builder.handle(external);