X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fgraph%2FReadGraphImpl.java;h=6998ee55e127afa761b7aad2499264bc816588d8;hb=d0e8f57df83c175bac2098412ee71646fb9ff0e9;hp=f0147e047e001cf6f82d809a269aec65e100ed13;hpb=8744cc98e176b7f74f166fde5df76c84089a63b9;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java index f0147e047..6998ee55e 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java @@ -26,6 +26,7 @@ import java.util.IdentityHashMap; import java.util.Iterator; import java.util.List; import java.util.ListIterator; +import java.util.Map; import java.util.Set; import java.util.function.Consumer; @@ -45,7 +46,6 @@ import org.simantics.databoard.util.binary.BinaryFile; import org.simantics.databoard.util.binary.RandomAccessBinary; import org.simantics.db.AsyncReadGraph; import org.simantics.db.DevelopmentKeys; -import org.simantics.db.ExternalValue; import org.simantics.db.ExternalValueSupport; import org.simantics.db.ReadGraph; import org.simantics.db.RelationContext; @@ -350,6 +350,32 @@ public class ReadGraphImpl implements ReadGraph { } } + + @Override + public Map getChildren(Resource resource) throws ValidationException, ServiceException { + + assert (resource != null); + + try { + + int rId = processor.querySupport.getId(resource); + return QueryCache.resultChildMap(this, rId, parent, null); + + } catch (ValidationException e) { + + throw new ValidationException(e); + + } catch (ServiceException e) { + + throw new ServiceException(e); + + } catch (DatabaseException e) { + + throw new ServiceException(INTERNAL_ERROR_STRING, e); + + } + + } final public Resource getRootLibrary() { return processor.getRootLibraryResource(); @@ -2065,7 +2091,7 @@ public class ReadGraphImpl implements ReadGraph { assert (request != null); // AsyncReadProcedure procedure = new AsyncReadProcedure(); - BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(null, request); + BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(this, null, request); syncRequest(request, ap); return ap.get(); // procedure.checkAndThrow(); @@ -2101,7 +2127,7 @@ public class ReadGraphImpl implements ReadGraph { ListenerBase listener = getListenerBase(procedure); - BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(procedure, request); + BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(this, procedure, request); // final ResultCallWrappedSingleQueryProcedure4 wrapper = new ResultCallWrappedSingleQueryProcedure4( // procedure, request); @@ -2180,7 +2206,7 @@ public class ReadGraphImpl implements ReadGraph { ListenerBase listener = getListenerBase(procedure); assert(listener == null); - BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(procedure, request); + BlockingAsyncProcedure ap = new BlockingAsyncProcedure<>(this, procedure, request); // final ResultCallWrappedSingleQueryProcedure4 wrapper = new ResultCallWrappedSingleQueryProcedure4( // procedure, request); @@ -5425,7 +5451,7 @@ public class ReadGraphImpl implements ReadGraph { assert (request != null); assert (procedure != null); - processor.schedule(Integer.MIN_VALUE, new SessionTask(request, processor.THREAD_MASK+1, -1) { + processor.schedule(new SessionTask(false) { @Override public void run(int thread) { @@ -5439,50 +5465,6 @@ public class ReadGraphImpl implements ReadGraph { }); - -// quer -// -// final ListenerBase listener = getListenerBase(procedure); -// -// if (parent != null || listener != null) { -// -// try { -// QueryCache.runnerReadEntry(this, request, parent, listener, procedure); -// //processor.query(this, request, parent, procedure,listener); -// } catch (DatabaseException e) { -// Logger.defaultLogError(e); -// // This throwable has already been transferred to procedure at this point - do nothing about it -// // -// } -// -// } else { -// -//// final ReadGraphImpl newGraph = newSync(); -// -// try { -// -// T result = request.perform(this); -// -// try { -// procedure.execute(this, result); -// } catch (Throwable t) { -// Logger.defaultLogError(t); -// } -// -// } catch (Throwable t) { -// -// try { -// procedure.exception(this, t); -// } catch (Throwable t2) { -// Logger.defaultLogError(t2); -// } -// -// } finally { -// -// } -// -// } - } public static ReadGraphImpl createAsync(QueryProcessor support) { @@ -5553,9 +5535,7 @@ public class ReadGraphImpl implements ReadGraph { assert (request != null); assert (procedure != null); - //final ListenerBase listener = getListenerBase(procedure); - - processor.schedule(Integer.MIN_VALUE, new SessionTask(request, processor.THREAD_MASK+1, -1) { + processor.schedule(new SessionTask(false) { @Override public void run(int thread) { @@ -5569,40 +5549,6 @@ public class ReadGraphImpl implements ReadGraph { }); - - - -// if (parent != null || listener != null) { -// -// try { -// QueryCache.runnerAsyncReadEntry(this, request, parent, listener, procedure); -// //processor.query(this, request, parent, procedure, listener); -// } catch (DatabaseException e) { -// Logger.defaultLogError(e); -// } -// -// } else { -// -// try { -// -// request.perform(this, new CallWrappedSingleQueryProcedure4(procedure, request)); -// -// } catch (Throwable t) { -// -// if (t instanceof DatabaseException) -// procedure.exception(this, t); -// else -// procedure -// .exception( -// this, -// new DatabaseException( -// "Unexpected exception in ReadGraph.asyncRequest(SingleAsyncRead, SingleProcedure)", -// t)); -// -// } -// -// } - } @Override @@ -6511,9 +6457,6 @@ public class ReadGraphImpl implements ReadGraph { return getValue(r); } } - else if(types.contains(L0.Function)) { - return Functions.exec(this, r, this, r, context); - } else if(types.contains(L0.ExternalValue)) { return (T)syncRequest(new AdaptValue(r), TransientCacheListener.instance()); } @@ -6544,14 +6487,6 @@ public class ReadGraphImpl implements ReadGraph { return getVariantValue(r); } } - else if(types.contains(L0.Function)) { - Object value = Functions.exec(this, r, this, r, context); - try { - return new Variant(Bindings.OBJECT.getContentBinding(value), value); - } catch ( org.simantics.databoard.binding.error.BindingException e ) { - throw new BindingException( "No binding found for class " + value.getClass().getName(), e ); - } - } else if(types.contains(L0.ExternalValue)) { Object value = syncRequest(new AdaptValue(r), TransientCacheListener.instance()); try { @@ -6605,8 +6540,7 @@ public class ReadGraphImpl implements ReadGraph { for(Resource converter : graph.getObjects(resource, L0.ConvertsToValueWith)) { try { if(L0.Functions_functionApplication.equals(converter)) { - return AdaptValue.functionApplication; - //return (Function3)graph.syncRequest(new AdaptValue(resource)); + return (Function3)graph.syncRequest(new AdaptValue(resource)); } else { return graph.getValue2(converter, resource); } @@ -6662,28 +6596,11 @@ public class ReadGraphImpl implements ReadGraph { } else { return getValue(r, binding); } - } else if(types.contains(L0.Function)) { - Object value = Functions.exec(this, r, this, r, context); - if(binding.isInstance(value)) return (T)value; - try { - Binding srcBinding = Bindings.OBJECT.getContentBinding(value); - return (T)Bindings.adapt(value, srcBinding, binding); - } catch(RuntimeException e) { - DatabaseException dte = findPossibleRootException(e); - if(dte != null) throw dte; - else throw new DatabaseException(e); - } catch (AdaptException e) { - throw new DatabaseException(e); - } catch (org.simantics.databoard.binding.error.BindingException e) { - throw new DatabaseException(e); - } } else if(types.contains(L0.ExternalValue)) { try { - ExternalValue ev = adapt(r, ExternalValue.class); - return ev.getValue(this, r); - //return (T)ReflectionUtils.getValue(getURI(r)).getValue(); -// } catch(ValueNotFoundException e) { -// throw new DatabaseException(e); + return (T)ReflectionUtils.getValue(getURI(r)).getValue(); + } catch(ValueNotFoundException e) { + throw new DatabaseException(e); } catch(ClassCastException e) { throw new DatabaseException(e); } @@ -6874,5 +6791,10 @@ public class ReadGraphImpl implements ReadGraph { public Object getModificationCounter() { return processor.getSession().getModificationCounter(); } + + @Override + public boolean performPending() { + return processor.performPending(processor.thread.get()); + } }