+
+ private static void collectDependencies(ReadGraph graph, Resource resource, LinkedList<ModelDependency> 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<Representation> 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<ModelDependency> 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<String,Variant> 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;
+ }