]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java
Merge branch 'private/db-threads' into private/threads-testing
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / graph / ReadGraphImpl.java
index f0147e047e001cf6f82d809a269aec65e100ed13..6998ee55e127afa761b7aad2499264bc816588d8 100644 (file)
@@ -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<String, Resource> 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<T> procedure = new AsyncReadProcedure<T>();
-               BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(null, request);
+               BlockingAsyncProcedure<T> 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<T> ap = new BlockingAsyncProcedure<>(procedure, request);
+               BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(this, procedure, request);
                
 //             final ResultCallWrappedSingleQueryProcedure4<T> wrapper = new ResultCallWrappedSingleQueryProcedure4<T>(
 //                             procedure, request);
@@ -2180,7 +2206,7 @@ public class ReadGraphImpl implements ReadGraph {
                ListenerBase listener = getListenerBase(procedure);
                assert(listener == null);
 
-               BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(procedure, request);
+               BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(this, procedure, request);
                
 //             final ResultCallWrappedSingleQueryProcedure4<T> wrapper = new ResultCallWrappedSingleQueryProcedure4<T>(
 //                             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<T>(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.<Object>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.<Object>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<ReadGraph,Resource,Object,T>)graph.syncRequest(new AdaptValue(resource));
+                               return (Function3<ReadGraph,Resource,Object,T>)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());
+       }
     
 }