/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.process.builder;
import static org.junit.Assert.*;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.drools.compiler.builder.impl.KnowledgeBuilderImpl;
import org.drools.compiler.compiler.DialectCompiletimeRegistry;
import org.drools.compiler.compiler.ReturnValueDescr;
import org.drools.compiler.lang.descr.ProcessDescr;
import org.drools.compiler.rule.builder.dialect.java.JavaDialect;
import org.drools.core.common.InternalKnowledgeRuntime;
import org.drools.core.definitions.InternalKnowledgePackage;
import org.drools.core.definitions.impl.KnowledgePackageImpl;
import org.jbpm.process.builder.dialect.ProcessDialectRegistry;
import org.jbpm.process.builder.dialect.java.JavaReturnValueEvaluatorBuilder;
import org.jbpm.process.instance.impl.ReturnValueConstraintEvaluator;
import org.jbpm.ruleflow.instance.RuleFlowProcessInstance;
import org.jbpm.test.util.AbstractBaseTest;
import org.jbpm.workflow.core.impl.WorkflowProcessImpl;
import org.jbpm.workflow.instance.node.SplitInstance;
import org.junit.Test;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.runtime.StatefulKnowledgeSession;
public class JavaReturnValueConstraintEvaluatorBuilderTest extends AbstractBaseTest {
@Test
public void testSimpleReturnValueConstraintEvaluator() throws Exception {
final InternalKnowledgePackage pkg = new KnowledgePackageImpl( "pkg1" );
ProcessDescr processDescr = new ProcessDescr();
processDescr.setClassName( "Process1" );
processDescr.setName( "Process1" );
WorkflowProcessImpl process = new WorkflowProcessImpl();
process.setName( "Process1" );
process.setPackageName( "pkg1" );
ReturnValueDescr descr = new ReturnValueDescr();
descr.setText( "return value;" );
KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl( pkg );
DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry( pkg.getName() ).getDialectCompiletimeRegistry();
JavaDialect javaDialect = (JavaDialect) dialectRegistry.getDialect( "java" );
ProcessBuildContext context = new ProcessBuildContext( pkgBuilder,
pkg,
process,
processDescr,
dialectRegistry,
javaDialect );
pkgBuilder.addPackageFromDrl( new StringReader( "package pkg1;\nglobal Boolean value;" ) );
ReturnValueConstraintEvaluator node = new ReturnValueConstraintEvaluator();
final JavaReturnValueEvaluatorBuilder builder = new JavaReturnValueEvaluatorBuilder();
builder.build( context,
node,
descr,
null );
ProcessDialectRegistry.getDialect(JavaDialect.ID).addProcess( context );
javaDialect.compileAll();
assertEquals( 0, javaDialect.getResults().size() );
final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
List<KnowledgePackage> packages = new ArrayList<KnowledgePackage>();
packages.add( pkgBuilder.getPackage() );
kbase.addKnowledgePackages( packages );
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.setGlobal( "value", true );
RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
processInstance.setKnowledgeRuntime( (InternalKnowledgeRuntime) ksession );
SplitInstance splitInstance = new SplitInstance();
splitInstance.setProcessInstance( processInstance );
assertTrue( node.evaluate( splitInstance,
null,
null ) );
ksession.setGlobal( "value",
false );
assertFalse( node.evaluate( splitInstance,
null,
null ) );
}
}