use of org.activiti.bpmn.model.UserTask in project Activiti by Activiti.
the class FeedbackStepDefinitionConverter method createSelectPeopleUserTask.
protected UserTask createSelectPeopleUserTask(FeedbackStepDefinition feedbackStepDefinition, WorkflowDefinitionConversion conversion, Map<String, BaseElement> processElements) {
UserTask selectPeopleUserTask = new UserTask();
selectPeopleUserTask.setId(conversion.getUniqueNumberedId(ConversionConstants.USER_TASK_ID_PREFIX));
selectPeopleUserTask.setName(getSelectPeopleTaskName());
selectPeopleUserTask.setAssignee(feedbackStepDefinition.getFeedbackInitiator());
addFlowElement(conversion, selectPeopleUserTask, true);
processElements.put(SELECT_PEOPLE_USER_TASK, selectPeopleUserTask);
// TODO: work out form such that it can be used in Activiti Explorer, ie. add correct form properties
// The following is just a a bit of a dummy form property
FormProperty feedbackProvidersProperty = new FormProperty();
feedbackProvidersProperty.setId(VARIABLE_FEEDBACK_PROVIDERS);
feedbackProvidersProperty.setName("Who needs to provide feedback?");
feedbackProvidersProperty.setRequired(true);
// TODO: we need some kind of 'people' property type here
feedbackProvidersProperty.setType("string");
selectPeopleUserTask.setFormProperties(Arrays.asList(feedbackProvidersProperty));
// that injects these variables into the process (instead of having it provided by the end user in a form)
if (feedbackStepDefinition.getFeedbackProviders() != null && !feedbackStepDefinition.getFeedbackProviders().isEmpty()) {
if (selectPeopleUserTask.getTaskListeners() == null) {
selectPeopleUserTask.setTaskListeners(new ArrayList<ActivitiListener>());
}
ActivitiListener taskListener = new ActivitiListener();
taskListener.setEvent("complete");
taskListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS);
taskListener.setImplementation("org.activiti.engine.impl.bpmn.listener.ScriptTaskListener");
FieldExtension languageField = new FieldExtension();
languageField.setFieldName("language");
languageField.setStringValue("JavaScript");
FieldExtension scriptField = new FieldExtension();
scriptField.setFieldName("script");
StringBuilder script = new StringBuilder();
if (JvmUtil.isJDK8()) {
script.append("load(\"nashorn:mozilla_compat.js\");");
}
script.append("importPackage (java.util); var feedbackProviders = new ArrayList();" + System.getProperty("line.separator"));
for (String feedbackProvider : feedbackStepDefinition.getFeedbackProviders()) {
script.append("feedbackProviders.add('" + feedbackProvider + "');" + System.getProperty("line.separator"));
}
script.append("task.getExecution().setVariable('" + VARIABLE_FEEDBACK_PROVIDERS + "', feedbackProviders);" + System.getProperty("line.separator"));
scriptField.setStringValue(script.toString());
taskListener.setFieldExtensions(Arrays.asList(languageField, scriptField));
selectPeopleUserTask.getTaskListeners().add(taskListener);
}
return selectPeopleUserTask;
}
use of org.activiti.bpmn.model.UserTask in project Activiti by Activiti.
the class AlfrescoHumanStepDefinitionConverter method convertStepDefinition.
@Override
public UserTask convertStepDefinition(StepDefinition stepDefinition, WorkflowDefinitionConversion conversion) {
HumanStepDefinition humanStep = (HumanStepDefinition) stepDefinition;
validate(humanStep);
M2Model model = AlfrescoConversionUtil.getContentModel(conversion);
M2Namespace modelNamespace = model.getNamespaces().get(0);
// Let superclass handle BPMN-specific conversion
UserTask userTask = super.convertStepDefinition(stepDefinition, conversion);
// Clear form-properties in the BPMN file, as we use custom form-mapping in Alfresco
userTask.getFormProperties().clear();
userTask.setName(humanStep.getName() != null ? humanStep.getName() : humanStep.getId());
// Create the content model for the task
M2Type type = new M2Type();
model.getTypes().add(type);
type.setName(AlfrescoConversionUtil.getQualifiedName(modelNamespace.getPrefix(), humanStep.getId()));
type.setParentName(AlfrescoConversionConstants.DEFAULT_BASE_FORM_TYPE);
// Update task-key on the task itself
userTask.setFormKey(type.getName());
// Create a form-config for the task
Module shareModule = AlfrescoConversionUtil.getExtension(conversion).getModules().get(0);
Configuration configuration = shareModule.addConfiguration(AlfrescoConversionConstants.EVALUATOR_TASK_TYPE, type.getName());
Form formConfig = configuration.createForm();
// Populate model and form based on FormDefinition
formCreator.createForm(type, formConfig, humanStep.getForm(), conversion);
// Set up property sharing using task-listeners
addPropertySharing(humanStep, conversion, userTask);
// is created
if (humanStep.getAssignmentType() == HumanStepAssignmentType.USER) {
String assignee = humanStep.getAssignment().getAssignee();
if (assignee != null && PropertyReference.isPropertyReference(assignee)) {
PropertyReference reference = PropertyReference.createReference(assignee);
AlfrescoConversionUtil.getPropertyReferences(conversion).add(reference);
userTask.setAssignee(reference.getUsernameReferenceExpression(modelNamespace.getPrefix()));
}
} else if (humanStep.getAssignmentType() == HumanStepAssignmentType.USERS) {
if (humanStep.getAssignment().getCandidateUsers() != null) {
userTask.setCandidateUsers(resolveUserPropertyReferences(humanStep.getAssignment().getCandidateUsers(), modelNamespace.getPrefix(), conversion));
}
} else if (humanStep.getAssignmentType() == HumanStepAssignmentType.GROUPS) {
if (humanStep.getAssignment().getCandidateGroups() != null) {
userTask.setCandidateGroups(resolveGroupPropertyReferences(humanStep.getAssignment().getCandidateGroups(), modelNamespace.getPrefix(), conversion));
}
}
return userTask;
}
use of org.activiti.bpmn.model.UserTask in project Activiti by Activiti.
the class ScopedConverterTest method validateModel.
private void validateModel(BpmnModel model) {
FlowElement flowElement = model.getMainProcess().getFlowElement("outerSubProcess");
assertNotNull(flowElement);
assertTrue(flowElement instanceof SubProcess);
assertEquals("outerSubProcess", flowElement.getId());
SubProcess outerSubProcess = (SubProcess) flowElement;
List<BoundaryEvent> eventList = outerSubProcess.getBoundaryEvents();
assertEquals(1, eventList.size());
BoundaryEvent boundaryEvent = eventList.get(0);
assertEquals("outerBoundaryEvent", boundaryEvent.getId());
FlowElement subElement = outerSubProcess.getFlowElement("innerSubProcess");
assertNotNull(subElement);
assertTrue(subElement instanceof SubProcess);
assertEquals("innerSubProcess", subElement.getId());
SubProcess innerSubProcess = (SubProcess) subElement;
eventList = innerSubProcess.getBoundaryEvents();
assertEquals(1, eventList.size());
boundaryEvent = eventList.get(0);
assertEquals("innerBoundaryEvent", boundaryEvent.getId());
FlowElement taskElement = innerSubProcess.getFlowElement("usertask");
assertNotNull(taskElement);
assertTrue(taskElement instanceof UserTask);
UserTask userTask = (UserTask) taskElement;
assertEquals("usertask", userTask.getId());
eventList = userTask.getBoundaryEvents();
assertEquals(1, eventList.size());
boundaryEvent = eventList.get(0);
assertEquals("taskBoundaryEvent", boundaryEvent.getId());
}
use of org.activiti.bpmn.model.UserTask in project Activiti by Activiti.
the class SubProcessConverterTest method validateModel.
private void validateModel(BpmnModel model) {
FlowElement flowElement = model.getMainProcess().getFlowElement("start1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof StartEvent);
assertEquals("start1", flowElement.getId());
flowElement = model.getMainProcess().getFlowElement("userTask1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof UserTask);
assertEquals("userTask1", flowElement.getId());
UserTask userTask = (UserTask) flowElement;
assertTrue(userTask.getCandidateUsers().size() == 1);
assertTrue(userTask.getCandidateGroups().size() == 1);
assertTrue(userTask.getFormProperties().size() == 2);
flowElement = model.getMainProcess().getFlowElement("subprocess1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof SubProcess);
assertEquals("subprocess1", flowElement.getId());
SubProcess subProcess = (SubProcess) flowElement;
assertTrue(subProcess.getFlowElements().size() == 5);
flowElement = model.getMainProcess().getFlowElement("boundaryEvent1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof BoundaryEvent);
assertEquals("boundaryEvent1", flowElement.getId());
BoundaryEvent boundaryEvent = (BoundaryEvent) flowElement;
assertNotNull(boundaryEvent.getAttachedToRef());
assertEquals("subprocess1", boundaryEvent.getAttachedToRef().getId());
assertEquals(1, boundaryEvent.getEventDefinitions().size());
assertTrue(boundaryEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition);
}
use of org.activiti.bpmn.model.UserTask in project Activiti by Activiti.
the class UserTaskConverterTest method validateModel.
private void validateModel(BpmnModel model) {
FlowElement flowElement = model.getMainProcess().getFlowElement("usertask");
assertNotNull(flowElement);
assertTrue(flowElement instanceof UserTask);
assertEquals("usertask", flowElement.getId());
UserTask userTask = (UserTask) flowElement;
assertEquals("usertask", userTask.getId());
assertEquals("User task", userTask.getName());
assertEquals("testKey", userTask.getFormKey());
assertEquals("40", userTask.getPriority());
assertEquals("2012-11-01", userTask.getDueDate());
assertEquals("defaultCategory", userTask.getCategory());
assertEquals("gonzo", userTask.getOwner());
assertEquals("kermit", userTask.getAssignee());
assertEquals(2, userTask.getCandidateUsers().size());
assertTrue(userTask.getCandidateUsers().contains("kermit"));
assertTrue(userTask.getCandidateUsers().contains("fozzie"));
assertEquals(2, userTask.getCandidateGroups().size());
assertTrue(userTask.getCandidateGroups().contains("management"));
assertTrue(userTask.getCandidateGroups().contains("sales"));
List<FormProperty> formProperties = userTask.getFormProperties();
assertEquals(2, formProperties.size());
FormProperty formProperty = formProperties.get(0);
assertEquals("formId", formProperty.getId());
assertEquals("formName", formProperty.getName());
assertEquals("string", formProperty.getType());
assertEquals("variable", formProperty.getVariable());
assertEquals("${expression}", formProperty.getExpression());
formProperty = formProperties.get(1);
assertEquals("formId2", formProperty.getId());
assertEquals("anotherName", formProperty.getName());
assertEquals("long", formProperty.getType());
assertTrue(StringUtils.isEmpty(formProperty.getVariable()));
assertTrue(StringUtils.isEmpty(formProperty.getExpression()));
List<ActivitiListener> listeners = userTask.getTaskListeners();
assertEquals(3, listeners.size());
ActivitiListener listener = (ActivitiListener) listeners.get(0);
assertTrue(ImplementationType.IMPLEMENTATION_TYPE_CLASS.equals(listener.getImplementationType()));
assertEquals("org.test.TestClass", listener.getImplementation());
assertEquals("create", listener.getEvent());
assertEquals(2, listener.getFieldExtensions().size());
assertEquals("testField", listener.getFieldExtensions().get(0).getFieldName());
assertEquals("test", listener.getFieldExtensions().get(0).getStringValue());
listener = (ActivitiListener) listeners.get(1);
assertTrue(ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equals(listener.getImplementationType()));
assertEquals("${someExpression}", listener.getImplementation());
assertEquals("assignment", listener.getEvent());
listener = (ActivitiListener) listeners.get(2);
assertTrue(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equals(listener.getImplementationType()));
assertEquals("${someDelegateExpression}", listener.getImplementation());
assertEquals("complete", listener.getEvent());
flowElement = model.getMainProcess().getFlowElement("start");
assertTrue(flowElement instanceof StartEvent);
StartEvent startEvent = (StartEvent) flowElement;
assertTrue(startEvent.getOutgoingFlows().size() == 1);
flowElement = model.getMainProcess().getFlowElement("flow1");
assertTrue(flowElement instanceof SequenceFlow);
SequenceFlow flow = (SequenceFlow) flowElement;
assertEquals("flow1", flow.getId());
assertNotNull(flow.getSourceRef());
assertNotNull(flow.getTargetRef());
}
Aggregations