package org.jbpm.bpmn2; import java.util.ArrayList; import java.util.List; import org.drools.compiler.compiler.AnalysisResult; import org.drools.compiler.compiler.ReturnValueDescr; import org.drools.compiler.lang.descr.ActionDescr; import org.drools.compiler.lang.descr.BaseDescr; import org.drools.compiler.rule.builder.PackageBuildContext; import org.jbpm.process.builder.ActionBuilder; import org.jbpm.process.builder.ReturnValueEvaluatorBuilder; import org.jbpm.process.builder.dialect.ProcessDialectRegistry; import org.jbpm.process.builder.dialect.java.JavaActionBuilder; import org.jbpm.process.builder.dialect.java.JavaProcessDialect; import org.jbpm.process.builder.dialect.java.JavaReturnValueEvaluatorBuilder; import org.jbpm.process.core.ContextResolver; import org.jbpm.process.instance.impl.ReturnValueConstraintEvaluator; import org.jbpm.workflow.core.DroolsAction; import org.junit.Test; import org.kie.api.KieBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CompilationTest extends JbpmBpmn2TestCase { private static final Logger logger = LoggerFactory.getLogger(XMLBPMNProcessDumperTest.class); public CompilationTest() { super(false); } @Test public void testReturnValueDescrCreation() throws Exception { TestJavaProcessDialect javaProcessDialect = new TestJavaProcessDialect(); ProcessDialectRegistry.setDialect("java", javaProcessDialect); String filename = "BPMN2-GatewaySplit-SequenceConditions.bpmn2"; KieBase kbase = createKnowledgeBase(filename); assertFalse( "No " + ActionDescr.class.getSimpleName() + " instances caught for testing!", javaProcessDialect.getActionDescrs().isEmpty() ); for( BaseDescr descr : javaProcessDialect.getActionDescrs() ) { assertNotNull( descr.getClass().getSimpleName() +" has a null resource field", descr.getResource() ); } assertFalse( "No " + ReturnValueDescr.class.getSimpleName() + " instances caught for testing!", javaProcessDialect.getReturnValueDescrs().isEmpty() ); for( BaseDescr descr : javaProcessDialect.getReturnValueDescrs() ) { assertNotNull( descr.getClass().getSimpleName() +" has a null resource field", descr.getResource() ); } } private static class TestJavaProcessDialect extends JavaProcessDialect { private ActionBuilder actionBuilder = new TestJavaActionBuilder(); private ReturnValueEvaluatorBuilder returnValueEvaluatorBuilder = new TestJavaReturnValueEvaluatorBuilder(); @Override public ActionBuilder getActionBuilder() { return actionBuilder; } @Override public ReturnValueEvaluatorBuilder getReturnValueEvaluatorBuilder() { return returnValueEvaluatorBuilder; } public List<ActionDescr> getActionDescrs() { return ((TestJavaActionBuilder) actionBuilder).actionDescrs; } public List<ReturnValueDescr> getReturnValueDescrs() { return ((TestJavaReturnValueEvaluatorBuilder) returnValueEvaluatorBuilder).returnValueDescrs; } } private static class TestJavaActionBuilder extends JavaActionBuilder { List<ActionDescr> actionDescrs = new ArrayList<ActionDescr>(); @Override protected void buildAction( PackageBuildContext context, DroolsAction action, ActionDescr actionDescr, ContextResolver contextResolver, String className, AnalysisResult analysis ) { actionDescrs.add(actionDescr); super.buildAction(context, action, actionDescr, contextResolver, className, analysis); } } private static class TestJavaReturnValueEvaluatorBuilder extends JavaReturnValueEvaluatorBuilder { List<ReturnValueDescr> returnValueDescrs = new ArrayList<ReturnValueDescr>(); @Override protected void buildReturnValueEvaluator( PackageBuildContext context, ReturnValueConstraintEvaluator constraintNode, ReturnValueDescr descr, ContextResolver contextResolver, String className, AnalysisResult analysis ) { returnValueDescrs.add(descr); super.buildReturnValueEvaluator(context, constraintNode, descr, contextResolver, className, analysis); } } }