From 922dcf7ab2d716a6d17e6224bc1a12b1196233aa Mon Sep 17 00:00:00 2001 From: Miro Richard Eklund Date: Fri, 22 Nov 2019 13:03:07 +0200 Subject: [PATCH] Fix graph.tg hardcoded in CompilePGraphs code Ontology cannot be compiled if it depends on a tg that has another name than graph.tg. Fixed this by searching for all .tg files instead of those called graph.tg. gitlab #422 Change-Id: I52fb91f31b0ae052097fdedd36efa56e314adec5 --- .../TransferableGraphUtils.java | 46 ++++++++++++++++++- .../simantics/modeling/CompilePGraphs.java | 32 ++++++------- 2 files changed, 59 insertions(+), 19 deletions(-) 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 { -- 2.43.2