DefaultActivityBehaviorFactory.java 19.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
/* 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.activiti5.engine.impl.bpmn.parser.factory;

import java.util.List;

import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.BusinessRuleTask;
import org.activiti.bpmn.model.CallActivity;
import org.activiti.bpmn.model.CancelEventDefinition;
import org.activiti.bpmn.model.EndEvent;
import org.activiti.bpmn.model.ErrorEventDefinition;
import org.activiti.bpmn.model.EventGateway;
import org.activiti.bpmn.model.ExclusiveGateway;
import org.activiti.bpmn.model.FieldExtension;
import org.activiti.bpmn.model.IOParameter;
import org.activiti.bpmn.model.InclusiveGateway;
import org.activiti.bpmn.model.IntermediateCatchEvent;
import org.activiti.bpmn.model.ManualTask;
import org.activiti.bpmn.model.MapExceptionEntry;
import org.activiti.bpmn.model.ParallelGateway;
import org.activiti.bpmn.model.ReceiveTask;
import org.activiti.bpmn.model.ScriptTask;
import org.activiti.bpmn.model.SendTask;
import org.activiti.bpmn.model.ServiceTask;
import org.activiti.bpmn.model.Signal;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.bpmn.model.Task;
import org.activiti.bpmn.model.ThrowEvent;
import org.activiti.bpmn.model.Transaction;
import org.activiti.bpmn.model.UserTask;
44
import org.activiti.engine.delegate.Expression;
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
import org.activiti5.engine.ActivitiException;
import org.activiti5.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.BusinessRuleTaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.CallActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.CancelBoundaryEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.CancelEndEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ErrorEndEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.EventBasedGatewayActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.EventSubProcessStartEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.InclusiveGatewayActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.IntermediateCatchEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.IntermediateThrowCompensationEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.IntermediateThrowNoneEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.IntermediateThrowSignalEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.MailActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ManualTaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.NoneEndEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.NoneStartEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ParallelGatewayActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ReceiveTaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ScriptTaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ServiceTaskDelegateExpressionActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ServiceTaskExpressionActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.ShellActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.SubProcessActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.TaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.TerminateEndEventActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.TransactionActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti5.engine.impl.bpmn.behavior.WebServiceActivityBehavior;
import org.activiti5.engine.impl.bpmn.data.SimpleDataInputAssociation;
import org.activiti5.engine.impl.bpmn.helper.ClassDelegate;
import org.activiti5.engine.impl.bpmn.parser.CompensateEventDefinition;
import org.activiti5.engine.impl.bpmn.parser.EventSubscriptionDeclaration;
import org.activiti5.engine.impl.bpmn.parser.FieldDeclaration;
import org.activiti5.engine.impl.bpmn.webservice.MessageImplicitDataOutputAssociation;
import org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti5.engine.impl.pvm.delegate.ActivityBehavior;
import org.activiti5.engine.impl.pvm.process.ActivityImpl;
import org.activiti5.engine.impl.scripting.ScriptingEngines;
import org.activiti5.engine.impl.task.TaskDefinition;
import org.apache.commons.lang3.StringUtils;

/**
93 94 95
 * Default implementation of the {@link ActivityBehaviorFactory}. Used when no
 * custom {@link ActivityBehaviorFactory} is injected on the
 * {@link ProcessEngineConfigurationImpl}.
96 97 98 99
 * 
 * @author Joram Barrez
 */
public class DefaultActivityBehaviorFactory extends AbstractBehaviorFactory implements ActivityBehaviorFactory {
100
  
101 102 103 104 105 106
  // Start event
  public final static String EXCEPTION_MAP_FIELD = "mapExceptions";

  public NoneStartEventActivityBehavior createNoneStartEventActivityBehavior(StartEvent startEvent) {
    return new NoneStartEventActivityBehavior();
  }
T
Tijs Rademakers 已提交
107

108 109 110
  public EventSubProcessStartEventActivityBehavior createEventSubProcessStartEventActivityBehavior(StartEvent startEvent, String activityId) {
    return new EventSubProcessStartEventActivityBehavior(activityId);
  }
111
  
112
  // Task
113
  
114 115 116
  public TaskActivityBehavior createTaskActivityBehavior(Task task) {
    return new TaskActivityBehavior();
  }
117
  
118 119 120
  public ManualTaskActivityBehavior createManualTaskActivityBehavior(ManualTask manualTask) {
    return new ManualTaskActivityBehavior();
  }
121
  
122 123 124
  public ReceiveTaskActivityBehavior createReceiveTaskActivityBehavior(ReceiveTask receiveTask) {
    return new ReceiveTaskActivityBehavior();
  }
125
  
126 127 128 129 130
  public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask, TaskDefinition taskDefinition) {
    return new UserTaskActivityBehavior(taskDefinition);
  }

  // Service task
131
  
132 133 134 135 136 137 138 139 140
  public ClassDelegate createClassDelegateServiceTask(ServiceTask serviceTask) {
    Expression skipExpression;
    if (StringUtils.isNotEmpty(serviceTask.getSkipExpression())) {
      skipExpression = expressionManager.createExpression(serviceTask.getSkipExpression());
    } else {
      skipExpression = null;
    }
    return new ClassDelegate(serviceTask.getImplementation(), createFieldDeclarations(serviceTask.getFieldExtensions()), skipExpression, serviceTask.getMapExceptions());
  }
141
  
142 143 144 145 146 147 148 149 150 151
  public ServiceTaskDelegateExpressionActivityBehavior createServiceTaskDelegateExpressionActivityBehavior(ServiceTask serviceTask) {
    Expression delegateExpression = expressionManager.createExpression(serviceTask.getImplementation());
    Expression skipExpression;
    if (StringUtils.isNotEmpty(serviceTask.getSkipExpression())) {
      skipExpression = expressionManager.createExpression(serviceTask.getSkipExpression());
    } else {
      skipExpression = null;
    }
    return new ServiceTaskDelegateExpressionActivityBehavior(delegateExpression, skipExpression, createFieldDeclarations(serviceTask.getFieldExtensions()));
  }
152
  
153 154 155 156 157 158 159 160 161 162
  public ServiceTaskExpressionActivityBehavior createServiceTaskExpressionActivityBehavior(ServiceTask serviceTask) {
    Expression expression = expressionManager.createExpression(serviceTask.getImplementation());
    Expression skipExpression;
    if (StringUtils.isNotEmpty(serviceTask.getSkipExpression())) {
      skipExpression = expressionManager.createExpression(serviceTask.getSkipExpression());
    } else {
      skipExpression = null;
    }
    return new ServiceTaskExpressionActivityBehavior(expression, skipExpression, serviceTask.getResultVariableName());
  }
163
  
164 165 166
  public WebServiceActivityBehavior createWebServiceActivityBehavior(ServiceTask serviceTask) {
    return new WebServiceActivityBehavior();
  }
167
  
168 169 170
  public WebServiceActivityBehavior createWebServiceActivityBehavior(SendTask sendTask) {
    return new WebServiceActivityBehavior();
  }
171
  
172 173 174
  public MailActivityBehavior createMailActivityBehavior(ServiceTask serviceTask) {
    return createMailActivityBehavior(serviceTask.getId(), serviceTask.getFieldExtensions());
  }
175
  
176
  public MailActivityBehavior createMailActivityBehavior(SendTask sendTask) {
177
    return createMailActivityBehavior(sendTask.getId(), sendTask.getFieldExtensions());  
178
  }
179
  
180 181 182 183
  protected MailActivityBehavior createMailActivityBehavior(String taskId, List<FieldExtension> fields) {
    List<FieldDeclaration> fieldDeclarations = createFieldDeclarations(fields);
    return (MailActivityBehavior) ClassDelegate.instantiateDelegate(MailActivityBehavior.class, fieldDeclarations);
  }
184 185
  
  // We do not want a hard dependency on Mule, hence we return ActivityBehavior and instantiate 
186 187 188 189
  // the delegate instance using a string instead of the Class itself.
  public ActivityBehavior createMuleActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
    return createMuleActivityBehavior(serviceTask, serviceTask.getFieldExtensions(), bpmnModel);
  }
190
  
191 192 193
  public ActivityBehavior createMuleActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
    return createMuleActivityBehavior(sendTask, sendTask.getFieldExtensions(), bpmnModel);
  }
194
  
195 196
  protected ActivityBehavior createMuleActivityBehavior(Task task, List<FieldExtension> fieldExtensions, BpmnModel bpmnModel) {
    try {
197 198
      
      Class< ? > theClass = Class.forName("org.activiti.mule.MuleSendActivitiBehavior");
199 200
      List<FieldDeclaration> fieldDeclarations = createFieldDeclarations(fieldExtensions);
      return (ActivityBehavior) ClassDelegate.instantiateDelegate(theClass, fieldDeclarations);
201
      
202
    } catch (ClassNotFoundException e) {
203
    	throw new ActivitiException("Could not find org.activiti.mule.MuleSendActivitiBehavior: ", e);
204 205
    }
  }
206 207
  
  // We do not want a hard dependency on Camel, hence we return ActivityBehavior and instantiate 
208 209 210 211
  // the delegate instance using a string instead of the Class itself.
  public ActivityBehavior createCamelActivityBehavior(ServiceTask serviceTask, BpmnModel bpmnModel) {
    return createCamelActivityBehavior(serviceTask, serviceTask.getFieldExtensions(), bpmnModel);
  }
212
 
213 214 215
  public ActivityBehavior createCamelActivityBehavior(SendTask sendTask, BpmnModel bpmnModel) {
    return createCamelActivityBehavior(sendTask, sendTask.getFieldExtensions(), bpmnModel);
  }
216
 
217 218
  protected ActivityBehavior createCamelActivityBehavior(Task task, List<FieldExtension> fieldExtensions, BpmnModel bpmnModel) {
    try {
219
      Class< ? > theClass = null;
220 221 222 223 224 225
      FieldExtension behaviorExtension = null;
      for (FieldExtension fieldExtension : fieldExtensions) {
        if ("camelBehaviorClass".equals(fieldExtension.getFieldName()) && StringUtils.isNotEmpty(fieldExtension.getStringValue())) {
          theClass = Class.forName(fieldExtension.getStringValue());
          behaviorExtension = fieldExtension;
          break;
T
Tijs Rademakers 已提交
226
        }
227
      }
228
      
229 230 231
      if (behaviorExtension != null) {
        fieldExtensions.remove(behaviorExtension);
      }
232
      
233 234 235 236
      if (theClass == null) {
        // Default Camel behavior class
        theClass = Class.forName("org.activiti.camel.impl.CamelBehaviorDefaultImpl");
      }
237
      
238 239 240
      List<FieldDeclaration> fieldDeclarations = createFieldDeclarations(fieldExtensions);
      addExceptionMapAsFieldDeclaraion(fieldDeclarations, task.getMapExceptions());
      return (ActivityBehavior) ClassDelegate.instantiateDelegate(theClass, fieldDeclarations);
241
     
242
    } catch (ClassNotFoundException e) {
243
    	throw new ActivitiException("Could not find org.activiti.camel.CamelBehavior: ", e);
T
Tijs Rademakers 已提交
244
    }
245
  }
246
  
247 248 249
  private void addExceptionMapAsFieldDeclaraion(List<FieldDeclaration> fieldDeclarations, List<MapExceptionEntry> mapExceptions) {
    FieldDeclaration exceptionMapsFieldDeclaration = new FieldDeclaration(EXCEPTION_MAP_FIELD, mapExceptions.getClass().toString(), mapExceptions);
    fieldDeclarations.add(exceptionMapsFieldDeclaration);
250
    
251
  }
T
Tijs Rademakers 已提交
252

253 254 255 256
  public ShellActivityBehavior createShellActivityBehavior(ServiceTask serviceTask) {
    List<FieldDeclaration> fieldDeclarations = createFieldDeclarations(serviceTask.getFieldExtensions());
    return (ShellActivityBehavior) ClassDelegate.instantiateDelegate(ShellActivityBehavior.class, fieldDeclarations);
  }
257
  
258 259
  public BusinessRuleTaskActivityBehavior createBusinessRuleTaskActivityBehavior(BusinessRuleTask businessRuleTask) {
    BusinessRuleTaskActivityBehavior ruleActivity = null;
260 261 262 263 264 265 266 267 268 269 270 271
	if(StringUtils.isNotEmpty(businessRuleTask.getClassName())){
		try {
			Class<?> clazz=Class.forName(businessRuleTask.getClassName());
			ruleActivity=(BusinessRuleTaskActivityBehavior)clazz.newInstance();
		} catch (Exception e) {
			throw new ActivitiException(
					"Could not instiate businessRuleTask class: ", e);
		}
	}else{
		ruleActivity=new BusinessRuleTaskActivityBehavior();
	}
	
272 273
    for (String ruleVariableInputObject : businessRuleTask.getInputVariables()) {
      ruleActivity.addRuleVariableInputIdExpression(expressionManager.createExpression(ruleVariableInputObject.trim()));
T
Tijs Rademakers 已提交
274 275
    }

276 277
    for (String rule : businessRuleTask.getRuleNames()) {
      ruleActivity.addRuleIdExpression(expressionManager.createExpression(rule.trim()));
T
Tijs Rademakers 已提交
278 279
    }

280
    ruleActivity.setExclude(businessRuleTask.isExclude());
T
Tijs Rademakers 已提交
281

282 283 284
    if (businessRuleTask.getResultVariableName() != null && businessRuleTask.getResultVariableName().length() > 0) {
      ruleActivity.setResultVariable(businessRuleTask.getResultVariableName());
    } else {
285
      ruleActivity.setResultVariable("org.activiti5.engine.rules.OUTPUT");
T
Tijs Rademakers 已提交
286
    }
287
    
288 289
    return ruleActivity;
  }
290
  
291
  // Script task
T
Tijs Rademakers 已提交
292

293 294 295 296
  public ScriptTaskActivityBehavior createScriptTaskActivityBehavior(ScriptTask scriptTask) {
    String language = scriptTask.getScriptFormat();
    if (language == null) {
      language = ScriptingEngines.DEFAULT_SCRIPTING_LANGUAGE;
T
Tijs Rademakers 已提交
297
    }
298 299
    return new ScriptTaskActivityBehavior(scriptTask.getScript(), language, scriptTask.getResultVariable(), scriptTask.isAutoStoreVariables());
  }
T
Tijs Rademakers 已提交
300

301
  // Gateways
T
Tijs Rademakers 已提交
302

303 304 305
  public ExclusiveGatewayActivityBehavior createExclusiveGatewayActivityBehavior(ExclusiveGateway exclusiveGateway) {
    return new ExclusiveGatewayActivityBehavior();
  }
T
Tijs Rademakers 已提交
306

307 308 309
  public ParallelGatewayActivityBehavior createParallelGatewayActivityBehavior(ParallelGateway parallelGateway) {
    return new ParallelGatewayActivityBehavior();
  }
T
Tijs Rademakers 已提交
310

311 312 313
  public InclusiveGatewayActivityBehavior createInclusiveGatewayActivityBehavior(InclusiveGateway inclusiveGateway) {
    return new InclusiveGatewayActivityBehavior();
  }
T
Tijs Rademakers 已提交
314

315 316 317
  public EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior(EventGateway eventGateway) {
    return new EventBasedGatewayActivityBehavior();
  }
T
Tijs Rademakers 已提交
318

319
  // Multi Instance
T
Tijs Rademakers 已提交
320

321 322 323
  public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
    return new SequentialMultiInstanceBehavior(activity, innerActivityBehavior);
  }
T
Tijs Rademakers 已提交
324

325 326 327
  public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
    return new ParallelMultiInstanceBehavior(activity, innerActivityBehavior);
  }
328
  
329
  // Subprocess
330
  
331 332 333
  public SubProcessActivityBehavior createSubprocActivityBehavior(SubProcess subProcess) {
    return new SubProcessActivityBehavior();
  }
334
  
335
  // Call activity
336
  
337 338
  public CallActivityBehavior createCallActivityBehavior(CallActivity callActivity) {
    String expressionRegex = "\\$+\\{+.+\\}";
339
    
340 341 342 343 344
    CallActivityBehavior callActivityBehaviour = null;
    if (StringUtils.isNotEmpty(callActivity.getCalledElement()) && callActivity.getCalledElement().matches(expressionRegex)) {
      callActivityBehaviour = new CallActivityBehavior(expressionManager.createExpression(callActivity.getCalledElement()), callActivity.getMapExceptions());
    } else {
      callActivityBehaviour = new CallActivityBehavior(callActivity.getCalledElement(), callActivity.getMapExceptions());
T
Tijs Rademakers 已提交
345 346
    }

347 348 349 350 351 352 353
    for (IOParameter ioParameter : callActivity.getInParameters()) {
      if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) {
        Expression expression = expressionManager.createExpression(ioParameter.getSourceExpression().trim());
        callActivityBehaviour.addDataInputAssociation(new SimpleDataInputAssociation(expression, ioParameter.getTarget()));
      } else {
        callActivityBehaviour.addDataInputAssociation(new SimpleDataInputAssociation(ioParameter.getSource(), ioParameter.getTarget()));
      }
T
Tijs Rademakers 已提交
354
    }
355
    
356 357 358 359 360 361 362
    for (IOParameter ioParameter : callActivity.getOutParameters()) {
      if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) {
        Expression expression = expressionManager.createExpression(ioParameter.getSourceExpression().trim());
        callActivityBehaviour.addDataOutputAssociation(new MessageImplicitDataOutputAssociation(ioParameter.getTarget(), expression));
      } else {
        callActivityBehaviour.addDataOutputAssociation(new MessageImplicitDataOutputAssociation(ioParameter.getTarget(), ioParameter.getSource()));
      }
T
Tijs Rademakers 已提交
363
    }
364
    
365 366
    return callActivityBehaviour;
  }
367
  
368
  // Transaction
369
  
370 371 372
  public TransactionActivityBehavior createTransactionActivityBehavior(Transaction transaction) {
    return new TransactionActivityBehavior();
  }
T
Tijs Rademakers 已提交
373

374
  // Intermediate Events
375
  
376 377 378
  public IntermediateCatchEventActivityBehavior createIntermediateCatchEventActivityBehavior(IntermediateCatchEvent intermediateCatchEvent) {
    return new IntermediateCatchEventActivityBehavior();
  }
T
Tijs Rademakers 已提交
379

380 381 382
  public IntermediateThrowNoneEventActivityBehavior createIntermediateThrowNoneEventActivityBehavior(ThrowEvent throwEvent) {
    return new IntermediateThrowNoneEventActivityBehavior();
  }
T
Tijs Rademakers 已提交
383

384 385
  public IntermediateThrowSignalEventActivityBehavior createIntermediateThrowSignalEventActivityBehavior(ThrowEvent throwEvent,
          Signal signal, EventSubscriptionDeclaration eventSubscriptionDeclaration) {
386 387
    return new IntermediateThrowSignalEventActivityBehavior(throwEvent, signal, eventSubscriptionDeclaration);
  }
T
Tijs Rademakers 已提交
388

389 390
  public IntermediateThrowCompensationEventActivityBehavior createIntermediateThrowCompensationEventActivityBehavior(ThrowEvent throwEvent,
          CompensateEventDefinition compensateEventDefinition) {
391 392
    return new IntermediateThrowCompensationEventActivityBehavior(compensateEventDefinition);
  }
393
  
394
  // End events
395
  
396 397 398
  public NoneEndEventActivityBehavior createNoneEndEventActivityBehavior(EndEvent endEvent) {
    return new NoneEndEventActivityBehavior();
  }
399
  
400 401 402
  public ErrorEndEventActivityBehavior createErrorEndEventActivityBehavior(EndEvent endEvent, ErrorEventDefinition errorEventDefinition) {
    return new ErrorEndEventActivityBehavior(errorEventDefinition.getErrorCode());
  }
403
  
404 405 406
  public CancelEndEventActivityBehavior createCancelEndEventActivityBehavior(EndEvent endEvent) {
    return new CancelEndEventActivityBehavior();
  }
407
  
408
  public TerminateEndEventActivityBehavior createTerminateEndEventActivityBehavior(EndEvent endEvent) {
409
    return new TerminateEndEventActivityBehavior(endEvent);
410
  }
T
Tijs Rademakers 已提交
411

412
  // Boundary Events
413
  
414 415 416
  public BoundaryEventActivityBehavior createBoundaryEventActivityBehavior(BoundaryEvent boundaryEvent, boolean interrupting, ActivityImpl activity) {
    return new BoundaryEventActivityBehavior(interrupting, activity.getId());
  }
T
Tijs Rademakers 已提交
417

418 419 420
  public CancelBoundaryEventActivityBehavior createCancelBoundaryEventActivityBehavior(CancelEventDefinition cancelEventDefinition) {
    return new CancelBoundaryEventActivityBehavior();
  }
421
  
422
}