]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/ontologymodule/OntologyModuleSourceRepository.java
Use proper environment to resolve SCL types in ontology module
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / ontologymodule / OntologyModuleSourceRepository.java
index 134b2b3d7e2acf0d803fa3612d4acefeafbe50bc..0b882efc3a89d87d1e2591516b43909ec96800cd 100644 (file)
@@ -8,9 +8,14 @@ import org.simantics.Simantics;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.common.request.UnaryRead;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.scl.compiler.errors.Failable;
+import org.simantics.scl.compiler.errors.Failure;
+import org.simantics.scl.compiler.errors.Success;
+import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
+import org.simantics.scl.compiler.module.repository.ModuleRepository;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
 import org.simantics.scl.compiler.source.ModuleSource;
-import org.simantics.scl.compiler.source.PrecompiledModuleSource;
 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,15 +27,15 @@ public enum OntologyModuleSourceRepository implements ModuleSourceRepository {
     
     private static final Logger LOGGER = LoggerFactory.getLogger(OntologyModuleSourceRepository.class);
 
-       static class ModuleSourceRequest extends UnaryRead<String, ModuleSource> {
+       static class ModuleRequest extends UnaryRead<String, Module> {
 
-        public ModuleSourceRequest(String moduleName) {
+        public ModuleRequest(String moduleName) {
                        super(moduleName);
                }
 
                @Override
-        public ModuleSource perform(ReadGraph graph) throws DatabaseException {
-            return new PrecompiledModuleSource(new OntologyModule(graph, parameter), -1.0);
+        public Module perform(ReadGraph graph) throws DatabaseException {
+            return new OntologyModule(graph, parameter);
         }
 
     };
@@ -41,12 +46,33 @@ public enum OntologyModuleSourceRepository implements ModuleSourceRepository {
         if(!moduleName.startsWith("http://"))
             return null; // Don't do a graph request if this cannot be a resource
         
-        try {
-            return Simantics.getAvailableRequestProcessor().syncRequest(new ModuleSourceRequest(moduleName));
-        } catch(DatabaseException e) {
-            LOGGER.error("Failed to read ontology module " + moduleName + ".", e);
-            return null;
-        }
+        return new ModuleSource() {
+
+            @Override
+            public double getPriority() {
+                return -1.0;
+            }
+
+            @Override
+            public String getModuleName() {
+                return moduleName;
+            }
+
+            @Override
+            public ClassLoader getClassLoader() {
+                return getClass().getClassLoader();
+            }
+
+            @Override
+            public Failable<Module> compileModule(ModuleRepository environment, UpdateListener listener,
+                    ModuleCompilationOptions options) {
+                try {
+                    return new Success<Module>(Simantics.getAvailableRequestProcessor().syncRequest(new ModuleRequest(moduleName)));
+                } catch(DatabaseException e) {
+                    return new Failure(e);
+                }
+            }
+        };
     }
 
     @Override