From: Tuukka Lehtonen Date: Fri, 29 Nov 2019 20:10:12 +0000 (+0000) Subject: Merge "Fix graph.tg hardcoded in CompilePGraphs code" X-Git-Tag: v1.43.0~136^2~25 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=526f4a68350df5a272586f7d794603ecb4525132;hp=e3446802a81064942a7cbfea0c577e21ae5ae658 Merge "Fix graph.tg hardcoded in CompilePGraphs code" --- diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraphUtils.java b/bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraphUtils.java index b0690532b..f2321dce9 100644 --- a/bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraphUtils.java +++ b/bundles/org.simantics.graph/src/org/simantics/graph/representation/TransferableGraphUtils.java @@ -78,7 +78,51 @@ public class TransferableGraphUtils { return identity; } - + + /** + * Provided a tg and a resource uri, returns the identity of the tg if the uri_ matches the tg exactly + * @param tg + * @param uri_ + * @return + */ + public static Identity getIdentity2(TransferableGraph1 tg, String uri_) { + Collection identities = TransferableGraphUtils.getRoots(tg); + for (Identity i : identities) { + Identity id = getIdentity2(tg, uri_, i); + if (id != null) { + return id; + } + } + return null; + } + + /** + * + * @param tg + * @param uri_ + * @param id + * @return + */ + public static Identity getIdentity2(TransferableGraph1 tg, String uri_, Identity id) { + String uri = TransferableGraphUtils.getURI(tg, id.resource); + + if (uri_.equals(uri)) { + return id; + } + + if (uri_.startsWith(uri)) { + Collection childIdentitiesOfRoot = TransferableGraphUtils.getChildren2(tg, id); + for (Identity i2 : childIdentitiesOfRoot) { + Identity id2 = getIdentity2(tg, uri_, i2); + if (id2 != null) { + return id2; + } + } + } + + return null; + } + public static Identity getIdentity(TransferableGraph1 tg, int resource) { for(Identity id : tg.identities) { if(id.resource == resource) return id; diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/CompilePGraphs.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/CompilePGraphs.java index be5f9abae..3a12a7132 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/CompilePGraphs.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/CompilePGraphs.java @@ -15,10 +15,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; -import org.osgi.framework.Bundle; import org.simantics.Simantics; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; @@ -61,9 +59,14 @@ import org.simantics.graph.diff.TransferableGraphDelta1; import org.simantics.graph.representation.Identity; import org.simantics.graph.representation.Root; import org.simantics.graph.representation.TransferableGraph1; +import org.simantics.graph.representation.TransferableGraphUtils; import org.simantics.graphfile.ontology.GraphFileResource; import org.simantics.layer0.Layer0; import org.simantics.modeling.internal.Activator; +import org.simantics.project.management.GraphBundle; +import org.simantics.project.management.GraphBundleEx; +import org.simantics.project.management.GraphBundleRef; +import org.simantics.project.management.PlatformUtil; import org.simantics.utils.FileUtils; import org.simantics.utils.datastructures.Pair; import org.slf4j.LoggerFactory; @@ -141,28 +144,21 @@ public class CompilePGraphs { } }); - if (thisOntology == null) + if (thisOntology == null) throw new DatabaseException("Failed to dump the containing ontology of " + r + " into TransferableGraph1"); dependencies.add(thisOntology.second); - - for (Bundle b : Activator.getContext().getBundles()) { - String id = b.getSymbolicName(); - String name = (String) b.getHeaders().get("Bundle-Name"); - if (name == null) name = id; - if (name.equals(thisOntology.first)) - continue; - URL tg = b.getEntry("/graph.tg"); - if (tg == null) continue; - File f = url2file(FileLocator.resolve(tg), b.getSymbolicName()); - try { - dependencies.add(GraphCompiler.read(f)); - } catch (Exception e) { - throw new IOException("Failed to read compiled transferable graph as dependency: " + f, e); + + Collection tgs = PlatformUtil.getAllGraphs(); + + for (GraphBundle b : tgs) { + TransferableGraph1 tg = b.getGraph(); + Identity id = TransferableGraphUtils.getIdentity2(tg, thisOntology.first); + if(id == null) { + dependencies.add(tg); } } - Simantics.sync(new ReadRequest() { @Override public void run(ReadGraph graph) throws DatabaseException {