]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdaptionService2.java
Working towards multiple readers.
[simantics/platform.git] / bundles / org.simantics.db.services / src / org / simantics / db / services / adaption / AdaptionService2.java
index 859481727bfe9f701f53cbe462dc5ecb6219b83b..ccc64fe9c487599e6c50fa8e89a32f773b412734 100644 (file)
  *******************************************************************************/
 package org.simantics.db.services.adaption;
 
-import gnu.trove.map.hash.THashMap;
-import gnu.trove.procedure.TObjectObjectProcedure;
-import gnu.trove.set.hash.THashSet;
-
 import org.simantics.db.AsyncReadGraph;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.adaption.Adapter;
 import org.simantics.db.adaption.AdaptionService;
-import org.simantics.db.common.procedure.BlockingAsyncProcedure;
 import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
-import org.simantics.db.common.procedure.single.SyncReadProcedure;
 import org.simantics.db.common.request.BinaryRead;
 import org.simantics.db.common.request.ReadRequest;
 import org.simantics.db.common.request.TernaryRead;
+import org.simantics.db.common.request.UniqueAsyncRead;
 import org.simantics.db.common.uri.ResourceToURI;
 import org.simantics.db.common.utils.NameUtils;
 import org.simantics.db.exception.AdaptionException;
@@ -38,9 +33,11 @@ import org.simantics.db.request.Read;
 import org.simantics.layer0.Layer0;
 import org.simantics.utils.datastructures.Pair;
 
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.procedure.TObjectObjectProcedure;
+import gnu.trove.set.hash.THashSet;
+
 public class AdaptionService2 implements AdaptionService {
-       
-       int foobaz;
 
     THashMap<Pair<Class<?>,Class<?>>, AdapterDeclaration<?>> adapters =
         new THashMap<Pair<Class<?>,Class<?>>, AdapterDeclaration<?>>();
@@ -588,14 +585,14 @@ public class AdaptionService2 implements AdaptionService {
        Adapter<T,C> adapter = getAdapter(g, r, context, contextClass, targetClass, possible);
        if(adapter == null) return null;
        
-       BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<T>(g, null, adapter);
-       
-//             SyncReadProcedure<T> procedure = new SyncReadProcedure<T>();
-       adapter.adapt(g, r, context, ap);
-       
-       return ap.get();
-//             procedure.checkAndThrow();
-//             return procedure.result;
+       return g.syncRequest(new UniqueAsyncRead<T>() {
+
+                       @Override
+                       public void perform(AsyncReadGraph graph, AsyncProcedure<T> procedure) {
+                               adapter.adapt(graph, r, context, procedure);
+                       }
+                       
+               });
        
     }
     
@@ -873,23 +870,23 @@ public class AdaptionService2 implements AdaptionService {
 
                 if(decl == null) {
                     if(possible) {
-                        procedure.execute(graph, null);
+                        procedure.execute(g, null);
                     } else {
-                        procedure.exception(graph, new AdaptionException("There are no adapters declared or defined for class " + clazz + "."));
+                        procedure.exception(g, new AdaptionException("There are no adapters declared or defined for class " + clazz + "."));
                     }
                 } else {
                     try {
-                        procedure.execute(graph, decl.adaptNew(graph, r, possible));
+                        procedure.execute(g, decl.adaptNew(graph, r, possible));
                     } catch (AdaptionException e) {
                         if(possible) {
-                            procedure.execute(graph, null);
+                            procedure.execute(g, null);
                         } else {
-                            procedure.exception(graph, e);
+                            procedure.exception(g, e);
                         }
                     } catch (ValidationException e) {
-                        procedure.exception(graph, e);
+                        procedure.exception(g, e);
                     } catch (DatabaseException e2) {
-                        procedure.exception(graph, new ServiceException(e2));
+                        procedure.exception(g, new ServiceException(e2));
                     }
                 }