]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/OntologyModuleSourceRepository.java
Fixing a deadlock. Some improvements to ModuleSourceRepository API
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / OntologyModuleSourceRepository.java
1 package org.simantics.modeling.scl;
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.module.repository.UpdateListener;
12 import org.simantics.scl.compiler.source.ModuleSource;
13 import org.simantics.scl.compiler.source.PrecompiledModuleSource;
14 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
15 import org.simantics.scl.runtime.SCLContext;
16
17 import gnu.trove.procedure.TObjectProcedure;
18
19 public enum OntologyModuleSourceRepository implements ModuleSourceRepository {
20     INSTANCE;
21
22         static class ModuleSourceRequest extends UnaryRead<String, ModuleSource> {
23
24         public ModuleSourceRequest(String moduleName) {
25                         super(moduleName);
26                 }
27
28                 @Override
29         public ModuleSource perform(ReadGraph graph) throws DatabaseException {
30             return new PrecompiledModuleSource(new OntologyModule(graph, parameter), -1.0);
31         }
32
33     };
34         
35     @Override
36     public ModuleSource getModuleSource(final String moduleName,
37             UpdateListener listener) {
38         if(!moduleName.startsWith("http://"))
39             return null; // Don't do a graph request if this cannot be a resource
40         
41         ReadGraph graph = (ReadGraph)SCLContext.getCurrent().get("graph");
42         
43         try {
44             if(graph != null) {
45                 return new PrecompiledModuleSource(new OntologyModule(graph, moduleName), -1.0);
46             }
47
48             return Simantics.getSession().syncRequest(new ModuleSourceRequest(moduleName));
49         } catch(DatabaseException e) {
50             e.printStackTrace();
51             return null;
52         }
53     }
54
55     @Override
56     public void forAllModules(TObjectProcedure<String> procedure) {
57     }
58     
59     @Override
60     public Collection<String> getModuleNames() {
61         return Collections.emptyList();
62     }
63
64 }