X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fgenericrelation%2FExternalRequest.java;h=8cf5652ce0367f31baeca31e72c0f70425657c0c;hb=ccb253462b54a0e036f0906ec8ac11a9021a968c;hp=77520aa6e66ce2ed324ec91b8868955698a4759a;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/ExternalRequest.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/ExternalRequest.java index 77520aa6e..8cf5652ce 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/ExternalRequest.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/ExternalRequest.java @@ -1,45 +1,48 @@ -package org.simantics.db.layer0.genericrelation; - -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.Session; -import org.simantics.db.common.request.ParametrizedPrimitiveRead; -import org.simantics.db.layer0.adapter.GenericRelationIndex; -import org.simantics.db.procedure.Listener; -import org.simantics.utils.datastructures.Pair; - -class ExternalRequest extends ParametrizedPrimitiveRead,Long> implements Runnable { - - private static long value = 0; - private Session session; - private Listener procedure; - - public ExternalRequest(GenericRelationIndex index, Resource model) { - super(Pair.make(index, model)); - } - - @Override - public void register(ReadGraph graph, Listener procedure) { - synchronized(getClass()) { - procedure.execute(value++); - } - if(procedure.isDisposed()) return; - assert(this.procedure == null); - this.session = graph.getSession(); - this.procedure = procedure; - parameter.first.addListener(graph, parameter.second, this); - } - - @Override - public void unregistered() { - parameter.first.removeListener(session, parameter.second, this); - } - - @Override - public void run() { - synchronized(getClass()) { - procedure.execute(value++); - } - } - +package org.simantics.db.layer0.genericrelation; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.common.request.ParametrizedPrimitiveRead; +import org.simantics.db.layer0.adapter.GenericRelationIndex; +import org.simantics.db.procedure.Listener; +import org.simantics.utils.datastructures.Pair; + +class ExternalRequest extends ParametrizedPrimitiveRead,Long> implements Runnable { + + private static long value = 0; + private Session session; + private Listener procedure; + + public ExternalRequest(GenericRelationIndex index, Resource model) { + super(Pair.make(index, model)); + } + + @Override + public void register(ReadGraph graph, Listener procedure) { + synchronized(getClass()) { + procedure.execute(value++); + } + if(procedure.isDisposed()) return; + assert(this.procedure == null); + this.session = graph.getSession(); + this.procedure = procedure; + parameter.first.addListener(graph, parameter.second, this); + } + + @Override + public void unregistered() { + // Session will be null if the listener was not added at all. + if (session != null) { + parameter.first.removeListener(session, parameter.second, this); + } + } + + @Override + public void run() { + synchronized(getClass()) { + procedure.execute(value++); + } + } + } \ No newline at end of file