]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/ontologymodule/OntologyModuleSourceRepository.java
Merge "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
1 package org.simantics.modeling.scl.ontologymodule;
2
3
4 import java.util.Collection;
5 import java.util.Collections;
6
7 import org.simantics.Simantics;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.common.request.UnaryRead;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.scl.compiler.errors.Failable;
12 import org.simantics.scl.compiler.errors.Failure;
13 import org.simantics.scl.compiler.errors.Success;
14 import org.simantics.scl.compiler.module.Module;
15 import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
16 import org.simantics.scl.compiler.module.repository.ModuleRepository;
17 import org.simantics.scl.compiler.module.repository.UpdateListener;
18 import org.simantics.scl.compiler.source.ModuleSource;
19 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 import gnu.trove.procedure.TObjectProcedure;
24
25 public enum OntologyModuleSourceRepository implements ModuleSourceRepository {
26     INSTANCE;
27     
28     private static final Logger LOGGER = LoggerFactory.getLogger(OntologyModuleSourceRepository.class);
29
30         static class ModuleRequest extends UnaryRead<String, Module> {
31
32         public ModuleRequest(String moduleName) {
33                         super(moduleName);
34                 }
35
36                 @Override
37         public Module perform(ReadGraph graph) throws DatabaseException {
38             return new OntologyModule(graph, parameter);
39         }
40
41     };
42         
43     @Override
44     public ModuleSource getModuleSource(final String moduleName,
45             UpdateListener listener) {
46         if(!moduleName.startsWith("http://"))
47             return null; // Don't do a graph request if this cannot be a resource
48         
49         return new ModuleSource() {
50
51             @Override
52             public double getPriority() {
53                 return -1.0;
54             }
55
56             @Override
57             public String getModuleName() {
58                 return moduleName;
59             }
60
61             @Override
62             public ClassLoader getClassLoader() {
63                 return getClass().getClassLoader();
64             }
65
66             @Override
67             public Failable<Module> compileModule(ModuleRepository environment, UpdateListener listener,
68                     ModuleCompilationOptions options) {
69                 try {
70                     return new Success<Module>(Simantics.getAvailableRequestProcessor().syncRequest(new ModuleRequest(moduleName)));
71                 } catch(DatabaseException e) {
72                     return new Failure(e);
73                 }
74             }
75         };
76     }
77
78     @Override
79     public void forAllModules(TObjectProcedure<String> procedure) {
80     }
81     
82     @Override
83     public Collection<String> getModuleNames() {
84         return Collections.emptyList();
85     }
86
87 }