]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/ExternalReadEntry.java
Generate parts of db client query code
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / ExternalReadEntry.java
index 31fe0103b646a23ed634c59a6616176406ba1d3d..7fb8598b7c36087f074ea71425b8c4c2434fc0d1 100644 (file)
@@ -14,12 +14,14 @@ package org.simantics.db.impl.query;
 import java.util.ArrayList;
 import java.util.LinkedList;
 
+import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.impl.graph.ReadGraphImpl;
+import org.simantics.db.procedure.AsyncProcedure;
 import org.simantics.db.procedure.Procedure;
 import org.simantics.db.request.ExternalRead;
 import org.simantics.db.request.RequestFlags;
 
-final public class ExternalReadEntry<T> extends CacheEntryBase {
+final public class ExternalReadEntry<T> extends CacheEntryBase<AsyncProcedure<T>> {
 
     final LinkedList<T> items = new LinkedList<T>();
 
@@ -93,37 +95,27 @@ final public class ExternalReadEntry<T> extends CacheEntryBase {
         return new Query() {
 
                        @Override
-                       public void recompute(ReadGraphImpl graph, Object provider, CacheEntry entry) {
-
-                           final QueryProcessor qp = (QueryProcessor)provider;
-                           synchronized(items) {
-
-                               if(entry.isExcepted()) {
-                                       
-                                       // Exception persists
-                                       
-                               } else {
-                               
-                                       // Update
-                                       if(!items.isEmpty()) {
-                                               setResult(items.removeFirst());
-                                       }
-                                       // Reschedule
-                                           if(!items.isEmpty()) {
-                                               qp.updatePrimitive(request);
-                                           }
-                                           
-                                           setReady();
-                                           
-                               }
-                               
-                           }
+                       public void recompute(ReadGraphImpl graph) {
+
+                               synchronized(items) {
+
+
+                                       // Update
+                                       if(!items.isEmpty()) {
+                                               setResult(items.removeFirst());
+                                       }
+                                       // Reschedule
+                                       if(!items.isEmpty()) {
+                                               graph.processor.updatePrimitive(request);
+                                       }
+
+                               }
                                
                        }
 
                        @Override
                        public void removeEntry(QueryProcessor processor) {
-                               processor.cache.externalReadMap.remove(request);
+                               processor.cache.remove(ExternalReadEntry.this);
                        }
 
                        @Override
@@ -141,38 +133,29 @@ final public class ExternalReadEntry<T> extends CacheEntryBase {
         
     }
 
-       public Object performFromCache(Object procedure) {
-               
-        Procedure<T> proc = (Procedure<T>)procedure;
+       @Override
+       public String toString() {
+               if(request == null) return "DISCARDED ExternalRead " + System.identityHashCode(this);
+               else return request.toString() + " " + + System.identityHashCode(this);
+       }
+
+    @Override
+    public Object performFromCache(ReadGraphImpl graph, AsyncProcedure<T> procedure) {
+       
+        AsyncProcedure<T> proc = (AsyncProcedure<T>)procedure;
 
            if(isExcepted()) {
             
-            proc.exception((Throwable)getResult());
+            proc.exception(graph, (Throwable)getResult());
             
         } else {
             
-            proc.execute((T)getResult());
+            proc.execute(graph, (T)getResult());
 
         }
            
            return getResult();
-               
-       }
-
-       @Override
-       public String toString() {
-               if(request == null) return "DISCARDED ExternalRead " + System.identityHashCode(this);
-               else return request.toString() + " " + + System.identityHashCode(this);
-       }
-
-    @Override
-    public Object performFromCache(ReadGraphImpl graph, Object provider, Object procedure) {
-        return performFromCache(procedure);
-    }
-    
-    @Override
-    public void setReady() {
-       super.setReady();
+       
     }
     
     @Override
@@ -180,4 +163,9 @@ final public class ExternalReadEntry<T> extends CacheEntryBase {
        // Do nothing - the state is already set and cannot be recomputed on demand
     }
 
+       @Override
+       public Object compute(ReadGraphImpl graph, AsyncProcedure<T> procedure) throws DatabaseException {
+       return graph.processor.cache.performQuery(graph, request, this, procedure);
+       }
+
 }