import org.simantics.utils.Development;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.datastructures.collections.CollectionUtils;
+import org.simantics.utils.threads.logger.ITask;
+import org.simantics.utils.threads.logger.ThreadLogger;
import org.slf4j.LoggerFactory;
import gnu.trove.map.hash.TObjectIntHashMap;
@Override
public <T> T syncRequest(final Read<T> request) throws DatabaseException {
assert (request != null);
- return (T)QueryCache.runnerReadEntry(this, request, parent, null, null, true);
+
+ ITask task = ThreadLogger.task(request);
+ T result = (T)QueryCache.runnerReadEntry(this, request, parent, null, null, true);
+ task.finish();
+ return result;
+
}
@Override
assert (request != null);
+ ITask task = ThreadLogger.task(request);
ListenerBase listener = procedure != null ? getListenerBase(procedure) : null;
-
- return QueryCache.resultReadEntry(this, request, parent, listener, procedure);
+ T result = QueryCache.resultReadEntry(this, request, parent, listener, procedure);
+ task.finish();
+ return result;
}
assert (request != null);
+ ITask task = ThreadLogger.task(request);
ListenerBase listener = getListenerBase(procedure);
-
-// BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(this, procedure, request);
- return (T)QueryCache.runnerAsyncReadEntry(this, request, parent, listener, procedure, true);
-// return ap.get();
+ T result = (T)QueryCache.runnerAsyncReadEntry(this, request, parent, listener, procedure, true);
+ task.finish();
+ return result;
}
assert (request != null);
assert (procedure != null);
- processor.schedule(new SessionTask(this) {
+ processor.scheduleNow(new SessionTask(this) {
@Override
public void run0(int thread) {
assert (request != null);
assert (procedure != null);
- processor.schedule(new SessionTask(this) {
+ ITask task = ThreadLogger.task(request);
+
+ processor.scheduleNow(new SessionTask(this) {
@Override
public void run0(int thread) {
try {
final ListenerBase listener = getListenerBase(procedure);
- QueryCache.runnerAsyncReadEntry(ReadGraphImpl.this, request, parent, listener, procedure, false);
+ QueryCache.runnerAsyncReadEntry(ReadGraphImpl.this, request, parent, listener, new AsyncProcedure<T>() {
+
+ @Override
+ public void execute(AsyncReadGraph graph, T result) {
+ task.finish();
+ procedure.execute(graph, result);
+ }
+
+ @Override
+ public void exception(AsyncReadGraph graph, Throwable throwable) {
+ task.finish();
+ procedure.exception(graph, throwable);
+ }
+
+ }, false);
} catch (DatabaseException e) {
Logger.defaultLogError(e);
}
public boolean performPending() {
return processor.performPending(this);
}
-
+
public Set<ReadGraphImpl> ancestorSet() {
HashSet<ReadGraphImpl> result = new HashSet<>();
ReadGraphImpl g = this;
}
return result;
}
+
+ public int getLevel() {
+ return getLevelStatic(this);
+ }
+
+ private static int getLevelStatic(ReadGraphImpl impl) {
+ if(impl == null) return 0;
+ else return 1 + getLevelStatic(impl.parentGraph);
+ }
+
+ public ReadGraphImpl getTopLevelGraph() {
+ return getTopLevelGraphStatic(this);
+ }
+
+ private static ReadGraphImpl getTopLevelGraphStatic(ReadGraphImpl impl) {
+ if(impl.parentGraph == null) return impl;
+ else return getTopLevelGraphStatic(impl.parentGraph);
+ }
}