X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fadapter%2Fimpl%2FSharedOntologyImportAdvisor.java;h=2a575a578769db92b912ca66e1c02ed427aab314;hp=e16d07cf0469ace76097b80204a264476a5755aa;hb=9acebe9584f8f2a78f0322b6e0e24438e7ceb984;hpb=081bf7e08a67c0af23c5846e163be39bb19f12cb diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/SharedOntologyImportAdvisor.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/SharedOntologyImportAdvisor.java index e16d07cf0..2a575a578 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/SharedOntologyImportAdvisor.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/SharedOntologyImportAdvisor.java @@ -33,6 +33,7 @@ import org.simantics.graph.db.MissingDependencyException; import org.simantics.graph.db.TransferableGraphImporter; import org.simantics.graph.representation.Root; import org.simantics.layer0.Layer0; +import org.simantics.utils.datastructures.Pair; import org.simantics.utils.datastructures.Triple; public class SharedOntologyImportAdvisor extends AbstractImportAdvisor2 { @@ -87,7 +88,15 @@ public class SharedOntologyImportAdvisor extends AbstractImportAdvisor2 { } Resource existing = graph.getPossibleResource(uri); - if(existing != null) throw new DatabaseException("Shared library " + uri + " exists already."); + if(existing != null) { + if(graph.isInstanceOf(existing, L0.ExternalEntity)) { + created.put(r, existing); + addRootInfo(r, r.name, existing); + return null; + } else { + throw new DatabaseException("Shared library " + uri + " exists already."); + } + } Resource type = graph.getPossibleResource(r.type); if(type == null) { @@ -124,43 +133,62 @@ public class SharedOntologyImportAdvisor extends AbstractImportAdvisor2 { public void beforeWrite(WriteOnlyGraph graph, TransferableGraphImporter process) throws DatabaseException { - graph.markUndoPoint(); - if(published) { - XSupport xs = graph.getService(XSupport.class); - xs.setServiceMode(false, true); - } - - graph.setClusterSet4NewResource(graph.getRootLibrary()); - graph.flushCluster(); - - for(Map.Entry>> entry : toCreate.entrySet()) { - - Triple> recipe = entry.getValue(); - - Resource base = recipe.first; - for(int i=0;i mode = xs.getServiceMode(); + + try { + + graph.markUndoPoint(); + + if(published) { + xs.setServiceMode(true, true); + } else { + xs.setServiceMode(true, mode.second); + } + + graph.setClusterSet4NewResource(graph.getRootLibrary()); + graph.flushCluster(); + + for(RootInfo info : getRootInfo()) { + // At this stage these are existing L0.ExternalEntity instances that are now being imported. + graph.deny(info.resource, L0.InstanceOf, null, L0.ExternalEntity, null); + } + + for(Map.Entry>> entry : toCreate.entrySet()) { + + Triple> recipe = entry.getValue(); + + Resource base = recipe.first; + for(int i=0;i