1 package org.simantics.db.layer0.util;
3 import java.util.LinkedList;
7 import org.simantics.databoard.Bindings;
8 import org.simantics.databoard.adapter.AdaptException;
9 import org.simantics.databoard.binding.Binding;
10 import org.simantics.databoard.binding.mutable.Variant;
11 import org.simantics.db.ReadGraph;
12 import org.simantics.db.Resource;
13 import org.simantics.db.common.request.ObjectsWithType;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.db.layer0.adapter.CopyHandler;
16 import org.simantics.db.layer0.migration.MigrationState;
17 import org.simantics.db.layer0.migration.MigrationStateKeys;
18 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;
19 import org.simantics.graph.representation.TransferableGraph1;
20 import org.simantics.layer0.Layer0;
22 public class ModelDependenciesBean {
24 public static final String EXTENSION_KEY = ModelDependenciesBean.class.getSimpleName();
26 public static final Binding BINDING = Bindings.getBindingUnchecked(ModelDependenciesBean.class);
28 public ModelDependency[] dependencies;
30 public ModelDependenciesBean() {
31 dependencies = new ModelDependency[0];
34 public ModelDependenciesBean(ModelDependency[] dependencies) {
35 this.dependencies = dependencies;
38 private static void collectDependencies(ReadGraph graph, Resource resource, LinkedList<ModelDependency> modelDependencies) throws DatabaseException {
40 Layer0 L0 = Layer0.getInstance(graph);
41 libs: for(Resource library : graph.syncRequest(new ObjectsWithType(resource, L0.IsLinkedTo, L0.SharedOntology))) {
42 String uri = graph.getPossibleURI(library);
43 if(uri == null) continue;
44 for(ModelDependency dep : modelDependencies)
45 if(dep.uri.equals(uri)) continue libs;
46 CopyHandler ch = graph.adapt(library, CopyHandler.class);
47 SimanticsClipboardImpl clipboard = new SimanticsClipboardImpl();
48 ch.copyToClipboard(graph, clipboard);
49 for (Set<Representation> object : clipboard.getContents()) {
50 TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);
52 modelDependencies.addFirst(new ModelDependency(uri, tg));
55 collectDependencies(graph, library, modelDependencies);
60 public static ModelDependenciesBean create(ReadGraph graph, Resource resource) throws DatabaseException {
62 LinkedList<ModelDependency> dependencies = new LinkedList<>();
63 collectDependencies(graph, resource, dependencies);
64 return new ModelDependenciesBean(dependencies.toArray(new ModelDependency[dependencies.size()]));
68 public static ModelDependenciesBean fromMigrationState(MigrationState state) throws DatabaseException {
69 Map<String,Variant> extensions = state.getProperty(MigrationStateKeys.TG_EXTENSIONS);
70 final Variant variant = extensions.get(ModelDependenciesBean.EXTENSION_KEY);
71 if (variant != null) {
73 return (ModelDependenciesBean) variant.getValue(ModelDependenciesBean.BINDING);
74 } catch (AdaptException e) {