@Override protected WorkflowDefinition getTypedItemForDecodedId(String itemId) { WorkflowDefinition workflowDef = workflowService.getDefinitionByName(itemId); if (workflowDef == null) { String msg = "Workflow definition does not exist: " + itemId; throw new IllegalArgumentException(msg); } return workflowDef; }
@Override protected WorkflowDefinition getTypedItemForDecodedId(String itemId) { WorkflowDefinition workflowDef = workflowService.getDefinitionByName(itemId); if (workflowDef == null) { String msg = "Workflow definition does not exist: " + itemId; throw new IllegalArgumentException(msg); } return workflowDef; }
/** * Get deployed workflow definition by Name * * @param name the workflow definition name * @return the workflow definition matching the given name */ public JscriptWorkflowDefinition getDefinitionByName(String name) { WorkflowDefinition cmrWorkflowDefinition = services.getWorkflowService().getDefinitionByName(name); return cmrWorkflowDefinition == null ? null: new JscriptWorkflowDefinition(cmrWorkflowDefinition, services, getScope()); }
/** * Get deployed workflow definition by Name * * @param name the workflow definition name * @return the workflow definition matching the given name */ public JscriptWorkflowDefinition getDefinitionByName(String name) { WorkflowDefinition cmrWorkflowDefinition = services.getWorkflowService().getDefinitionByName(name); return cmrWorkflowDefinition == null ? null: new JscriptWorkflowDefinition(cmrWorkflowDefinition, services, getScope()); }
@Override public void requestReset(String userId, String clientName) { ParameterCheck.mandatoryString("userId", userId); ParameterCheck.mandatoryString("clientName", clientName); String userEmail = validateUserAndGetEmail(userId); // Get the (latest) workflow definition for reset-password. WorkflowDefinition wfDefinition = workflowService.getDefinitionByName(WorkflowModelResetPassword.WORKFLOW_DEFINITION_NAME); // create workflow properties Map<QName, Serializable> props = new HashMap<>(7); props.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, I18NUtil.getMessage(WORKFLOW_DESCRIPTION_KEY)); props.put(WorkflowModelResetPassword.WF_PROP_USERNAME, userId); props.put(WorkflowModelResetPassword.WF_PROP_USER_EMAIL, userEmail); props.put(WorkflowModelResetPassword.WF_PROP_CLIENT_NAME, clientName); props.put(WorkflowModel.ASSOC_PACKAGE, workflowService.createPackage(null)); String guid = GUID.generate(); props.put(WorkflowModelResetPassword.WF_PROP_KEY, guid); props.put(WorkflowModelResetPassword.WF_PROP_TIMER_END, timerEnd); // start the workflow WorkflowPath path = workflowService.startWorkflow(wfDefinition.getId(), props); if (path.isActive()) { WorkflowTask startTask = workflowService.getStartTask(path.getInstance().getId()); workflowService.endTask(startTask.getId(), null); } }
@Override public void requestReset(String userId, String clientName) { ParameterCheck.mandatoryString("userId", userId); ParameterCheck.mandatoryString("clientName", clientName); String userEmail = validateUserAndGetEmail(userId); // Get the (latest) workflow definition for reset-password. WorkflowDefinition wfDefinition = workflowService.getDefinitionByName(WorkflowModelResetPassword.WORKFLOW_DEFINITION_NAME); // create workflow properties Map<QName, Serializable> props = new HashMap<>(7); props.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, I18NUtil.getMessage(WORKFLOW_DESCRIPTION_KEY)); props.put(WorkflowModelResetPassword.WF_PROP_USERNAME, userId); props.put(WorkflowModelResetPassword.WF_PROP_USER_EMAIL, userEmail); props.put(WorkflowModelResetPassword.WF_PROP_CLIENT_NAME, clientName); props.put(WorkflowModel.ASSOC_PACKAGE, workflowService.createPackage(null)); String guid = GUID.generate(); props.put(WorkflowModelResetPassword.WF_PROP_KEY, guid); props.put(WorkflowModelResetPassword.WF_PROP_TIMER_END, timerEnd); // start the workflow WorkflowPath path = workflowService.startWorkflow(wfDefinition.getId(), props); if (path.isActive()) { WorkflowTask startTask = workflowService.getStartTask(path.getInstance().getId()); workflowService.endTask(startTask.getId(), null); } }
/** * Return Activiti workflow definition unless Activiti engine is disabled. * @param type the workflow type * @return WorkflowDefinition */ private WorkflowDefinition getWorkflowDefinition(InvitationWorkflowType type) { String workflowName = null; if (type == InvitationWorkflowType.MODERATED) { workflowName = getModeratedDefinitionName(); } else if (type == InvitationWorkflowType.NOMINATED_EXTERNAL) { workflowName = getNominatedExternalDefinitionName(); } else { workflowName = getNominatedDefinitionName(); } WorkflowDefinition definition = workflowService.getDefinitionByName(workflowName); if (definition == null) { // handle workflow definition does not exist Object objs[] = {workflowName}; throw new InvitationException("invitation.error.noworkflow", objs); } return definition; }
/** * Return Activiti workflow definition unless Activiti engine is disabled. * @param type the workflow type * @return WorkflowDefinition */ private WorkflowDefinition getWorkflowDefinition(InvitationWorkflowType type) { String workflowName = null; if (type == InvitationWorkflowType.MODERATED) { workflowName = getModeratedDefinitionName(); } else if (type == InvitationWorkflowType.NOMINATED_EXTERNAL) { workflowName = getNominatedExternalDefinitionName(); } else { workflowName = getNominatedDefinitionName(); } WorkflowDefinition definition = workflowService.getDefinitionByName(workflowName); if (definition == null) { // handle workflow definition does not exist Object objs[] = {workflowName}; throw new InvitationException("invitation.error.noworkflow", objs); } return definition; }
WorkflowDefinition def = workflowService.getDefinitionByName(workflowName);
WorkflowDefinition def = workflowService.getDefinitionByName(workflowName);
@SuppressWarnings("unchecked") private WorkflowService makeWorkflowService() { WorkflowService service = mock(WorkflowService.class); when(service.getDefinitionByName(WF_DEF_NAME)).thenReturn(definition); String instanceId = "foo$instanceId"; newInstance = new WorkflowInstance(instanceId, definition, null, null, null, null, true, null, null); WorkflowTask startTask = new WorkflowTask("foo$taskId", null, null, null, null, null, null, null); String pathId = "foo$pathId"; final WorkflowPath path = new WorkflowPath(pathId, newInstance, null, true); when(service.startWorkflow(eq(definition.getId()), anyMap())) .thenAnswer(new Answer<WorkflowPath>() { public WorkflowPath answer(InvocationOnMock invocation) throws Throwable { Object[] arguments = invocation.getArguments(); actualProperties = (Map<QName, Serializable>) arguments[1]; return path; } }); when(service.getTasksForWorkflowPath(path.getId())) .thenReturn(Collections.singletonList(startTask)); when(service.createPackage(null)).thenReturn(PCKG_NODE); return service; }
private WorkflowTask getWorkflowTask(String definitionName) { WorkflowDefinition reviewDef = workflowService.getDefinitionByName(definitionName); Map<QName, Serializable> properties = new HashMap<QName, Serializable>(); properties.put(WorkflowModel.ASSOC_ASSIGNEE, personManager.get(USER_ONE)); properties.put(WorkflowModel.ASSOC_PACKAGE, folder); WorkflowPath path = workflowService.startWorkflow(reviewDef.getId(), properties); WorkflowTask task = getTaskForPath(path); String startTaskId = reviewDef.getStartTaskDefinition().getId(); if (startTaskId.equals(task.getDefinition().getId())) { workflowService.endTask(task.getId(), null); task = getTaskForPath(path); } return task; }
@Test public void testAdminCanDeployBySwitchingContentTypeToWorkflow() { // This test should pass, as the workflow is in the correct location // and being created by admin. // Test precondition assertNull(workflowService.getDefinitionByName("activiti$testProcess")); AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); NodeRef workflowParent = findWorkflowParent(); WorkflowDefinition workflowDef = createContentAndSwitchToWorkflow( "activiti$testProcess", "alfresco/workflow/test-security.bpmn20.xml", workflowParent); assertNotNull(workflowDef); // Create workflow parameters Map<QName, Serializable> params = new HashMap<>(); Serializable wfPackage = workflowService.createPackage(null); params.put(WorkflowModel.ASSOC_PACKAGE, wfPackage); params.put(WorkflowModel.PROP_WORKFLOW_DUE_DATE, new Date()); params.put(WorkflowModel.PROP_WORKFLOW_PRIORITY, 1); NodeRef group = groupManager.get(GROUP); assertNotNull(group); params.put(WorkflowModel.ASSOC_GROUP_ASSIGNEE, group); // Start a workflow instance WorkflowPath path = workflowService.startWorkflow(workflowDef.getId(), params); assertNotNull(path); assertTrue(path.isActive()); }
@Test public void testAdminCannotDeployBySwitchingContentTypeToWorkflowWhenLocationIsNotValid() { // This should fail to deploy the workflow as it is in the wrong location. // Test precondition assertNull(workflowService.getDefinitionByName("activiti$testProcess")); NodeRef rootNode = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); WorkflowDefinition workflowDef = createContentAndSwitchToWorkflow( "activiti$testProcess", "alfresco/workflow/test-security.bpmn20.xml", rootNode); assertNull("Workflow should not be deployed", workflowDef); }
WorkflowDefinition defByName = workflowService.getDefinitionByName(definition.getName()); checkDefinition(definition, defByName);
@Test public void testNonAdminCannotDeployWorkflowBySwitchingNodeTypeEvenInCorrectLocation() { // Test precondition assertNull(workflowService.getDefinitionByName("activiti$testProcess")); AuthenticationUtil.setFullyAuthenticatedUser(USER1); NodeRef workflowParent = findWorkflowParent(); try { createContentAndSwitchToWorkflow( "activiti$testProcess", "alfresco/workflow/test-security.bpmn20.xml", workflowParent); fail("User should not be able to create a node in the 'correct location'."); } catch (AccessDeniedException e) { // Good! } }
@Test public void testNonAdminCannotDeployWorkflowBySwitchingNodeType() { // Test precondition assertNull(workflowService.getDefinitionByName("activiti$testProcess")); AuthenticationUtil.setFullyAuthenticatedUser(USER1); NodeRef person = serviceRegistry.getPersonService().getPerson(USER1); NodeRef home = (NodeRef) nodeService.getProperty(person, ContentModel.PROP_HOMEFOLDER); WorkflowDefinition workflowDef = createContentAndSwitchToWorkflow( "activiti$testProcess", "alfresco/workflow/test-security.bpmn20.xml", home); assertNull("Workflow should not be deployed", workflowDef); }
WorkflowDefinition adhocDef1= workflowService.getDefinitionByName(adhocKey); WorkflowDefinition adhocDef2 = workflowService.getDefinitionByName(adhocKey); NodeRef assignee2 = personService.getPerson(user2); NodeRef pckg2 = workflowService.createPackage(null);
WorkflowDefinition definition = workflowService.getDefinitionByName(definitionKey); assertNull(definition); assertEquals(definitionKey, definition.getName()); assertNotNull(workflowService.getDefinitionById(definition.getId())); assertNotNull(workflowService.getDefinitionByName(definitionKey)); assertNull(workflowService.getDefinitionByName(definitionKey)); WorkflowDefinition definitionByName = workflowService.getDefinitionByName(definitionKey); assertEquals(definition.getId(), definitionByName.getId());
/** * Deploy as a normal content node, then switch the type to bpm:workflowDefinition. * <p> * This should not be allowed to happen if you are non-admin. */ private WorkflowDefinition createContentAndSwitchToWorkflow(String processName, String resource, NodeRef parent) { InputStream input = getInputStream(resource); ChildAssociationRef childAssoc = nodeService.createNode( parent, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_PREFIX, "test"), ContentModel.TYPE_CONTENT, null); NodeRef workflowNode = childAssoc.getChildRef(); ContentWriter writer = serviceRegistry.getContentService().getWriter(workflowNode, ContentModel.PROP_CONTENT, true); writer.putContent(input); // Now change to WorkflowModel.TYPE_WORKFLOW_DEF nodeService.setType(workflowNode, WorkflowModel.TYPE_WORKFLOW_DEF); // Activate it nodeService.setProperty(workflowNode, WorkflowModel.PROP_WORKFLOW_DEF_DEPLOYED, true); return workflowService.getDefinitionByName(processName); }