X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FNamespaceIndex.java;h=e55e99c6117bd1bf296c6f90a7b31f558ea7be51;hb=ad18bf76b19bec530bc68c6041ab5fb245b8ee4d;hp=5267280032fa67f51f188f624d7224061c076ad1;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/NamespaceIndex.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/NamespaceIndex.java index 526728003..e55e99c61 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/NamespaceIndex.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/NamespaceIndex.java @@ -11,86 +11,29 @@ *******************************************************************************/ package org.simantics.db.impl.query; -import gnu.trove.map.hash.TObjectIntHashMap; - -import java.util.concurrent.Semaphore; - import org.simantics.databoard.binding.Binding; import org.simantics.databoard.serialization.Serializer; import org.simantics.databoard.util.URIStringUtils; import org.simantics.db.common.WriteBindings; import org.simantics.db.common.exception.DebugException; +import org.simantics.db.exception.DatabaseException; import org.simantics.db.impl.graph.ReadGraphImpl; import org.simantics.db.impl.procedure.InternalProcedure; -import org.simantics.db.procedure.ListenerBase; + +import gnu.trove.map.hash.TObjectIntHashMap; final public class NamespaceIndex extends StringQuery>> { - -// public ArrayList>> procs = null; - private NamespaceIndex(final String id) { + NamespaceIndex(final String id) { super(id); } - final static void runner(ReadGraphImpl graph, final String id, final QueryProcessor provider, NamespaceIndex cached, final CacheEntry parent, final ListenerBase listener, final InternalProcedure> procedure) { - - NamespaceIndex entry = cached != null ? cached : (NamespaceIndex)provider.namespaceIndexMap22.get(id); - if(entry == null) { - - entry = new NamespaceIndex(id); - entry.setPending(); - entry.clearResult(provider.querySupport); - entry.putEntry(provider); - - provider.performForEach(graph, entry, parent, listener, procedure); - - } else { - - if(entry.isPending()) { - synchronized(entry) { - if(entry.isPending()) { - throw new IllegalStateException(); -// if(entry.procs == null) entry.procs = new ArrayList>>(); -// entry.procs.add(procedure); -// provider.registerDependencies(graph, entry, parent, listener, procedure, false); -// return; - } - } - } - provider.performForEach(graph, entry, parent, listener, procedure); - } - - } - - final public static void queryEach(ReadGraphImpl graph, final String id, final QueryProcessor provider, final CacheEntry parent, final ListenerBase listener, final InternalProcedure> procedure) { - - final NamespaceIndex entry = (NamespaceIndex)provider.namespaceIndexMap22.get(id); - - if(parent == null && listener == null && entry != null && entry.isReady()) { - entry.performFromCache(graph, provider, procedure); - return; - } - - runner(graph, id, provider, entry, parent, listener, procedure); - - } - - @Override - public NamespaceIndex getEntry(QueryProcessor provider) { - return provider.namespaceIndexMap22.get(id); - } - - @Override - public void putEntry(QueryProcessor provider) { - provider.namespaceIndexMap22.put(id, this); - } - @Override final public void removeEntry(QueryProcessor provider) { - provider.namespaceIndexMap22.remove(id); + provider.cache.remove(this); } - final private void index(ReadGraphImpl graph, final QueryProcessor provider, int root, final InternalProcedure> procedure) { + final private void index(ReadGraphImpl graph, final QueryProcessor provider, int root, final InternalProcedure> procedure) throws DatabaseException { if(root == 0) { add2(graph, null); @@ -104,10 +47,10 @@ final public class NamespaceIndex extends StringQuery result = new TObjectIntHashMap(); - Objects.runner(graph, root, consistsOf, graph.parent, null, new SyncIntProcedure() { + QueryCache.runnerObjects(graph, root, consistsOf, graph.parent, null, new SyncIntProcedure() { @Override - public void run(ReadGraphImpl graph) { + public void run(ReadGraphImpl graph) throws DatabaseException { if(isPending()) { add2(graph, result); @@ -120,30 +63,28 @@ final public class NamespaceIndex extends StringQuery " + obj); inc(); - Objects.runner(graph, obj, hasName, graph.parent, null, new IntProcedure() { + QueryCache.runnerObjects(graph, obj, hasName, graph.parent, null, new IntProcedure() { @Override - public void execute(ReadGraphImpl graph, int i) { + public void execute(ReadGraphImpl graph, int i) throws DatabaseException { inc(); - ValueQuery.queryEach(graph, i, NamespaceIndex.this, null, new InternalProcedure() { + QueryCache.runnerValueQuery(graph, i, NamespaceIndex.this, null, new InternalProcedure() { @Override - public void execute(ReadGraphImpl graph, byte[] value) { + public void execute(ReadGraphImpl graph, byte[] value) throws DatabaseException { if(value != null) { @@ -170,7 +111,7 @@ final public class NamespaceIndex extends StringQuery> procedure) { + public Object compute(ReadGraphImpl graph, final InternalProcedure> procedure) throws DatabaseException { + + QueryProcessor processor = graph.processor; // System.err.println("NamespaceIndex " + id); @@ -208,10 +151,10 @@ final public class NamespaceIndex extends StringQuery>() { + QueryCache.runnerNamespaceIndex(graph, parts[0], this, null, new InternalProcedure>() { @Override - public void execute(ReadGraphImpl graph, TObjectIntHashMap index) { + public void execute(ReadGraphImpl graph, TObjectIntHashMap index) throws DatabaseException { if(index != null) { index(graph, processor, index.get(parts[1]), procedure); @@ -224,7 +167,7 @@ final public class NamespaceIndex extends StringQuery> procedure) { + public Object performFromCache(ReadGraphImpl graph, InternalProcedure> procedure) throws DatabaseException { assert(isReady()); - if(handleException(graph, procedure)) return; + if(handleException(graph, procedure)) return (Throwable)statusOrException; - procedure.execute(graph, (TObjectIntHashMap)getResult()); + TObjectIntHashMap result = (TObjectIntHashMap)getResult(); + + procedure.execute(graph, result); + + return result; } @Override - public synchronized void recompute(ReadGraphImpl graph, QueryProcessor provider) { - - final Semaphore s = new Semaphore(0); + public void recompute(ReadGraphImpl graph) throws DatabaseException { - computeForEach(graph, provider, new InternalProcedure>() { + compute(graph, new InternalProcedure>() { @Override public void execute(ReadGraphImpl graph, TObjectIntHashMap result) { - s.release(); } @Override @@ -310,10 +256,6 @@ final public class NamespaceIndex extends StringQuery