in jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/main/java/org/jbpm/tools/maven/ProcessCodeGenerationSupport.java [152:228]
private void generateJavaCode(KogitoWorkflowProcess process) throws IOException {
ProcessMetaData metadata = processCodeGenerator.generate(process);
ModelMetaData modelMetadata = processCodeGenerator.generateModel(process);
ModelMetaData inputMdelMetadata = processCodeGenerator.generateInputModel(process);
ModelMetaData outputModelMetadata = processCodeGenerator.generateOutputModel(process);
// process
CompilationUnit processUnit = metadata.getGeneratedClassModel();
addMembers(metadata, processUnit);
RuleFlowProcess ruleFlowProcess = (RuleFlowProcess) process;
for (String importClass : ruleFlowProcess.getImports()) {
processUnit.addImport(importClass);
}
ClassOrInterfaceDeclaration processType = processUnit.findFirst(ClassOrInterfaceDeclaration.class).get();
ClassOrInterfaceType modelType = StaticJavaParser.parseClassOrInterfaceType(modelMetadata.getModelClassName());
processType.getExtendedTypes(0).setTypeArguments(modelType);
processType.findAll(ObjectCreationExpr.class, e -> "BpmnProcessInstance".equals(e.getType().getNameAsString())).forEach(e -> e.setType(processType.getNameAsString() + "Instance"));
processType.findAll(ObjectCreationExpr.class, e -> "ThisIsJustTemplate".equals(e.getType().getNameAsString())).forEach(e -> e.setType(processType.getNameAsString()));
processType.findAll(ObjectCreationExpr.class, e -> "BpmnVariables".equals(e.getType().getNameAsString())).forEach(e -> e.setType(modelType.getNameAsString()));
processType.findAll(VariableDeclarationExpr.class, e -> "BpmnVariables".equals(e.getVariable(0).getTypeAsString())).forEach(e -> {
if (e.getVariables().isNonEmpty()) {
e.getVariable(0).setType(modelType.getNameWithScope());
}
});
processType.findAll(MethodDeclaration.class, TreeTraversal.DIRECT_CHILDREN).forEach(e -> {
if ("BpmnVariables".equals(e.getTypeAsString())) {
e.setType(modelType);
}
e.getParameterByType("BpmnVariables").ifPresent(t -> t.setType(modelType));
if (!(e.getType() instanceof ClassOrInterfaceType)) {
return;
}
ClassOrInterfaceType returnType = (ClassOrInterfaceType) e.getType();
if ("org.kie.kogito.process.Process".equals(returnType.getNameWithScope())) {
returnType.setTypeArguments(modelType);
} else if ("ProcessInstance".equals(returnType.getNameAsString())) {
returnType.setTypeArguments(modelType);
}
});
processType.findAll(ConstructorDeclaration.class).forEach(e -> {
e.setName(processType.getNameAsString());
});
// process instance
CompilationUnit instance = StaticJavaParser.parse(TemplateHelper.findTemplate("ModelProcessInstance.java"));
instance.setPackageDeclaration(processUnit.getPackageDeclaration().get());
ClassOrInterfaceDeclaration instanceType = instance.findFirst(ClassOrInterfaceDeclaration.class).get();
instanceType.getExtendedTypes(0).setTypeArguments(modelType);
instanceType.findAll(ClassOrInterfaceType.class, e -> "AbstractProcess".equals(e.getNameAsString())).forEach(e -> e.setTypeArguments(modelType));
instanceType.setName(processType.getNameAsString() + "Instance");
instanceType.findAll(ConstructorDeclaration.class).forEach(e -> {
e.setName(instanceType.getNameAsString());
e.getParameterByType("BpmnVariables").ifPresent(t -> t.setType(modelType));
});
instanceType.findAll(MethodDeclaration.class, TreeTraversal.DIRECT_CHILDREN).forEach(e -> {
if ("BpmnVariables".equals(e.getTypeAsString())) {
e.setType(modelType);
}
e.getParameterByType("BpmnVariables").ifPresent(t -> t.setType(modelType));
});
// write to disk
writeCompilationUnit(processUnit);
writeCompilationUnit(instance);
writeCompilationUnit(modelMetadata.generateUnit());
writeCompilationUnit(inputMdelMetadata.generateUnit());
writeCompilationUnit(outputModelMetadata.generateUnit());
for (CompilationUnit handler : metadata.getGeneratedHandlers().values()) {
writeCompilationUnit(handler);
}
}