X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FModelDependenciesBean.java;h=f448340dd8847300ad3564560e7ab3b3fadaa744;hb=refs%2Fchanges%2F40%2F1140%2F3;hp=b42e46581b9fcc3fe895ed026ae78d8542314c94;hpb=1cb8ccadc93ab1a1ac5981ea6634b3ef5dd27ec4;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelDependenciesBean.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelDependenciesBean.java index b42e46581..f448340dd 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelDependenciesBean.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelDependenciesBean.java @@ -1,16 +1,32 @@ package org.simantics.db.layer0.util; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; + import org.simantics.databoard.Bindings; +import org.simantics.databoard.adapter.AdaptException; import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.CopyHandler; +import org.simantics.db.layer0.migration.MigrationState; +import org.simantics.db.layer0.migration.MigrationStateKeys; +import org.simantics.db.layer0.util.SimanticsClipboard.Representation; +import org.simantics.graph.representation.TransferableGraph1; +import org.simantics.layer0.Layer0; public class ModelDependenciesBean { public static final String EXTENSION_KEY = ModelDependenciesBean.class.getSimpleName(); - + public static final Binding BINDING = Bindings.getBindingUnchecked(ModelDependenciesBean.class); - + public ModelDependency[] dependencies; - + public ModelDependenciesBean() { dependencies = new ModelDependency[0]; } @@ -18,5 +34,48 @@ public class ModelDependenciesBean { public ModelDependenciesBean(ModelDependency[] dependencies) { this.dependencies = dependencies; } + + private static void collectDependencies(ReadGraph graph, Resource resource, LinkedList modelDependencies) throws DatabaseException { + + Layer0 L0 = Layer0.getInstance(graph); + libs: for(Resource library : graph.syncRequest(new ObjectsWithType(resource, L0.IsLinkedTo, L0.SharedOntology))) { + String uri = graph.getPossibleURI(library); + if(uri == null) continue; + for(ModelDependency dep : modelDependencies) + if(dep.uri.equals(uri)) continue libs; + CopyHandler ch = graph.adapt(library, CopyHandler.class); + SimanticsClipboardImpl clipboard = new SimanticsClipboardImpl(); + ch.copyToClipboard(graph, clipboard); + for (Set object : clipboard.getContents()) { + TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH); + if(tg != null) { + modelDependencies.addFirst(new ModelDependency(uri, tg)); + } + } + collectDependencies(graph, library, modelDependencies); + } + + } + + public static ModelDependenciesBean create(ReadGraph graph, Resource resource) throws DatabaseException { + + LinkedList dependencies = new LinkedList<>(); + collectDependencies(graph, resource, dependencies); + return new ModelDependenciesBean(dependencies.toArray(new ModelDependency[dependencies.size()])); + + } + + public static ModelDependenciesBean fromMigrationState(MigrationState state) throws DatabaseException { + Map extensions = state.getProperty(MigrationStateKeys.TG_EXTENSIONS); + final Variant variant = extensions.get(ModelDependenciesBean.EXTENSION_KEY); + if (variant != null) { + try { + return (ModelDependenciesBean) variant.getValue(ModelDependenciesBean.BINDING); + } catch (AdaptException e) { + e.printStackTrace(); + } + } + return null; + } }