@Override public void run() { DocumentModel parent = session.getDocument(document.getParentRef()); DocumentRouteElement parentElement = parent.getAdapter(DocumentRouteElement.class); isRunning = parentElement.isRunning(); }
@Override public void cancel(CoreSession session, DocumentRouteElement element) { if (element.isCanceled()) { return; } if (element.isReady() || element.isDone()) { element.setCanceled(session); } else if (element.isRunning()) { try { undo(session, element); } finally { element.setCanceled(session); } } else { throw new RuntimeException("Not allowed to cancel an element neither in ready, done or running state."); } } }
@Override public void run(CoreSession session, DocumentRouteElement element) { List<DocumentRouteElement> children = getChildrenElement(session, element); if (!element.isRunning()) { element.setRunning(session); } if (children.isEmpty()) { element.setDone(session); return; } // run all the child unless there is a wait state for (DocumentRouteElement child : children) { if (!child.isDone()) { child.run(session); if (!child.isDone()) { return; } } } // all child ran, we're done element.setDone(session); } }
if (!element.isRunning()) { element.setRunning(session);
return; if (!element.isRunning()) { element.setRunning(session); boolean someChildrenNotDone = false;
@Override public void run(CoreSession session, DocumentRouteElement element) { if (element.isRunning()) { return; } else { element.setRunning(session); } if (!(element instanceof DocumentRouteStep)) { throw new RuntimeException("Method run should be overriden in parent class."); } EventFirer.fireEvent(session, element, null, DocumentRoutingConstants.Events.beforeStepRunning.name()); try (OperationContext context = new OperationContext(session)) { context.put(DocumentRoutingConstants.OPERATION_STEP_DOCUMENT_KEY, element); context.setInput(element.getAttachedDocuments(session)); if (!element.isDone()) { EventFirer.fireEvent(session, element, null, DocumentRoutingConstants.Events.stepWaiting.name()); } String chainId = getDocumentRoutingService().getOperationChainId(element.getDocument().getType()); getAutomationService().run(context, chainId); } catch (OperationException e) { throw new NuxeoException(e); } }
@Override public void undo(CoreSession session, DocumentRouteElement element) { EventFirer.fireEvent(session, element, null, DocumentRoutingConstants.Events.beforeUndoingStep.name()); try (OperationContext context = new OperationContext(session)) { context.put(DocumentRoutingConstants.OPERATION_STEP_DOCUMENT_KEY, element); context.setInput(element.getAttachedDocuments(session)); String operationChainId; String docType = element.getDocument().getType(); if (element.isDone()) { operationChainId = getDocumentRoutingService().getUndoFromDoneOperationChainId(docType); } else if (element.isRunning()) { operationChainId = getDocumentRoutingService().getUndoFromRunningOperationChainId(docType); } else { throw new RuntimeException("Trying to undo a step neither in done nor running state."); } getAutomationService().run(context, operationChainId); } catch (OperationException e) { throw new NuxeoException(e); } EventFirer.fireEvent(session, element, null, DocumentRoutingConstants.Events.afterUndoingStep.name()); }
DocumentModel stepMoveBefore = orderedChilds.get(selectedDocumentIndex - 1); DocumentRouteElement stepElementMoveBefore = stepMoveBefore.getAdapter(DocumentRouteElement.class); if (stepElementMoveBefore.isRunning()) { facesMessages.add( StatusMessage.Severity.WARN, DocumentModel stepMoveAfter = orderedChilds.get(selectedDocumentIndex + 1); DocumentRouteElement stepElementMoveAfter = stepMoveAfter.getAdapter(DocumentRouteElement.class); if (stepElementMoveAfter.isRunning()) { facesMessages.add( StatusMessage.Severity.WARN,