/**
* 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.internal;
import static com.codeaffine.workflow.internal.ArgumentVerification.verifyNotNull;
import static com.codeaffine.workflow.internal.Successors.concat;
import static com.codeaffine.workflow.internal.Successors.toSuccessors;
import java.util.HashMap;
import java.util.Map;
import com.codeaffine.workflow.NodeDefinition;
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.WorkflowDefinition;
public class WorkflowDefinitionImpl implements WorkflowDefinition {
private final Map<String, NodeDefinition> nodes;
private String id;
private String startNodeId;
private Matcher matcher;
public WorkflowDefinitionImpl() {
this.nodes = new HashMap<String, NodeDefinition>();
}
@Override
public void setId( String id ) {
this.id = id;
}
@Override
public String getId() {
return id;
}
@Override
public void addActivity( String nodeId, Class<? extends Activity> activity, String successor ) {
verifyNotNull( nodeId, "nodeId" );
verifyNotNull( activity, "activity" );
nodes.put( nodeId, new NodeDefinition( nodeId, activity, toSuccessors( successor ) ) );
}
@Override
public void addTask( String nodeId, Class<? extends Task> task, String successor ) {
verifyNotNull( nodeId, "nodeId" );
verifyNotNull( task, "task" );
nodes.put( nodeId, new NodeDefinition( nodeId, task, toSuccessors( successor ) ) );
}
@Override
public void addDecision(
String nodeId, Class<? extends Decision> decision, String successor1, String successor2, String ... successors )
{
verifyNotNull( nodeId, "nodeId" );
verifyNotNull( decision, "decision" );
verifyNotNull( successor1, "successor1" );
verifyNotNull( successor2, "successor2" );
verifyNotNull( successors, "successors" );
nodes.put( nodeId, new NodeDefinition( nodeId, decision, concat( successor1, successor2, successors ) ) );
}
NodeDefinition[] getNodeDefinitions() {
return nodes.values().toArray( new NodeDefinition[ nodes.values().size() ] );
}
@Override
public void setStart( String startNodeId ) {
verifyNotNull( startNodeId, "startNodeId" );
this.startNodeId = startNodeId;
}
String getStart() {
return startNodeId;
}
@Override
public void setMatcher( Matcher matcher ) {
this.matcher = matcher;
}
public Matcher getMatcher() {
return matcher;
}
public NodeDefinition getStartNode() {
return getNode( startNodeId );
}
public NodeDefinition getNode( String nodeId ) {
return nodes.get( nodeId );
}
}