@Override public Integer apply(final ActionDescriptor input) { final ResultDescriptor result = input.getUnconditionalResult(); return result != null && result.getPostFunctions() != null ? result.getPostFunctions().size() : 0 ; } });
public boolean isTransitionWithoutStepChange(ActionDescriptor transition) { return transition.getUnconditionalResult().getStep() == JiraWorkflow.ACTION_ORIGIN_STEP_ID; }
@Override public boolean apply(final ActionDescriptor actionDescriptor) { if (actionDescriptor.getConditionalResults() != null && !actionDescriptor.getConditionalResults().isEmpty()) { return true; } ResultDescriptor unconditionalResult = actionDescriptor.getUnconditionalResult(); if (unconditionalResult != null) { if (unconditionalResult.getValidators() != null && !unconditionalResult.getValidators().isEmpty()) { return true; } if (unconditionalResult.getPreFunctions() != null && !unconditionalResult.getPreFunctions().isEmpty()) { return true; } } if (actionDescriptor.getPreFunctions() != null && !actionDescriptor.getPreFunctions().isEmpty()) { return true; } if (actionDescriptor.getPostFunctions() != null && !actionDescriptor.getPostFunctions().isEmpty()) { return true; } return false; } });
final List<FunctionDescriptor> postFunctions = actionDescriptor.getUnconditionalResult().getPostFunctions(); for (FunctionDescriptor descriptor : postFunctions) && StringUtils.isNotBlank(fieldValue)) final StepDescriptor stepDescriptor = workflow.getDescriptor().getStep(actionDescriptor.getUnconditionalResult().getStep()); final Status destinationStatus = workflow.getLinkedStatusObject(stepDescriptor); map.put(destinationStatus.getId(), getCompleteCategory());
public ConfigurableJiraWorkflow(final String name, final WorkflowManager workflowManager) { super(workflowManager, new WorkflowDescriptor()); this.name = name; // create the initial step - useful to have one of these :) final StepDescriptor step = DescriptorFactory.getFactory().createStepDescriptor(); step.setId(1); step.setName("Open"); step.getMetaAttributes().put(JiraWorkflow.STEP_STATUS_KEY, "1"); step.setParent(descriptor); descriptor.addStep(step); // create the initial action final ActionDescriptor initialAction = DescriptorFactory.getFactory().createActionDescriptor(); initialAction.setId(1); initialAction.setName("Create"); initialAction.setParent(descriptor); descriptor.addInitialAction(initialAction); // add create issue permission validator initialAction.getValidators().add(PermissionValidator.makeDescriptor("Create Issue")); // setup result to always be step 1 final ResultDescriptor resultDescriptor = DescriptorFactory.getFactory().createResultDescriptor(); resultDescriptor.setStep(1); resultDescriptor.setStatus("open"); initialAction.setUnconditionalResult(resultDescriptor); // setup post functions resultDescriptor.getPostFunctions().add(IssueCreateFunction.makeDescriptor()); resultDescriptor.getPostFunctions().add(IssueReindexFunction.makeDescriptor()); resultDescriptor.getPostFunctions().add(FireIssueEventFunction.makeDescriptor(EventType.ISSUE_CREATED_ID)); }
if (unconditionalResult.getStep() == 0 && unconditionalResult.getJoin() != 0) log.warn("Encountered join "+unconditionalResult.getJoin()+" in result "+actionDescriptor.getName()+"; using default issue permissions"); return getPermissionContext(issue); int newStepId = unconditionalResult.getStep(); JiraWorkflow workflow; try
@RequiresXsrfCheck protected String doExecute() throws Exception { // setup the transition action ActionDescriptor action = DescriptorFactory.getFactory().createActionDescriptor(); action.setId(getWorkflow().getNextActionId()); action.setName(getTransitionName()); action.getMetaAttributes().put(JiraWorkflow.WORKFLOW_DESCRIPTION_ATTRIBUTE, getDescription()); setActionScreen(action, stringSet(getView()) ? getFieldScreen() : null); // setup the result ResultDescriptor result = DescriptorFactory.getFactory().createResultDescriptor(); action.setUnconditionalResult(result); result.setStep(getDestinationStep()); result.setOldStatus("Not Done"); result.setStatus("Done"); initialiseTransition(action); action.setParent(getStep()); getStep().getActions().add(action); workflowService.updateWorkflow(getJiraServiceContext(), getWorkflow()); return getRedirect(getCancelUrl()); }
private Set<String> getValidatorClassnames(ActionDescriptor action) { List<ValidatorDescriptor> validators = action.getUnconditionalResult().getValidators(); validators.addAll(action.getValidators()); Set<String> classNames = new HashSet<String>(); for (ValidatorDescriptor validator : validators) { Set<Map.Entry<String,String>> args = (Set<Map.Entry<String,String>>) validator.getArgs().entrySet(); classNames.addAll(getClassnamesFromArgs(args)); } return classNames; }
@RequiresXsrfCheck protected String doExecute() throws Exception { // setup the transition action action.setName(getTransitionName()); action.getMetaAttributes().put(JiraWorkflow.WORKFLOW_DESCRIPTION_ATTRIBUTE, getDescription()); setActionScreen(action, stringSet(getView()) ? getFieldScreen() : null); // setup the destination step result ResultDescriptor result = action.getUnconditionalResult(); result.setStep(getDestinationStep()); workflowService.updateWorkflow(getJiraServiceContext(), getWorkflow()); return getRedirect(getCancelUrl()); }
private Map<String,Set<String>> removeValidatorsWithClassnames(ActionDescriptor action, Set<String> classesToRemove) { Map<String,Set<String>> result = new HashMap<String,Set<String>>(); List<ValidatorDescriptor> validators = action.getUnconditionalResult().getValidators(); validators.addAll(action.getValidators()); Iterator<ValidatorDescriptor> it = validators.iterator(); while(it.hasNext()) { ValidatorDescriptor validator = it.next(); Set<Map.Entry<String,String>> args = (Set<Map.Entry<String,String>>) validator.getArgs().entrySet(); Set<String> usedClassnames = getClassnamesFromArgs(args); if(!Sets.intersection(classesToRemove,usedClassnames).isEmpty()) { String extensionClass = StringUtils.defaultIfEmpty((String)validator.getArgs().get("class.name"),validator.toString());//NON-NLS result.put(extensionClass,classesToRemove); it.remove(); } } return result; }
protected void deleteWorkflowDescriptor() throws WorkflowException { getTransition().getUnconditionalResult().getPostFunctions().remove(count - 1); } }
public boolean isTransitionWithoutStepChange() { return getTransition().getUnconditionalResult().getStep() == JiraWorkflow.ACTION_ORIGIN_STEP_ID; }
private Map<String, Map<String, String>> updateValidatorCustomFieldIds(ActionDescriptor action, Map<String, String> oldToNewIdMapping) { Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>(); List<ValidatorDescriptor> validators = action.getUnconditionalResult().getValidators(); validators.addAll(action.getValidators()); for(ValidatorDescriptor validator : validators) { Map<String,String> args = (Map<String,String>) validator.getArgs(); Map<String,String> updateMap = new HashMap<String, String>(); for(Map.Entry<String,String> entry : args.entrySet()) { if(entry.getValue().startsWith(WorkflowCustomFieldsHelper.CUSTOM_FIELD_PREFIX) && oldToNewIdMapping.containsKey(entry.getValue())) { updateMap.put(entry.getKey(),oldToNewIdMapping.get(entry.getValue())); } } if(!updateMap.isEmpty()) { for(Map.Entry<String,String> updateEntry : updateMap.entrySet()) { args.put(updateEntry.getKey(),updateEntry.getValue()); } String extensionClass = StringUtils.defaultIfEmpty((String)validator.getArgs().get("class.name"),validator.toString());//NON-NLS result.put(extensionClass,updateMap); } } return result; }
protected List getDescriptorCollection() { return getTransition().getUnconditionalResult().getPostFunctions(); }
public Collection<ActionDescriptor> getActionsWithResult(final StepDescriptor stepDescriptor) { final Collection<ActionDescriptor> actions = getAllActions(); actionloop : for (final Iterator iterator = actions.iterator(); iterator.hasNext();) { final ActionDescriptor actionDescriptor = (ActionDescriptor) iterator.next(); // Check all conditional results for (final Object o : actionDescriptor.getConditionalResults()) { final ResultDescriptor resultDescriptor = (ResultDescriptor) o; if (resultDescriptor.getStep() == stepDescriptor.getId()) { // The step is a destination step for action's conditional result // Leave the action in the collection continue actionloop; } } // Now check the unconditional result if (actionDescriptor.getUnconditionalResult().getStep() != stepDescriptor.getId()) { // If the step is not a destination of any conditional and unconditional result remove the action from the list iterator.remove(); } } return actions; }
private Set<String> getFunctionClassnames(ActionDescriptor action) { List<FunctionDescriptor> functions = action.getUnconditionalResult().getPostFunctions(); functions.addAll(action.getPostFunctions()); Set<String> classNames = new HashSet<String>(); for (FunctionDescriptor function : functions) { Set<Map.Entry<String,String>> args = (Set<Map.Entry<String,String>>) function.getArgs().entrySet(); classNames.addAll(getClassnamesFromArgs(args)); } return classNames; }
public Collection getStepsWithAction(final StepDescriptor stepDescriptor) { // If global Action final Collection actions = getAllActions(); actionloop : for (final Iterator iterator = actions.iterator(); iterator.hasNext();) { final ActionDescriptor actionDescriptor = (ActionDescriptor) iterator.next(); // Check all conditional results for (final Object o : actionDescriptor.getConditionalResults()) { final ResultDescriptor resultDescriptor = (ResultDescriptor) o; if (resultDescriptor.getStep() == stepDescriptor.getId()) { // The step is a destination step for action's conditional result // Leave the action in the collection continue actionloop; } } // Now check the unconditional result if (actionDescriptor.getUnconditionalResult().getStep() != stepDescriptor.getId()) { // If the step is not a destination of any conditional and unconditional result remove the action from the list iterator.remove(); } } return actions; }
public Collection<FunctionDescriptor> getPostFunctionsForTransition(final ActionDescriptor actionDescriptor) { final Collection<FunctionDescriptor> allPostFunctions = Lists.newArrayList(); if ((actionDescriptor.getUnconditionalResult() != null) && (actionDescriptor.getUnconditionalResult().getPostFunctions() != null)) { allPostFunctions.addAll(actionDescriptor.getUnconditionalResult().getPostFunctions()); } final List conditionalResults = actionDescriptor.getConditionalResults(); if (conditionalResults != null) { for (final Object conditionalResult : conditionalResults) { final ResultDescriptor resultDescriptor = (ResultDescriptor) conditionalResult; allPostFunctions.addAll(resultDescriptor.getPostFunctions()); } } if (actionDescriptor.getPostFunctions() != null) { allPostFunctions.addAll(actionDescriptor.getPostFunctions()); } return allPostFunctions; }
private StepDescriptor getInitialStepDescriptor(JiraWorkflow workflow) { List initialActions = workflow.getDescriptor().getInitialActions(); ActionDescriptor initialAction = (ActionDescriptor) initialActions.get(0); int initialStep = initialAction.getUnconditionalResult().getStep(); return workflow.getDescriptor().getStep(initialStep); }
private Map<String, Map<String, String>> updatePostFunctionCustomFieldIds(ActionDescriptor action, Map<String, String> oldToNewIdMapping) { Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>(); Collection<FunctionDescriptor> postFunctions = action.getUnconditionalResult().getPostFunctions(); postFunctions.addAll(action.getPostFunctions()); for(FunctionDescriptor function : postFunctions) { Map<String,String> args = (Map<String,String>) function.getArgs(); Map<String,String> updateMap = new HashMap<String, String>(); for(Map.Entry<String,String> entry : args.entrySet()) { if(entry.getValue().startsWith(WorkflowCustomFieldsHelper.CUSTOM_FIELD_PREFIX) && oldToNewIdMapping.containsKey(entry.getValue())) { updateMap.put(entry.getKey(),oldToNewIdMapping.get(entry.getValue())); } } if(!updateMap.isEmpty()) { for(Map.Entry<String,String> updateEntry : updateMap.entrySet()) { args.put(updateEntry.getKey(),updateEntry.getValue()); } String extensionClass = StringUtils.defaultIfEmpty((String)function.getArgs().get("class.name"),function.toString());//NON-NLS result.put(extensionClass,updateMap); } } return result; }