X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FTGConfigurer.java;fp=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FTGConfigurer.java;h=34af0d1fcbf4d573f8ac7b842e8ecf95596b7125;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TGConfigurer.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TGConfigurer.java new file mode 100644 index 000000000..34af0d1fc --- /dev/null +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TGConfigurer.java @@ -0,0 +1,118 @@ +package org.simantics.db.layer0.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.NamedResource; +import org.simantics.db.common.request.PossibleIndexRoot; +import org.simantics.db.common.utils.CommonDBUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.SubgraphExtent.ExtentStatus; +import org.simantics.db.layer0.util.TransferableGraphConfiguration2.RootSpec; +import org.simantics.layer0.Layer0; + +public class TGConfigurer { + + final private ReadGraph graph; + final Collection roots = new ArrayList(); + final Map preStatus = new HashMap(); + final boolean ignoreVirtualResources; + final boolean validate; + + public TGConfigurer(ReadGraph graph, boolean ignoreVirtualResources, boolean validate) { + this.graph = graph; + this.ignoreVirtualResources = ignoreVirtualResources; + this.validate = validate; + } + + public TGConfigurer(ReadGraph graph, boolean ignoreVirtualResources) { + this(graph, ignoreVirtualResources, true); + } + + public TGConfigurer exclusions(Collection exclusions) { + for(Resource r : exclusions) { + preStatus.put(r, ExtentStatus.EXCLUDED); + } + return this; + } + + public TGConfigurer roots(Collection rs) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + for(RootSpec root : rs) { + Resource nameResource = graph.getPossibleObject(root.resource, L0.HasName); + if(nameResource != null) preStatus.put(nameResource, ExtentStatus.EXCLUDED); +// String name = graph.getValue(nameResource, Bindings.STRING); + roots.add(new RootSpec(root.resource, root.name, root.internal)); + preStatus.put(root.resource, ExtentStatus.INTERNAL); + } + return this; + } + + public TGConfigurer roots2(Collection rs) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + for(Resource root : rs) { + Resource nameResource = graph.getPossibleObject(root, L0.HasName); + String name = ""; + if(nameResource != null) { + name = graph.getPossibleValue(nameResource, Bindings.STRING); + if(name == null) name = ""; + preStatus.put(nameResource, ExtentStatus.EXCLUDED); + } + roots.add(new RootSpec(root, name, true)); + preStatus.put(root, ExtentStatus.INTERNAL); + } + return this; + } + + public TGConfigurer roots3(Collection rs) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + for(NamedResource root : rs) { + Resource nameResource = graph.getPossibleObject(root.getResource(), L0.HasName); +// String name = graph.getValue(nameResource, Bindings.STRING); + roots.add(new RootSpec(root.getResource(), root.getName(), true)); + preStatus.put(root.getResource(), ExtentStatus.INTERNAL); + preStatus.put(nameResource, ExtentStatus.EXCLUDED); + } + return this; + } + + public TransferableGraphConfiguration2 create() throws DatabaseException { + + // Final preparation + + // -Exclude root library if not explicitly included + if (!roots.contains(graph.getRootLibrary())) + preStatus.put(graph.getRootLibrary(), ExtentStatus.EXCLUDED); + + // -Exclude owners if not explicitly defined + Layer0 L0 = Layer0.getInstance(graph); + ArrayList rootList = new ArrayList(); + for (RootSpec root : roots) { + if(root.internal) { + rootList.add(root.resource); + for (Resource owner : graph.getObjects(root.resource, L0.IsOwnedBy)) { + ExtentStatus ownerStatus = preStatus.get(owner); + if(ownerStatus == null) + preStatus.put(owner, ExtentStatus.EXCLUDED); + } + } else { + preStatus.put(root.resource, ExtentStatus.EXTERNAL); + } + } + + Resource owner = CommonDBUtils.getNearestOwner(graph, rootList); + if(owner != null) { + Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(owner)); + return new TransferableGraphConfiguration2(indexRoot, roots, preStatus, ignoreVirtualResources, validate); + } else { + return new TransferableGraphConfiguration2(null, roots, preStatus, ignoreVirtualResources, validate); + } + + } + +}