]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph.db/src/org/simantics/graph/db/StreamingTransferableGraphImportProcess.java
Clean up and support internal seed resources in tg export
[simantics/platform.git] / bundles / org.simantics.graph.db / src / org / simantics / graph / db / StreamingTransferableGraphImportProcess.java
index 4894467e3d1260aa25d4239349942542000ede22..c9b48b32591fce602c7a5aacec56c23f3b7fe9c9 100644 (file)
@@ -163,8 +163,8 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap
        void addMissing(int handleIndex, String external) {
                allMissingExternals.put(external, handleIndex);
                Set<String> 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;
        }
 
@@ -347,7 +349,7 @@ public class StreamingTransferableGraphImportProcess implements TransferableGrap
                                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();
@@ -355,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);
@@ -457,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);