package org.simantics.modeling.scl; 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.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.simantics.scl.runtime.SCLContext; import gnu.trove.procedure.TObjectProcedure; public enum OntologyModuleSourceRepository implements ModuleSourceRepository { INSTANCE; static class ModuleSourceRequest extends UnaryRead { public ModuleSourceRequest(String moduleName) { super(moduleName); } @Override public ModuleSource perform(ReadGraph graph) throws DatabaseException { return new PrecompiledModuleSource(new OntologyModule(graph, parameter), -1.0); } }; @Override public ModuleSource getModuleSource(final String moduleName, UpdateListener listener) { if(!moduleName.startsWith("http://")) return null; // Don't do a graph request if this cannot be a resource ReadGraph graph = (ReadGraph)SCLContext.getCurrent().get("graph"); try { if(graph != null) { return new PrecompiledModuleSource(new OntologyModule(graph, moduleName), -1.0); } return Simantics.getSession().syncRequest(new ModuleSourceRequest(moduleName)); } catch(DatabaseException e) { e.printStackTrace(); return null; } } @Override public void forAllModules(TObjectProcedure procedure) { } @Override public void checkUpdates() { } @Override public String getDocumentation(String documentationName) { return null; } @Override public void forAllDocumentations(TObjectProcedure procedure) { } @Override public void clear() { } }