]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/GraphModuleSourceRepository.java
Guard graph SCL module compilation
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / GraphModuleSourceRepository.java
index b6d6caefd25c6a93de3eca1990e39fdb62cfbbd6..a70844cd375c8956adb593cb71406e92d782e963 100644 (file)
@@ -12,9 +12,12 @@ import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.procedure.SyncListener;
 import org.simantics.db.request.Read;
+import org.simantics.db.request.ReadExt;
+import org.simantics.db.request.RequestFlags;
 import org.simantics.layer0.Layer0;
 import org.simantics.modeling.ModelingUtils;
 import org.simantics.modeling.internal.Activator;
+import org.simantics.modeling.scl.ontologymodule.OntologyModuleSourceRepository;
 import org.simantics.scl.compiler.internal.codegen.types.JavaReferenceValidatorFactory;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
 import org.simantics.scl.compiler.module.repository.UpdateListener.Observable;
@@ -51,7 +54,7 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
             else
                 return Simantics.getAvailableRequestProcessor().syncRequest(request);
         } catch (DatabaseException e) {
-            LOGGER.error("Failed to read graph module " + moduleName + ".", e);
+            LOGGER.error("Failed to read graph module {}.",  moduleName, e);
             return null;
         }
     }
@@ -96,10 +99,15 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
         @Override
         public void exception(ReadGraph graph, Throwable t)
                 throws DatabaseException {
-            t.printStackTrace();
+            LOGGER.error("Could not listen {}", this, t);
             if(alreadyExecutedOnce && listener != null)
                 fireUpdate(graph);
         }
+
+        @Override
+        public String toString() {
+            return moduleName + " " + listener + " (" + alreadyExecutedOnce + ") [" + getClass().toString() + "]";
+        }
     };
     
     public static class GraphModuleSource extends StringModuleSource {
@@ -121,7 +129,7 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
             try {
                 Simantics.getSession().syncRequest(new WriteModuleSource(getModuleName(), newSourceText));
             } catch (DatabaseException e) {
-                e.printStackTrace();
+                LOGGER.error("Could not update {} with newSourceText {}", this, newSourceText);
             }
         }
         
@@ -131,6 +139,29 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
         }
     }
 
+    static class PossibleResourceIU extends UnaryRead<String,Resource> implements ReadExt {
+
+        public PossibleResourceIU(String parameter) {
+            super(parameter);
+        }
+
+        @Override
+        public Resource perform(ReadGraph graph) throws DatabaseException {
+            return graph.getPossibleResource(parameter);
+        }
+
+        @Override
+        public boolean isImmutable(ReadGraph graph) throws DatabaseException {
+            return false;
+        }
+
+        @Override
+        public int getType() {
+            return RequestFlags.IMMEDIATE_UPDATE;
+        }
+        
+    }
+    
     static class ReadModuleSource extends UnaryRead<String, ModuleSource> {
         public ReadModuleSource(String moduleName) {
             super(moduleName);
@@ -138,7 +169,7 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
 
         @Override
         public ModuleSource perform(ReadGraph graph) throws DatabaseException {
-            Resource moduleResource = graph.getPossibleResource(parameter);
+            Resource moduleResource = graph.syncRequest(new PossibleResourceIU(parameter));
             if(moduleResource == null)
                 return null;
             Layer0 L0 = Layer0.getInstance(graph);
@@ -185,7 +216,11 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
         Collection<Resource> ontologies = Simantics.applySCL("Simantics/SharedOntologies", "getSharedOntologies", graph, Tuple0.INSTANCE);
         for (Resource ontology : ontologies) {
             for(Resource module : ModelingUtils.searchByType(graph, ontology, L0.SCLModule))
-                result.add(graph.getURI(module));
+                try {
+                    result.add(graph.getURI(module));
+                } catch(DatabaseException e) {
+                    LOGGER.error("Failed to find uri for " + module + ".");
+                }
         }
         
         return result;
@@ -193,8 +228,9 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
     
     @Override
     public void forAllModules(TObjectProcedure<String> procedure) {
+        THashSet<String> moduleURIs = null;
         try {
-            THashSet<String> moduleURIs = Simantics.getAvailableRequestProcessor().syncRequest(new Read<THashSet<String>>() {
+            moduleURIs = Simantics.getAvailableRequestProcessor().syncRequest(new Read<THashSet<String>>() {
                 @Override
                 public THashSet<String> perform(ReadGraph graph)
                         throws DatabaseException {
@@ -203,7 +239,7 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
             });
             moduleURIs.forEach(procedure);
         } catch (DatabaseException e) {
-            e.printStackTrace();
+            LOGGER.error("Could not execute procedure {} for all modules {}", procedure, String.valueOf(moduleURIs), e);
         }
     }