Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 21:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.
×Hello,
My requirement is add workflow validator programmatically. I have created a workflow validator using https://www.j-tricks.com/tutorials/workflow-validator.
Now i am getting below exception.
IssueValidator cannot be cast to com.opensymphony.workflow.loader.ValidateDescriptor
I am using below code for creating validator.
public class IssueValidatorFactory extends AbstractWorkflowPluginFactory implements WorkflowPluginValidatorFactory {
@Override
protected void getVelocityParamsForInput(Map<String, Object> map) {
}
@Override
protected void getVelocityParamsForEdit(Map<String, Object> map, AbstractDescriptor abstractDescriptor) {
}
@Override
protected void getVelocityParamsForView(Map<String, Object> map, AbstractDescriptor abstractDescriptor) {
}
@Override
public Map<String, ?> getDescriptorParams(Map<String, Object> map) {
return map;
}
}
public class IssueValidator implements Validator {
private final ScheduleManager scheduleManager;
public IssueValidator(ScheduleManager scheduleManager) {
this.scheduleManager = scheduleManager;
}
public void validate(Map transientVars, Map args, PropertySet ps) throws InvalidInputException, WorkflowException {
Issue issue = (Issue) transientVars.get("issue");
List<Schedule> schedules = scheduleManager.getSchedulesByExecutionStatus(String.valueOf(ApplicationConstants.JOB_STATUS_FAILED), issue.getId().intValue());
if (!schedules.isEmpty()){
throw new InvalidInputException("You can't set done status of this issue because " + schedules.size() + " execution is in fail conditions.");
}
}
}
Using below code for add validator programmatically.
WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager();
JiraWorkflow workflow = workflowManager.getWorkflow(projectEvent.getProject().getId(),
JiraUtil.getTestcaseIssueTypeId());
JiraWorkflow draftWorkflow =
workflowManager.createDraftWorkflow(projectEvent.getUser(), workflow.getName());
Collection<ActionDescriptor> actionDescriptors = workflow.getActionsByName("Done");
for(ActionDescriptor actionDescriptor : actionDescriptors){
actionDescriptor.getValidators().add(new IssueValidator(scheduleManager));
}
workflowManager.updateWorkflow(projectEvent.getUser(), draftWorkflow);
Please help me out of this problem.