/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * 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.drools.ruleflow.core; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.drools.process.core.context.exception.ActionExceptionHandler; import org.drools.process.core.context.exception.ExceptionHandler; import org.drools.process.core.context.swimlane.Swimlane; import org.drools.process.core.context.variable.Variable; import org.drools.process.core.datatype.DataType; import org.drools.process.core.validation.ProcessValidationError; import org.drools.ruleflow.core.validation.RuleFlowProcessValidator; import org.drools.workflow.core.impl.DroolsConsequenceAction; public class RuleFlowProcessFactory extends RuleFlowNodeContainerFactory { public static RuleFlowProcessFactory createProcess(String id) { return new RuleFlowProcessFactory(id); } protected RuleFlowProcessFactory(String id) { RuleFlowProcess process = new RuleFlowProcess(); process.setId(id); setNodeContainer(process); } protected RuleFlowProcess getRuleFlowProcess() { return (RuleFlowProcess) getNodeContainer(); } public RuleFlowProcessFactory name(String name) { getRuleFlowProcess().setName(name); return this; } public RuleFlowProcessFactory version(String version) { getRuleFlowProcess().setVersion(version); return this; } public RuleFlowProcessFactory packageName(String packageName) { getRuleFlowProcess().setPackageName(packageName); return this; } public RuleFlowProcessFactory imports(String... imports) { getRuleFlowProcess().setImports(Arrays.asList(imports)); return this; } public RuleFlowProcessFactory functionImports(String... functionImports) { getRuleFlowProcess().setFunctionImports(Arrays.asList(functionImports)); return this; } public RuleFlowProcessFactory globals(Map<String, String> globals) { getRuleFlowProcess().setGlobals(globals); return this; } public RuleFlowProcessFactory global(String name, String type) { Map<String, String> globals = getRuleFlowProcess().getGlobals(); if (globals == null) { globals = new HashMap<String, String>(); getRuleFlowProcess().setGlobals(globals); } globals.put(name, type); return this; } public RuleFlowProcessFactory variable(String name, DataType type) { return variable(name, type, null); } public RuleFlowProcessFactory variable(String name, DataType type, Object value) { Variable variable = new Variable(); variable.setName(name); variable.setType(type); variable.setValue(value); getRuleFlowProcess().getVariableScope().getVariables().add(variable); return this; } public RuleFlowProcessFactory swimlane(String name) { Swimlane swimlane = new Swimlane(); swimlane.setName(name); getRuleFlowProcess().getSwimlaneContext().addSwimlane(swimlane); return this; } public RuleFlowProcessFactory exceptionHandler(String exception, ExceptionHandler exceptionHandler) { getRuleFlowProcess().getExceptionScope().setExceptionHandler(exception, exceptionHandler); return this; } public RuleFlowProcessFactory exceptionHandler(String exception, String dialect, String action) { ActionExceptionHandler exceptionHandler = new ActionExceptionHandler(); exceptionHandler.setAction(new DroolsConsequenceAction(dialect, action)); return exceptionHandler(exception, exceptionHandler); } public RuleFlowProcessFactory validate() { ProcessValidationError[] errors = RuleFlowProcessValidator.getInstance().validateProcess(getRuleFlowProcess()); for (ProcessValidationError error : errors) { System.err.println(error); } if (errors.length > 0) { throw new RuntimeException("Process could not be validated !"); } return this; } public RuleFlowNodeContainerFactory done() { throw new IllegalArgumentException("Already on the top-level."); } public RuleFlowProcess getProcess() { return getRuleFlowProcess(); } }