X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2Fexecution%2FJcrProcessThread.java;h=8755829e7bba6e213b896c1d142ca82d65c22c45;hb=b7ad99f6fc4414eeb82b9a4ae65aa20e02af66ce;hp=1ae15d4197f8451e6027aa20fc5d54441e34b476;hpb=57aa5d64fb38af2d98076eeaaa11573b3147cc26;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java index 1ae15d419..8755829e7 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrProcessThread.java @@ -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 realizedFlows = getProcess().getRealizedFlows(); - for (RealizedFlow realizedFlow : realizedFlows) { - Node realizedFlowNode = session - .getNode(((JcrRealizedFlow) realizedFlow).getPath()); + List 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 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 VALUES = NEW HASHMAP(); - // 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 - // READEXECUTIONSPECATTRIBUTES( - // NODE NODE) { - // TRY { - // MAP ATTRS = NEW HASHMAP(); - // 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();