public String getTransitionName() { return transition.getName(); }
public String apply(ValidatedAction in) { return in.action.getName(); } }).iterator();
@Override public boolean apply(ActionDescriptor action) { return action.getName().compareToIgnoreCase(name) == 0; } });
private Collection<ValidatedAction> getMatchingActionsForCommand(String cmd, Collection<ValidatedAction> actions) { String cmdSanitized = cmd.trim().toLowerCase(Locale.US); String cmdWithSpaces = cmdSanitized.replace('-', ' '); Collection<ValidatedAction> firstShotActions = new ArrayList<ValidatedAction>(); Collection<ValidatedAction> secondShotActions = new ArrayList<ValidatedAction>(); for (ValidatedAction validatedAction : actions) { String name = validatedAction.action.getName().toLowerCase(Locale.US); if (name.equals(cmdSanitized)) { // choose an exact match immediately return Arrays.asList(validatedAction); } else if (name.startsWith(cmdSanitized)) { firstShotActions.add(validatedAction); } else if (name.startsWith(cmdWithSpaces)) { secondShotActions.add(validatedAction); } } return firstShotActions.isEmpty() ? secondShotActions : firstShotActions; }
private Set<Map<String, String>> getTransitions(final int webHookListenerId, JiraWorkflow workflow) { Set<Map<String, String>> transitions = Sets.newHashSet(); final Map<ActionDescriptor, Collection<FunctionDescriptor>> actionToPostfunctionsMap = workflowManager.getPostFunctionsForWorkflow(workflow); for (Map.Entry<ActionDescriptor, Collection<FunctionDescriptor>> entry : actionToPostfunctionsMap.entrySet()) { if (isWebHookLinked(webHookListenerId, entry.getValue())) { transitions.add(ImmutableMap.of("workflow", workflow.getName(), "transition", entry.getKey().getName())); } } return transitions; }
private boolean upgradeCondition(ConditionDescriptor condition, ActionDescriptor action, JiraWorkflow workflow, boolean isSystemWorkflow, String descriptorClassName) { boolean updated = false; if (descriptorClassName != null) { String updatedClassName = CLASSNAMES.get(descriptorClassName); if (updatedClassName != null) { if (isSystemWorkflow) { logError(String.format("Detected reference to a workflow condition in the filesystem-configured " + "workflow '%s' for transition '%s'. Please manually upgrade the configuration " + "for this workflow by updating the condition <arg name=\"class.name\" /> " + "elements containing '%s' to the new namespace: '%s'.", workflow.getName(), action.getName(), descriptorClassName, updatedClassName)); } else { log.debug(String.format("Upgrading '%s' condition class to '%s' (in workflow '%s' under action '%s')", descriptorClassName, updatedClassName, workflow.getName(), action.getName())); condition.getArgs().put(ARG_CLASSNAME, updatedClassName); updated = true; } } } return updated; }
public Map<String, Object> toMap(Map transientVars, ApplicationUser user, MutableIssue issue) { final WorkflowEntry entry = (WorkflowEntry) transientVars.get(ENTRY); final ImmutableMap.Builder<String, Object> transition = ImmutableMap.builder(); final Integer actionId = (Integer) transientVars.get(ACTION_ID); final WorkflowDescriptor workflowDescriptor = (WorkflowDescriptor) transientVars.get(WORKFLOW_DESCRIPTOR); final ActionDescriptor actionDescriptor = workflowDescriptor.getAction(actionId); final Step createdStep = (Step) transientVars.get(CREATED_STEP); final WorkflowStore workflowStore = (WorkflowStore) transientVars.get(WORKFLOW_STORE); transition.put(WORKFLOW_ID, entry.getId()) .put(WORKFLOW_NAME, entry.getWorkflowName()) .put(TRANSITION_ID, actionId) .put(TRANSITION_NAME, actionDescriptor.getName()) .put(FROM_STATUS, findPreviousStatus(createdStep, entry, workflowStore, workflowDescriptor)) .put(TO_STATUS, getToStatus(workflowDescriptor, createdStep)); final ImmutableMap.Builder<String, Object> transitionContext = ImmutableMap.builder(); transitionContext.put(TRANSITION_CONTEXT, transition.build()) .put(COMMENT, transientVars.get(COMMENT) != null ? transientVars.get(COMMENT) : "") .put(USER, user != null ? userBeanFactory.createBean(user) : ""); transitionContext.put(ISSUE, issueBeanFactory.createBean(issue)); transitionContext.put(TIMESTAMP, createdStep.getStartDate().getTime()); return transitionContext.build(); }
public void visit(final JiraWorkflow workflow, final ActionDescriptor actionDescriptor, final Set<JiraWorkflow> workflowsToSave) { final String c = (String) actionDescriptor.getMetaAttributes().get( WorkflowHandler.COMMIT_COMMAND_MAPPING); if (c != null && lowerCaseCommand.equals(c.toLowerCase())) { transitions.add(new WorkflowTransition(workflow.getName(), workflow.isDraftWorkflow(), actionDescriptor.getId(), actionDescriptor.getName(), workflow.isSystemWorkflow())); } } });
public String getTransitionName(final String workflowName, final String actionDescriptorId) { final JiraWorkflow workflow = ComponentAccessor.getWorkflowManager().getWorkflow(workflowName); final ActionDescriptor descriptor = workflow.getDescriptor().getAction(Integer.parseInt(actionDescriptorId)); @SuppressWarnings ("unchecked") final Map<String, String> metadata = descriptor.getMetaAttributes(); if (metadata.containsKey(JiraWorkflow.JIRA_META_ATTRIBUTE_EDIT_ALLOWED)) { final String key = metadata.get(JiraWorkflow.JIRA_META_ATTRIBUTE_EDIT_ALLOWED); final I18nBean i18nBean = new I18nBean(); final String value = i18nBean.getText(key); if ((value != null) && !"".equals(value.trim()) && !value.trim().equals(key.trim())) { return value; } } return descriptor.getName(); }
/** * Get the translated display name of a workflow transition. * * @param descriptor The action descriptor to get the name of * @return The name of the transition. */ public static String getWorkflowTransitionDisplayName(final ActionDescriptor descriptor) { if(descriptor == null) { return getI18nBean().getText("common.words.unknown"); } final Map<String, Object> metadata = descriptor.getMetaAttributes(); if (metadata.containsKey(JiraWorkflow.JIRA_META_ATTRIBUTE_I18N)) { final String key = (String) metadata.get(JiraWorkflow.JIRA_META_ATTRIBUTE_I18N); final String value = getI18nBean().getText(key); if ((value != null) && !"".equals(value.trim()) && !value.trim().equals(key.trim())) { return value; } } return descriptor.getName(); }
protected void checkDuplicateTransitionName(Collection tranistionCollection, String transitionName) { // Check for duplicate transition names for (final Object aTranistionCollection : tranistionCollection) { ActionDescriptor actionDescriptor = (ActionDescriptor) aTranistionCollection; if (transitionName.equalsIgnoreCase(actionDescriptor.getName())) { addError("transitionName", getText("admin.errors.workflows.transition.already.exists.for.step", getStep().getName())); break; } } }
public void visit(final JiraWorkflow workflow, final ActionDescriptor actionDescriptor, final Set<JiraWorkflow> workflowsToSave) { transitions.add(new WorkflowTransition(workflow.getName(), workflow.isDraftWorkflow(), actionDescriptor.getId(), actionDescriptor.getName(), workflow.isSystemWorkflow())); } });
actions[i] = new RemoteNamedObject(String.valueOf(id), descriptor.getName()); ++i;
public String doDefault() throws Exception { setTransitionName(action.getName()); setDescription((String) action.getMetaAttributes().get(JiraWorkflow.WORKFLOW_DESCRIPTION_ATTRIBUTE)); setDestinationStep(action.getUnconditionalResult().getStep()); FieldScreen fieldScreen = workflowActionsBean.getFieldScreenForView(action); setView(fieldScreen != null ? fieldScreen.getId().toString() : ""); return super.doDefault(); }
protected void setupWorkflowDescriptor() { List validators = getTransition().getValidators(); if (validators != null && !validators.isEmpty()) { if (validators.size() >= getIndexCount()) { ValidatorDescriptor validatorDescriptor = (ValidatorDescriptor) validators.get(getIndexCount() - 1); setWorkflowDescriptor(validatorDescriptor); } else { addErrorMessage(getText("admin.errors.count.outside.range","'" + getIndexCount() + "'")); } } else { addErrorMessage(getText("admin.errors.no.validators","'" + getTransition().getName() + "'")); } }
protected void setupWorkflowDescriptor() { ResultDescriptor unconditionalResult = getTransition().getUnconditionalResult(); if (unconditionalResult != null) { List postFunctions = unconditionalResult.getPostFunctions(); if (postFunctions != null && !postFunctions.isEmpty()) { if (postFunctions.size() >= getIndexCount()) { FunctionDescriptor functionDescriptor = (FunctionDescriptor) postFunctions.get(getIndexCount() - 1); setWorkflowDescriptor(functionDescriptor); } else { addErrorMessage(getText("admin.errors.workflows.count.outside.range", "'" + getIndexCount() + "'")); } } else { addErrorMessage(getText("admin.errors.workflows.no.post.functions","'" + getTransition().getName() + "'")); } } else { addErrorMessage(getText("admin.errors.workflows.no.unconditional.result","'" + getTransition().getName() + "'")); } }
@Override public ExtensionRemovalResult removeExtensionsWithClassnames(JiraWorkflow jiraWorkflow, Set<String> classesToRemove) { ExtensionRemovalResultImpl result = new ExtensionRemovalResultImpl(); Collection<ActionDescriptor> allActions = jiraWorkflow.getAllActions(); for (ActionDescriptor action : allActions) { Map<String,Set<String>> removedFunctions = removePostFunctionsWithClassnames(action,classesToRemove); Map<String,Set<String>> removedValidators = removeValidatorsWithClassnames(action, classesToRemove); Map<String,Set<String>> removedConditions = removeConditionsWithClassnames(action, classesToRemove); result.addAction(action.getName() + "(" + action.getId() + ")",removedFunctions,removedValidators,removedConditions); } return result; }
@Override public ExtensionCustomFieldUpdateResult updateWorkflowCustomFieldIds(ConfigurableJiraWorkflow jiraWorkflow, Map<String, String> oldToNewIdMapping) { ExtensionCustomFieldUpdateResultImpl result = new ExtensionCustomFieldUpdateResultImpl(); Collection<ActionDescriptor> allActions = jiraWorkflow.getAllActions(); for (ActionDescriptor action : allActions) { Map<String,Map<String,String>> functions = updatePostFunctionCustomFieldIds(action,oldToNewIdMapping); Map<String,Map<String,String>> validators = updateValidatorCustomFieldIds(action,oldToNewIdMapping); Map<String,Map<String,String>> conditions = updateConditionsCustomFieldIds(action,oldToNewIdMapping); result.addAction(action.getName() + "(" + action.getId() + ")",functions,validators,conditions); } return result; }
protected void addWorkflowDescriptor() throws WorkflowException { ValidatorDescriptor validatorDescriptor = DescriptorFactory.getFactory().createValidatorDescriptor(); validatorDescriptor.setType("class"); final Map validatorArgs = validatorDescriptor.getArgs(); validatorArgs.put("class.name", getDescriptor().getImplementationClass().getName()); // Add parameters to the workflow validator descriptor // Make the factory process it WorkflowPluginValidatorFactory workflowPluginValidatorFactory = (WorkflowPluginValidatorFactory) getDescriptor().getModule(); validatorArgs.putAll(workflowPluginValidatorFactory.getDescriptorParams(getDescriptorParams())); if (getTransition().getValidators() != null) { getTransition().getValidators().add(validatorDescriptor); currentValidatorCount = "" + getTransition().getValidators().size(); } else { throw new InfrastructureException("Validators collection is null for workflow '" + getWorkflow().getName() + "' step '" + getStep().getName() + "' transition '" + getTransition().getName() + "'."); } workflowService.updateWorkflow(getJiraServiceContext(), getWorkflow()); }
if (!getTransitionName().equalsIgnoreCase(action.getName()))