]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/CompilePGraphs.java
Removed org.simantics.ltk[.antlr] bundles, exact import for antlr
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / CompilePGraphs.java
index 9b620c2f7c55e39e0d789b6d926759b8939d475a..879a57d19a637935bd7164fb03c32af6fe738088 100644 (file)
@@ -16,6 +16,8 @@ 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;
@@ -49,6 +51,8 @@ import org.simantics.graph.compiler.ExternalFileLoader;
 import org.simantics.graph.compiler.GraphCompiler;
 import org.simantics.graph.compiler.GraphCompilerPreferences;
 import org.simantics.graph.compiler.ValidationMode;
+import org.simantics.graph.compiler.internal.ltk.ISource;
+import org.simantics.graph.compiler.internal.ltk.Problem;
 import org.simantics.graph.db.TransferableGraphException;
 import org.simantics.graph.db.TransferableGraphSource;
 import org.simantics.graph.db.TransferableGraphs;
@@ -59,17 +63,18 @@ import org.simantics.graph.representation.Root;
 import org.simantics.graph.representation.TransferableGraph1;
 import org.simantics.graphfile.ontology.GraphFileResource;
 import org.simantics.layer0.Layer0;
-import org.simantics.ltk.ISource;
-import org.simantics.ltk.Problem;
 import org.simantics.modeling.internal.Activator;
 import org.simantics.utils.FileUtils;
 import org.simantics.utils.datastructures.Pair;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author Antti Villberg
  */
 public class CompilePGraphs {
 
+    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(CompilePGraphs.class);
+
     public static interface UserAgent {
         void reportProblems(CompilationResult result);
     }
@@ -86,24 +91,17 @@ public class CompilePGraphs {
     }
 
     public static void compilePGraphs(Resource r, UserAgent userAgent) throws IOException, DatabaseException {
+        compilePGraphs(r, userAgent, new NullProgressMonitor());
+    }
+    
+    public static void compilePGraphs(Resource r, UserAgent userAgent, IProgressMonitor monitor) throws IOException, DatabaseException {
         final Collection<ISource> sources = new ArrayList<>();
         Collection<TransferableGraph1> dependencies = new ArrayList<>();
 
-        for (Bundle b : Activator.getContext().getBundles()) {
-            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);
-            }
-        }
-
-        final TransferableGraph1 thisOntology = Simantics.sync(new UniqueRead<TransferableGraph1>() {
+        final Pair<String, TransferableGraph1> thisOntology = Simantics.sync(new UniqueRead<Pair<String, TransferableGraph1>>() {
 
             @Override
-            public TransferableGraph1 perform(ReadGraph graph) throws DatabaseException {
+            public Pair<String, TransferableGraph1> perform(ReadGraph graph) throws DatabaseException {
                 Layer0 L0 = Layer0.getInstance(graph);
                 Resource parent = graph.getSingleObject(r, L0.PartOf);
 
@@ -130,12 +128,13 @@ public class CompilePGraphs {
                     }
                 };
 
+                String uri = graph.getURI(r);
                 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)
-                        return tg;
+                        return Pair.make(uri, tg);
                 }
 
                 return null;
@@ -145,7 +144,24 @@ public class CompilePGraphs {
         if (thisOntology == null)      
             throw new DatabaseException("Failed to dump the containing ontology of " + r + " into TransferableGraph1");
 
-        dependencies.add(thisOntology);
+        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);
+            }
+        }
+
 
         Simantics.sync(new ReadRequest() {
             @Override
@@ -242,6 +258,9 @@ public class CompilePGraphs {
                 }
             });
         }
+        
+        // Delete index to get rid of floating old instances of the same ontology
+//        DatabaseIndexing.deleteAllIndexes();
     }
 
     private static File extractLib(URL libURL, String libName) throws FileNotFoundException, IOException {
@@ -271,7 +290,7 @@ public class CompilePGraphs {
                 Logger.defaultLogError(e);
             }
         } else {
-            System.err.println("Unsupported URL protocol '" + url + "' for FastLZ native library file '" + fileName);
+            LOGGER.warn("Unsupported URL protocol");
         }   
         return null;
     }