]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdaptionService2.java
Multiple reader thread support for db client
[simantics/platform.git] / bundles / org.simantics.db.services / src / org / simantics / db / services / adaption / AdaptionService2.java
index 47a14ddbcbccc7424bec9fe1ea059c588dffc24d..879eec03410e3737d4b2e8561e8110d184dca843 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * Copyright (c) 2007, 2018 Association for Decentralized Information Management
  * in Industry THTH ry.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  *******************************************************************************/
 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.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;
@@ -37,6 +32,10 @@ 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 {
 
     THashMap<Pair<Class<?>,Class<?>>, AdapterDeclaration<?>> adapters =
@@ -366,24 +365,9 @@ public class AdaptionService2 implements AdaptionService {
 
                 final Adapter<T,C> adapter = (Adapter<T, C>)findAdapter(resource, g);
                 if(adapter == null) return null;
-                else return g.syncRequest(new AsyncRead<T>() {
-
-                    @Override
-                    public void perform(AsyncReadGraph graph, AsyncProcedure<T> procedure) {
-//                      System.out.println("adapter=" + adapter);
-                        adapter.adapt(graph, resource, context, procedure);
-                    }
-
-                    @Override
-                           public int threadHash() {
-                               return hashCode();
-                           }
-
-                    @Override
-                    public int getFlags() {
-                        return 0;
-                    }
-
+                else return g.syncRequest((AsyncRead<T>)(graph, procedure) -> {
+                    //System.out.println("adapter=" + adapter);
+                    adapter.adapt(graph, resource, context, procedure);
                 });
 
             }
@@ -583,11 +567,9 @@ public class AdaptionService2 implements AdaptionService {
     public <T, C> T adapt(ReadGraph g, Resource r, C context, Class<C> contextClass, Class<T> targetClass, boolean possible) throws DatabaseException {
 
        Adapter<T,C> adapter = getAdapter(g, r, context, contextClass, targetClass, possible);
+       if(adapter == null) return null;
        
-               SyncReadProcedure<T> procedure = new SyncReadProcedure<T>();
-       adapter.adapt(g, r, context, procedure);
-               procedure.checkAndThrow();
-               return procedure.result;
+       return g.syncRequest((AsyncRead<T>)(graph, procedure) -> adapter.adapt(graph, r, context, procedure));
        
     }
     
@@ -865,23 +847,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));
                     }
                 }