/**
* Copyright (c) 2014 - 2017 Frank Appel
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.workflow.test.util;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.List;
import com.codeaffine.workflow.definition.Activity;
import com.codeaffine.workflow.definition.Decision;
import com.codeaffine.workflow.definition.Matcher;
import com.codeaffine.workflow.definition.Task;
import com.codeaffine.workflow.definition.VariableDeclaration;
import com.codeaffine.workflow.definition.WorkflowDefinition;
import com.codeaffine.workflow.internal.WorkflowDefinitionImpl;
@SuppressWarnings("rawtypes")
public class WorkflowDefinitionHelper {
public static final String START = "start";
public static final String DECISION_ID = "decision";
public static final String OPERATION_ID = "operationId";
public static final String OPERATION_ID_1 = "operationId1";
public static final String OPERATION_ID_2 = "operationId2";
public static final VariableDeclaration<Object> NAME = new VariableDeclaration<Object>( "name", Object.class );
public static final VariableDeclaration<String> VAR_DECL = new VariableDeclaration<String>( "varDecl", String.class );
public static final VariableDeclaration<List> VAR_LIST = new VariableDeclaration<List>( "list", List.class );
public static final String VALUE = "value";
private final WorkflowDefinitionImpl definition;
public static class TestActivity implements Activity {
@Override
public void execute() {}
}
public static class TestTask implements Task {
@Override
public String getDescription() {
return "Task for testing purposes";
}
}
public static class TestDecision implements Decision {
@Override
public String decide() {
return WorkflowDefinitionHelper.OPERATION_ID;
}
}
public static WorkflowDefinition newInstance() {
return new WorkflowDefinitionImpl();
}
public WorkflowDefinitionHelper() {
this.definition = ( WorkflowDefinitionImpl )newInstance();
}
public WorkflowDefinition getDefinition() {
return definition;
}
public void addActivityNode( String nodeId, Class<? extends Activity> type, String successor ) {
definition.addActivity( nodeId, type, successor );
}
private void addTaskNode( String nodeId, Class<? extends Task> type, String successor ) {
definition.addTask( nodeId, type, successor );
}
public void addDecisionNode(
String nodeId, Class<? extends Decision> decision, String successor1, String successor2, String ... successors )
{
definition.addDecision( nodeId, decision, successor1, successor2, successors );
}
public void setStart( String nodeId ) {
definition.setStart( nodeId );
}
public void registerMatcherFor( Object toMatch ) {
Matcher matcher = mock( Matcher.class );
when( Boolean.valueOf( matcher.matches( toMatch ) ) ).thenReturn( Boolean.TRUE );
definition.setMatcher( matcher );
}
public void addStartNodeWithOperation( String successor ) {
addActivityNode( START, TestActivity.class, successor );
setStart( START );
}
public void addStartNodeWithTask( String successor ) {
addTaskNode( START, TestTask.class, successor );
setStart( START );
}
public void addStartNodeWithDecision() {
addDecisionNode( START, TestDecision.class, OPERATION_ID, OPERATION_ID_1, OPERATION_ID_2 );
setStart( START );
}
}