]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java
Remove moved projects
[gpl/argeo-slc.git] / org.argeo.slc.detached / src / main / java / org / argeo / slc / detached / DetachedExecutionServerImpl.java
diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java
deleted file mode 100644 (file)
index 35b9d63..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.argeo.slc.detached;
-
-import java.util.List;
-import java.util.Vector;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.slc.detached.admin.CloseSession;
-import org.argeo.slc.detached.admin.OpenSession;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.springframework.context.ApplicationContext;
-import org.springframework.osgi.context.BundleContextAware;
-
-public class DetachedExecutionServerImpl implements DetachedExecutionServer,
-               BundleContextAware {
-       private final static Log log = LogFactory
-                       .getLog(DetachedExecutionServerImpl.class);
-
-       private final DetachedContextImpl detachedContext;
-       private final List sessions;
-
-       private int skipCount = 1;// start skipCount at 1 since the first step is
-       // always an open session
-
-       private BundleContext bundleContext;
-
-       public DetachedExecutionServerImpl() {
-               detachedContext = new DetachedContextImpl();
-               sessions = new Vector();
-       }
-
-       public synchronized DetachedAnswer executeRequest(DetachedRequest request) {
-               DetachedAnswer answer = null;
-               try {
-                       // Find action
-                       ServiceReference[] refs = bundleContext.getAllServiceReferences(
-                                       ApplicationContext.class.getName(), null);
-                       Object obj = null;
-                       for (int i = 0; i < refs.length; i++) {
-                               ApplicationContext appContext = (ApplicationContext) bundleContext
-                                               .getService(refs[i]);
-                               try {
-                                       obj = appContext.getBean(request.getRef());
-                               } catch (Exception e) {
-                                       // silent
-                                       if (log.isTraceEnabled())
-                                               log.trace("Could not find ref " + request.getRef(), e);
-                               }
-                               if (obj != null) {
-                                       break;
-                               }
-                       }
-
-                       if (obj == null)
-                               throw new DetachedException("Could not find action with ref "
-                                               + request.getRef());
-
-                       // Execute actions
-                       if (obj instanceof DetachedStep) {
-                               answer = processStep((DetachedStep) obj, request);
-
-                       } else if (obj instanceof DetachedAdminCommand) {
-                               answer = processAdminCommand((DetachedAdminCommand) obj,
-                                               request);
-                       }
-
-                       if (answer == null) {
-                               throw new DetachedException("Unknown action type "
-                                               + obj.getClass() + " for action with ref "
-                                               + request.getRef());
-                       }
-               } catch (Exception e) {
-                       answer = new DetachedAnswer(request);
-                       answer.setStatus(DetachedAnswer.ERROR);
-                       answer.setLog(e.getMessage());
-               }
-               getCurrentSession().getRequests().add(request);
-               getCurrentSession().getAnswers().add(answer);
-               if (log.isDebugEnabled())
-                       log.debug("Processed '" + request.getRef() + "' (status="
-                                       + answer.getStatusAsString() + ", path="
-                                       + request.getPath() + ")");
-               return answer;
-       }
-
-       protected DetachedAnswer processStep(DetachedStep obj,
-                       DetachedRequest request) {
-               DetachedAnswer answer;
-               if (getCurrentSession() == null)
-                       throw new DetachedException("No open session.");
-
-               StringBuffer skippedLog = new StringBuffer();
-               boolean execute = true;
-               if (getPreviousSession() != null && !getPreviousSession().isClosed()) {
-                       if (getCurrentSession().getDoItAgainPolicy().equals(
-                                       DetachedSession.SKIP_UNTIL_ERROR)) {
-                               // Skip execution of already successful steps
-                               if (getPreviousSession().getAnswers().size() > skipCount) {
-                                       DetachedAnswer previousAnswer = (DetachedAnswer) getPreviousSession()
-                                                       .getAnswers().get(skipCount);
-                                       DetachedRequest previousRequest = (DetachedRequest) getPreviousSession()
-                                                       .getRequests().get(skipCount);
-                                       // Check paths
-                                       if (!previousRequest.getPath().equals(request.getPath())) {
-                                               String msg = "New request is not consistent with previous path. previousPath="
-                                                               + previousRequest.getPath()
-                                                               + ", newPath="
-                                                               + request.getPath() + "\n";
-                                               skippedLog.append(msg);
-                                               log.warn(msg);
-                                       }
-
-                                       if (previousAnswer.getStatus() != DetachedAnswer.ERROR) {
-                                               execute = false;
-                                               String msg = "Skipped path " + request.getPath()
-                                                               + " (skipCount=" + skipCount + ")";
-                                               skippedLog.append(msg);
-                                               log.info(msg);
-                                               skipCount++;
-                                       } else {
-                                               log
-                                                               .info("Path "
-                                                                               + request.getPath()
-                                                                               + " was previously in error, executing it again."
-                                                                               + " (skipCount=" + skipCount
-                                                                               + "). Reset skip count to 1");
-                                               skipCount = 1;
-                                       }
-                               } else {
-                                       // went further as skip count, doing nothing.
-                               }
-                       }
-               }
-
-               if (execute) {
-                       DetachedStep step = (DetachedStep) obj;
-                       answer = step.execute(detachedContext, request);
-               } else {
-                       answer = new DetachedAnswer(request);
-                       answer.setStatus(DetachedAnswer.SKIPPED);
-                       answer.setLog(skippedLog.toString());
-               }
-               return answer;
-       }
-
-       protected DetachedAnswer processAdminCommand(DetachedAdminCommand obj,
-                       DetachedRequest request) {
-               DetachedAnswer answer;
-               if (obj instanceof OpenSession) {
-                       if (getCurrentSession() != null)
-                               throw new DetachedException(
-                                               "There is already an open session #"
-                                                               + getCurrentSession().getUuid());
-                       sessions.add(((OpenSession) obj).execute(request, bundleContext));
-                       answer = new DetachedAnswer(request, "Session #"
-                                       + getCurrentSession().getUuid() + " open.");
-               } else if (obj instanceof CloseSession) {
-                       if (getCurrentSession() == null)
-                               throw new DetachedException("There is no open session to close");
-                       answer = new DetachedAnswer(request, "Session #"
-                                       + getCurrentSession().getUuid() + " closed.");
-                       answer.setStatus(DetachedAnswer.CLOSED_SESSION);
-               } else {
-                       answer = null;
-               }
-               return answer;
-       }
-
-       protected final DetachedSession getCurrentSession() {
-               if (sessions.size() == 0) {
-                       return null;
-               } else {
-                       DetachedSession session = (DetachedSession) sessions.get(sessions
-                                       .size() - 1);
-                       List answers = session.getAnswers();
-                       if (answers.size() > 0) {
-                               DetachedAnswer lastAnswer = (DetachedAnswer) answers
-                                               .get(answers.size() - 1);
-                               if (lastAnswer.getStatus() == DetachedAnswer.ERROR
-                                               || lastAnswer.getStatus() == DetachedAnswer.CLOSED_SESSION)
-                                       return null;
-                       }
-                       return session;
-               }
-       }
-
-       protected final DetachedSession getPreviousSession() {
-               if (sessions.size() < 2)
-                       return null;
-               else
-                       return (DetachedSession) sessions.get(sessions.size() - 2);
-       }
-
-       public void setBundleContext(BundleContext bundleContext) {
-               this.bundleContext = bundleContext;
-       }
-
-}