@Override public String createNewInstance(String routeModelId, List<String> docIds, CoreSession session, boolean startInstance) { return createNewInstance(routeModelId, docIds, null, session, startInstance); }
@Override public void cleanupDoneAndCanceledRouteInstances(final String reprositoryName, final int limit) { doCleanupDoneAndCanceledRouteInstances(reprositoryName, limit); }
protected void fireEvent(String eventName, Map<String, Serializable> eventProperties) { DocumentRoutingServiceImpl.fireEvent(eventName, eventProperties, route, session); }
@Override public void grantPermissionToTaskDelegatedActors(CoreSession session, String permission, List<DocumentModel> docs, Task task) { setAclForActors(session, getDelegationACLName(task), permission, docs, task.getDelegatedActors()); }
/** * @since 7.4 */ @Override public void removePermissionsForTaskActors(CoreSession session, final List<DocumentModel> docs, String taskId) { final String aclRoutingName = getRoutingACLName(taskId); final String aclDelegationName = getDelegationACLName(taskId); new UnrestrictedSessionRunner(session) { @Override public void run() { for (DocumentModel doc : docs) { ACP acp = doc.getACP(); acp.removeACL(aclRoutingName); acp.removeACL(aclDelegationName); doc.setACP(acp, true); session.saveDocument(doc); } } }.runUnrestricted(); }
@Override @Deprecated public void addRouteElementToRoute(DocumentRef parentDocumentRef, int idx, DocumentRouteElement routeElement, CoreSession session) throws DocumentRouteNotLockedException { DocumentRoute route = getParentRouteModel(parentDocumentRef, session); if (!isLockedByCurrentUser(route, session)) { throw new DocumentRouteNotLockedException(); } DocumentModelList children = session.query( String.format(ORDERED_CHILDREN_QUERY, session.getDocument(parentDocumentRef).getId())); DocumentModel sourceDoc; try { sourceDoc = children.get(idx); addRouteElementToRoute(parentDocumentRef, sourceDoc.getName(), routeElement, session); } catch (IndexOutOfBoundsException e) { addRouteElementToRoute(parentDocumentRef, null, routeElement, session); } }
@Override public void run() { DocumentModel instance = session.getDocument(new IdRef(routeInstanceId)); DocumentRoute route = instance.getAdapter(DocumentRoute.class); if (docIds != null) { route.setAttachedDocuments(docIds); route.save(session); } fireEvent(DocumentRoutingConstants.Events.beforeRouteStart.name(), new HashMap<>(), route, session); DocumentRoutingEngineService routingEngine = Framework.getService(DocumentRoutingEngineService.class); routingEngine.start(route, map, session); fireEventAfterWorkflowStarted(route, session); }
@Override public void run() { String routeDocId = getRouteModelDocIdWithId(session, routeModelId); DocumentModel model = session.getDocument(new IdRef(routeDocId)); DocumentModel instance = persister.createDocumentRouteInstanceFromDocumentRouteModel(model, session); route = instance.getAdapter(DocumentRoute.class); route.setAttachedDocuments(docIds); route.save(session); Map<String, Serializable> props = new HashMap<>(); props.put(DocumentRoutingConstants.INITIATOR_EVENT_CONTEXT_KEY, initiator); fireEvent(DocumentRoutingConstants.Events.beforeRouteReady.name(), props); route.setReady(session); fireEvent(DocumentRoutingConstants.Events.afterRouteReady.name(), props); route.save(session); if (startInstance) { fireEvent(DocumentRoutingConstants.Events.beforeRouteStart.name(), new HashMap<>()); DocumentRoutingEngineService routingEngine = Framework.getService( DocumentRoutingEngineService.class); routingEngine.start(route, map, session); fireEventAfterWorkflowStarted(route, session); } res[0] = instance.getId(); }
@Override @Deprecated public void addRouteElementToRoute(DocumentRef parentDocumentRef, String sourceName, DocumentRouteElement routeElement, CoreSession session) throws DocumentRouteNotLockedException { DocumentRoute parentRoute = getParentRouteModel(parentDocumentRef, session); if (!isLockedByCurrentUser(parentRoute, session)) { throw new DocumentRouteNotLockedException(); } PathSegmentService pss = Framework.getService(PathSegmentService.class); DocumentModel docRouteElement = routeElement.getDocument(); DocumentModel parentDocument = session.getDocument(parentDocumentRef); docRouteElement.setPathInfo(parentDocument.getPathAsString(), pss.generatePathSegment(docRouteElement)); String lifecycleState = parentDocument.getCurrentLifeCycleState() .equals(DocumentRouteElement.ElementLifeCycleState.draft.name()) ? DocumentRouteElement.ElementLifeCycleState.draft.name() : DocumentRouteElement.ElementLifeCycleState.ready.name(); docRouteElement.putContextData(LifeCycleConstants.INITIAL_LIFECYCLE_STATE_OPTION_NAME, lifecycleState); docRouteElement = session.createDocument(docRouteElement); session.orderBefore(parentDocumentRef, docRouteElement.getName(), sourceName); session.save();// the new document will be queried later on }
@Override public void resumeInstance(String routeId, String nodeId, Map<String, Object> data, String status, CoreSession session) { AttachedDocumentsChecker adc = new AttachedDocumentsChecker(session, routeId); adc.runUnrestricted(); if (!adc.isWorkflowCanceled) { completeTask(routeId, nodeId, null, data, status, session); } }
@Override public List<DocumentRoute> getDocumentRoutesForAttachedDocument(CoreSession session, String attachedDocId) { List<DocumentRouteElement.ElementLifeCycleState> states = new ArrayList<>(); states.add(DocumentRouteElement.ElementLifeCycleState.ready); states.add(DocumentRouteElement.ElementLifeCycleState.running); return getDocumentRoutesForAttachedDocument(session, attachedDocId, states); }
protected static String getDelegationACLName(Task task) { return getDelegationACLName(task.getId()); }
@Override public DocumentRoute importRouteModel(URL modelToImport, boolean overwrite, CoreSession session) { if (modelToImport == null) { throw new NuxeoException(("No resource containing route templates found")); } Blob blob = new URLBlob(modelToImport); final String file = modelToImport.getFile(); DocumentModel doc; try { FileImporterContext context = FileImporterContext.builder(session, blob, persister.getParentFolderForDocumentRouteModels(session).getPathAsString()) .overwrite(true) .fileName(file) .build(); doc = getFileManager().createOrUpdateDocument(context); } catch (IOException e) { throw new NuxeoException(e); } if (doc == null) { throw new NuxeoException("Can not import document " + file); } // remove model from cache if any model with the same id existed if (modelsChache != null) { modelsChache.invalidate(doc.getName()); } return doc.getAdapter(DocumentRoute.class); }
@Override public void endTask(CoreSession session, Task task, Map<String, Object> data, String status) { String comment = (String) data.get(GraphNode.NODE_VARIABLE_COMMENT); TaskService taskService = Framework.getService(TaskService.class); taskService.endTask(session, session.getPrincipal(), task, comment, null, false); Map<String, String> taskVariables = task.getVariables(); String routeInstanceId = taskVariables.get(DocumentRoutingConstants.TASK_ROUTE_INSTANCE_DOCUMENT_ID_KEY); if (StringUtils.isEmpty(routeInstanceId)) { throw new DocumentRouteException("Can not resume workflow, no related route"); } completeTask(routeInstanceId, null, task, data, status, session); }
@Override @Deprecated public DocumentRoute createNewInstance(DocumentRoute model, List<String> documentIds, CoreSession session) { return createNewInstance(model, documentIds, session, true); }
@Override public void completeTask(String routeId, String taskId, Map<String, Object> data, String status, CoreSession session) { DocumentModel task = session.getDocument(new IdRef(taskId)); completeTask(routeId, null, task != null ? task.getAdapter(Task.class) : null, data, status, session); }
protected void fireEventAfterWorkflowStarted(DocumentRoute route, CoreSession session) { Map<String, Serializable> eventProperties = new HashMap<>(); eventProperties.put(RoutingAuditHelper.WORKFLOW_INITATIOR, route.getInitiator()); eventProperties.put("modelId", route.getModelId()); eventProperties.put("modelName", route.getModelName()); if (route instanceof GraphRoute) { eventProperties.put(RoutingAuditHelper.WORKFLOW_VARIABLES, (Serializable) ((GraphRoute) route).getVariables()); } fireEvent(DocumentRoutingConstants.Events.afterWorkflowStarted.name(), eventProperties, route, session); }
@Override @Deprecated public DocumentRoute createNewInstance(DocumentRoute model, String documentId, CoreSession session, boolean startInstance) { return createNewInstance(model, Collections.singletonList(documentId), session, startInstance); }
@Override @Deprecated public DocumentRoute createNewInstance(DocumentRoute model, String documentId, CoreSession session) { return createNewInstance(model, Collections.singletonList(documentId), session, true); }
@Override public DocumentRoute createNewInstance(DocumentRoute model, List<String> docIds, CoreSession session, boolean startInstance) { String id = createNewInstance(model.getDocument().getName(), docIds, session, startInstance); return session.getDocument(new IdRef(id)).getAdapter(DocumentRoute.class); }