in jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/descriptors/AbstractServiceTaskDescriptor.java [127:216]
protected final ClassOrInterfaceDeclaration classDeclaration() {
String unqualifiedName = StaticJavaParser.parseName(getName()).removeQualifier().asString();
ClassOrInterfaceDeclaration cls = new ClassOrInterfaceDeclaration()
.setName(unqualifiedName)
.setModifiers(Modifier.Keyword.PUBLIC)
.addExtendedType(DefaultKogitoWorkItemHandler.class.getCanonicalName());
ClassOrInterfaceType serviceType = new ClassOrInterfaceType(null, interfaceName);
String serviceName = "service";
FieldDeclaration serviceField = new FieldDeclaration()
.addVariable(new VariableDeclarator(serviceType, serviceName));
cls.addMember(serviceField);
cls
.addConstructor(Modifier.Keyword.PUBLIC)
.setBody(
new BlockStmt()
.addStatement(new MethodCallExpr("this", new ObjectCreationExpr().setType(serviceType))));
cls
.addConstructor(Modifier.Keyword.PUBLIC)
.addParameter(serviceType, serviceName)
.setBody(
new BlockStmt()
.addStatement(
new AssignExpr(
new FieldAccessExpr(
new ThisExpr(),
serviceName),
new NameExpr(serviceName),
AssignExpr.Operator.ASSIGN)));
Type workItemTransitionType = parseClassOrInterfaceType(WorkItemTransition.class.getName());
ClassOrInterfaceType optionalClass = parseClassOrInterfaceType(Optional.class.getName()).setTypeArguments(workItemTransitionType);
// executeWorkItem method
BlockStmt executeWorkItemBody = new BlockStmt();
MethodCallExpr callService = new MethodCallExpr(new NameExpr("service"), operationName);
this.handleParametersForServiceCall(executeWorkItemBody, callService);
// execute work item handler
getWorkItemOutput(callService).forEach(executeWorkItemBody::addStatement);
Expression completeExpression = new ThisExpr();
completeExpression = new FieldAccessExpr(completeExpression, "workItemLifeCycle");
NodeList<Expression> arguments = new NodeList<>();
arguments.add(new StringLiteralExpr("complete"));
arguments.add(new MethodCallExpr(new NameExpr("workItem"), "getPhaseStatus"));
arguments.add(new NameExpr(RESULT_NAME));
completeExpression = new MethodCallExpr(completeExpression, "newTransition", arguments);
Statement completeWorkItem = new ReturnStmt(new MethodCallExpr(new NameExpr(Optional.class.getName()), "of", NodeList.nodeList(completeExpression)));
executeWorkItemBody.addStatement(completeWorkItem);
executeWorkItemBody = tryStmt(executeWorkItemBody, getCompleteWorkItemExceptionTypes());
MethodDeclaration executeWorkItem = new MethodDeclaration()
.setModifiers(Modifier.Keyword.PUBLIC)
.setType(optionalClass)
.setName("activateWorkItemHandler")
.setBody(executeWorkItemBody)
.addParameter(KogitoWorkItemManager.class.getCanonicalName(), "workItemManager")
.addParameter(KogitoWorkItemHandler.class.getCanonicalName(), "workItemHandler")
.addParameter(KogitoWorkItem.class.getCanonicalName(), "workItem")
.addParameter(WorkItemTransition.class.getCanonicalName(), "transition");
// abortWorkItem method
BlockStmt abortWorkItemBody = new BlockStmt();
MethodDeclaration abortWorkItem = new MethodDeclaration()
.setModifiers(Modifier.Keyword.PUBLIC)
.setType(optionalClass)
.setName("abortWorkItemHandler")
.setBody(abortWorkItemBody)
.addParameter(KogitoWorkItemManager.class.getCanonicalName(), "workItemManager")
.addParameter(KogitoWorkItemHandler.class.getCanonicalName(), "workItemHandler")
.addParameter(KogitoWorkItem.class.getCanonicalName(), "workItem")
.addParameter(WorkItemTransition.class.getCanonicalName(), "transition");
abortWorkItemBody.addStatement(new ReturnStmt(new MethodCallExpr(new NameExpr(Optional.class.getName()), "empty")));
// getName method
MethodDeclaration getName = new MethodDeclaration()
.setModifiers(Modifier.Keyword.PUBLIC)
.setType(String.class)
.setName("getName")
.setBody(new BlockStmt().addStatement(new ReturnStmt(new StringLiteralExpr(getName()))));
cls.addMember(executeWorkItem)
.addMember(abortWorkItem)
.addMember(getName);
return cls;
}