]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java
Fix bug 28 (https://www.argeo.org/bugzilla/show_bug.cgi?id=28)
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / execution / JcrProcessThread.java
index 1ae15d4197f8451e6027aa20fc5d54441e34b476..8755829e7bba6e213b896c1d142ca82d65c22c45 100644 (file)
@@ -39,162 +39,55 @@ public class JcrProcessThread extends ProcessThread implements SlcNames {
                super(processesThreadGroup, executionModulesManager, process);
        }
 
+       /** Overridden in order to set progress status on realized flow nodes. */
        @Override
        protected void process() throws InterruptedException {
                Session session = null;
-               try {
-                       session = getJcrExecutionProcess().getRepository().login();
+               if (getProcess() instanceof JcrExecutionProcess)
+                       try {
+                               session = ((JcrExecutionProcess) getProcess()).getRepository()
+                                               .login();
 
-                       List<RealizedFlow> realizedFlows = getProcess().getRealizedFlows();
-                       for (RealizedFlow realizedFlow : realizedFlows) {
-                               Node realizedFlowNode = session
-                                               .getNode(((JcrRealizedFlow) realizedFlow).getPath());
+                               List<RealizedFlow> realizedFlows = getProcess()
+                                               .getRealizedFlows();
+                               for (RealizedFlow realizedFlow : realizedFlows) {
+                                       Node realizedFlowNode = session
+                                                       .getNode(((JcrRealizedFlow) realizedFlow).getPath());
+                                       setFlowStatus(realizedFlowNode, ExecutionProcess.RUNNING);
 
-                               // set status on realized flow
-                               realizedFlowNode.setProperty(SLC_STATUS,
-                                               ExecutionProcess.RUNNING);
-                               realizedFlowNode.getSession().save();
-                               try {
-                                       //
-                                       // EXECUTE THE FLOW
-                                       //
-                                       execute(realizedFlow, true);
+                                       try {
+                                               //
+                                               // EXECUTE THE FLOW
+                                               //
+                                               execute(realizedFlow, true);
 
-                                       // set status on realized flow
-                                       realizedFlowNode.setProperty(SLC_STATUS,
-                                                       ExecutionProcess.COMPLETED);
-                                       realizedFlowNode.getSession().save();
-                               } catch (RepositoryException e) {
-                                       throw e;
-                               } catch (InterruptedException e) {
-                                       // set status on realized flow
-                                       realizedFlowNode.setProperty(SLC_STATUS,
-                                                       ExecutionProcess.KILLED);
-                                       realizedFlowNode.getSession().save();
-                                       throw e;
-                               } catch (RuntimeException e) {
-                                       // set status on realized flow
-                                       realizedFlowNode.setProperty(SLC_STATUS,
-                                                       ExecutionProcess.ERROR);
-                                       realizedFlowNode.getSession().save();
-                                       throw e;
+                                               setFlowStatus(realizedFlowNode,
+                                                               ExecutionProcess.COMPLETED);
+                                       } catch (RepositoryException e) {
+                                               throw e;
+                                       } catch (InterruptedException e) {
+                                               setFlowStatus(realizedFlowNode, ExecutionProcess.KILLED);
+                                               throw e;
+                                       } catch (RuntimeException e) {
+                                               setFlowStatus(realizedFlowNode, ExecutionProcess.ERROR);
+                                               throw e;
+                                       }
                                }
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot process "
+                                               + getJcrExecutionProcess().getNodePath(), e);
+                       } finally {
+                               JcrUtils.logoutQuietly(session);
                        }
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot process "
-                                       + getJcrExecutionProcess().getNodePath(), e);
-               } finally {
-                       JcrUtils.logoutQuietly(session);
-               }
+               else
+                       super.process();
        }
 
-       //
-       // /** CONFIGURE THE REALIZED FLOWS */
-       // PROTECTED VOID EXECUTE(NODE REALIZEDFLOWNODE) THROWS REPOSITORYEXCEPTION,
-       // INTERRUPTEDEXCEPTION {
-       // IF (REALIZEDFLOWNODE.HASNODE(SLC_ADDRESS)) {
-       // STRING FLOWPATH = REALIZEDFLOWNODE.GETNODE(SLC_ADDRESS)
-       // .GETPROPERTY(PROPERTY.JCR_PATH).GETSTRING();
-       // // TODO: CONVERT TO LOCAL PATH IF REMOTE
-       //
-       // NODE FLOWNODE = REALIZEDFLOWNODE.GETSESSION().GETNODE(FLOWPATH);
-       // STRING FLOWNAME = FLOWNODE.GETPROPERTY(SLC_NAME).GETSTRING();
-       //
-       // NODE EXECUTIONMODULENODE = FLOWNODE.GETSESSION().GETNODE(
-       // SLCJCRUTILS.MODULEPATH(FLOWPATH));
-       // STRING EXECUTIONMODULENAME = EXECUTIONMODULENODE.GETPROPERTY(
-       // SLC_NAME).GETSTRING();
-       // STRING EXECUTIONMODULEVERSION = EXECUTIONMODULENODE.GETPROPERTY(
-       // SLC_VERSION).GETSTRING();
-       //
-       // REALIZEDFLOW REALIZEDFLOW = NEW REALIZEDFLOW();
-       // REALIZEDFLOW.SETMODULENAME(EXECUTIONMODULENAME);
-       // REALIZEDFLOW.SETMODULEVERSION(EXECUTIONMODULEVERSION);
-       //
-       // // RETRIEVE EXECUTION SPEC
-       // DEFAULTEXECUTIONSPEC EXECUTIONSPEC = NEW DEFAULTEXECUTIONSPEC();
-       // MAP<STRING, EXECUTIONSPECATTRIBUTE> ATTRS =
-       // READEXECUTIONSPECATTRIBUTES(REALIZEDFLOWNODE);
-       // EXECUTIONSPEC.SETATTRIBUTES(ATTRS);
-       //
-       // // SET EXECUTION SPEC NAME
-       // IF (FLOWNODE.HASPROPERTY(SLCNAMES.SLC_SPEC)) {
-       // NODE EXECUTIONSPECNODE = FLOWNODE.GETPROPERTY(SLC_SPEC)
-       // .GETNODE();
-       // EXECUTIONSPEC.SETBEANNAME(EXECUTIONSPECNODE.GETPROPERTY(
-       // SLC_NAME).GETSTRING());
-       // }
-       //
-       // // EXPLICITLY RETRIEVE VALUES
-       // MAP<STRING, OBJECT> VALUES = NEW HASHMAP<STRING, OBJECT>();
-       // FOR (STRING ATTRNAME : ATTRS.KEYSET()) {
-       // EXECUTIONSPECATTRIBUTE ATTR = ATTRS.GET(ATTRNAME);
-       // OBJECT VALUE = ATTR.GETVALUE();
-       // VALUES.PUT(ATTRNAME, VALUE);
-       // }
-       //
-       // EXECUTIONFLOWDESCRIPTOR EFD = NEW EXECUTIONFLOWDESCRIPTOR(FLOWNAME,
-       // VALUES, EXECUTIONSPEC);
-       // REALIZEDFLOW.SETFLOWDESCRIPTOR(EFD);
-       //
-       // //
-       // // EXECUTE THE FLOW
-       // //
-       // EXECUTE(REALIZEDFLOW, TRUE);
-       // //
-       // }
-       // }
-       //
-       // PROTECTED MAP<STRING, EXECUTIONSPECATTRIBUTE>
-       // READEXECUTIONSPECATTRIBUTES(
-       // NODE NODE) {
-       // TRY {
-       // MAP<STRING, EXECUTIONSPECATTRIBUTE> ATTRS = NEW HASHMAP<STRING,
-       // EXECUTIONSPECATTRIBUTE>();
-       // FOR (NODEITERATOR NIT = NODE.GETNODES(); NIT.HASNEXT();) {
-       // NODE SPECATTRNODE = NIT.NEXTNODE();
-       // IF (SPECATTRNODE
-       // .ISNODETYPE(SLCTYPES.SLC_PRIMITIVE_SPEC_ATTRIBUTE)) {
-       // STRING TYPE = SPECATTRNODE.GETPROPERTY(SLC_TYPE)
-       // .GETSTRING();
-       // OBJECT VALUE = NULL;
-       // IF (SPECATTRNODE.HASPROPERTY(SLC_VALUE)) {
-       // STRING VALUESTR = SPECATTRNODE.GETPROPERTY(SLC_VALUE)
-       // .GETSTRING();
-       // VALUE = PRIMITIVEUTILS.CONVERT(TYPE, VALUESTR);
-       // }
-       // PRIMITIVESPECATTRIBUTE SPECATTR = NEW PRIMITIVESPECATTRIBUTE(
-       // TYPE, VALUE);
-       // ATTRS.PUT(SPECATTRNODE.GETNAME(), SPECATTR);
-       // } ELSE IF (SPECATTRNODE
-       // .ISNODETYPE(SLCTYPES.SLC_REF_SPEC_ATTRIBUTE)) {
-       // IF (!SPECATTRNODE.HASPROPERTY(SLC_VALUE)) {
-       // CONTINUE;
-       // }
-       // INTEGER VALUE = (INT) SPECATTRNODE.GETPROPERTY(SLC_VALUE)
-       // .GETLONG();
-       // REFSPECATTRIBUTE SPECATTR = NEW REFSPECATTRIBUTE();
-       // NODEITERATOR CHILDREN = SPECATTRNODE.GETNODES();
-       // INT INDEX = 0;
-       // STRING ID = NULL;
-       // WHILE (CHILDREN.HASNEXT()) {
-       // NODE CHILD = CHILDREN.NEXTNODE();
-       // IF (INDEX == VALUE)
-       // ID = CHILD.GETNAME();
-       // INDEX++;
-       // }
-       // SPECATTR.SETVALUE(ID);
-       // ATTRS.PUT(SPECATTRNODE.GETNAME(), SPECATTR);
-       // }
-       // // THROW NEW SLCEXCEPTION("UNSUPPORTED SPEC ATTRIBUTE "
-       // // + SPECATTRNODE);
-       // }
-       // RETURN ATTRS;
-       // } CATCH (REPOSITORYEXCEPTION E) {
-       // THROW NEW SLCEXCEPTION("CANNOT READ SPEC ATTRIBUTES FROM " + NODE,
-       // E);
-       // }
-       // }
+       protected void setFlowStatus(Node realizedFlowNode, String status)
+                       throws RepositoryException {
+               realizedFlowNode.setProperty(SLC_STATUS, status);
+               realizedFlowNode.getSession().save();
+       }
 
        protected JcrExecutionProcess getJcrExecutionProcess() {
                return (JcrExecutionProcess) getProcess();