X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FEnvironmentRequest.java;h=f1f235a887d867cb85cbd75daec743256900bf94;hp=2e37adee82f5fa26c98b68e767e3fe9bb346481c;hb=74c5277934cfba504e5b9569c1524a977d343a9d;hpb=fb1256f2cfbd58b316317ea8777bfe91fd93ccda diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/EnvironmentRequest.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/EnvironmentRequest.java index 2e37adee8..f1f235a88 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/EnvironmentRequest.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/EnvironmentRequest.java @@ -15,11 +15,14 @@ import org.simantics.scl.compiler.module.repository.UpdateListener; import org.simantics.scl.osgi.SCLOsgi; import org.simantics.scl.runtime.SCLContext; import org.simantics.utils.datastructures.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Finds the environment of a model or other index root. */ public abstract class EnvironmentRequest extends UnaryRead> { + private static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentRequest.class); public EnvironmentRequest(Resource parameter) { super(parameter); @@ -78,6 +81,7 @@ public abstract class EnvironmentRequest extends UnaryRead(mainModuleUri) { - - UpdateListenerImpl sclListener; - - @Override - public void register(ReadGraph graph, Listener procedure) { - - SCLContext context = SCLContext.getCurrent(); - Object oldGraph = context.put("graph", graph); - try { - - if(procedure.isDisposed()) { - getEnvironment(environmentSpecification, procedure, null); - } else { - sclListener = new UpdateListenerImpl(environmentSpecification, procedure); - sclListener.notifyAboutUpdate(); + try { + return Pair.make(environmentSpecification, graph.syncRequest(new ParametrizedPrimitiveRead(mainModuleUri) { + + UpdateListenerImpl sclListener; + + @Override + public void register(ReadGraph graph, Listener procedure) { + + SCLContext context = SCLContext.getCurrent(); + Object oldGraph = context.put("graph", graph); + try { + + if(procedure.isDisposed()) { + getEnvironment(environmentSpecification, procedure, null); + } else { + sclListener = new UpdateListenerImpl(environmentSpecification, procedure); + sclListener.notifyAboutUpdate(); + } + + } finally { + context.put("graph", oldGraph); } - - } finally { - context.put("graph", oldGraph); + } - - } - - @Override - public void unregistered() { - if(sclListener != null) - sclListener.stopListening(); - } - - })); + + @Override + public void unregistered() { + if(sclListener != null) + sclListener.stopListening(); + } + + })); + } catch(DatabaseException e) { + LOGGER.error("Environment request failed", e); + throw e; + } } @Override