ICachedCommonService, CachedCommonServiceImpl : moved class to service package
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / service / CdmServiceRequestExecutor.java
index 218d94dd85531cb159d8be325f7ed0b0473df27c..685d51cdb8d40c7a245df807e1009f602a5d453a 100644 (file)
@@ -3,11 +3,19 @@ package eu.etaxonomy.taxeditor.service;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration;
 import org.springframework.remoting.support.RemoteInvocation;
 import org.springframework.remoting.support.RemoteInvocationResult;
+import org.springframework.stereotype.Component;
 
-public abstract class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor {
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+
+@Component
+public class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor {
+
+    @Autowired
+    private ICdmEntitySessionManager cdmEntitySessionManager;
 
        private RemoteInvocation currentRemoteInvocation;
 
@@ -24,16 +32,27 @@ public abstract class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvo
                                        java.lang.ClassNotFoundException {
                RemoteInvocationResult rir = fromCache(currentRemoteInvocation);
 
+               // if rir is not null at this point we assume that the
+               // the object has already been loaded in the cache and
+               // does not need to be reloaded
+
                if(rir == null) {
                        rir = super.doExecuteRequest(config, baos);
+                       if(rir.getValue() != null && !rir.hasException()) {
+                           rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue()));
+                       }
                        cache(currentRemoteInvocation, rir);
                }
-
                currentRemoteInvocation = null;
+
                return rir;
        }
 
-       public abstract void cache(RemoteInvocation ri, RemoteInvocationResult rir);
+       public void cache(RemoteInvocation ri, RemoteInvocationResult rir) {
+
+       }
 
-       public abstract RemoteInvocationResult fromCache(RemoteInvocation ri);
+       public RemoteInvocationResult fromCache(RemoteInvocation ri) {
+           return null;
+       }
 }