/*
* SimpleWorkflowEngine.java
*
* Version 1.0 Jan 10, 2009
*
* Copyright notice
*
* Brief description
*
* (c) 2009 by dbreuer
*/
package de.fhkoeln.cosima.workflow;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import de.fhkoeln.cosima.codesamples.AbstractComponent;
import de.fhkoeln.cosima.workflow.WorkflowElement.Input;
/**
* A simple implementation of a {@link WorkflowEngine}. This is only used for demonstration.
*
* @author Dirk Breuer
* @version 1.0 Jan 19, 2009
*
*/
public class SimpleWorkflowEngine extends WorkflowEngine {
public SimpleWorkflowEngine() {
setWorkflowStore(new HashMap<String, String>());
}
@Override
@SuppressWarnings("unchecked")
public void execute() throws Exception {
// iterate through the workflow definition elements
Iterator<Set<WorkflowElement>> elementsIterator = getWorkflowDefinition().elementsIterator();
while (elementsIterator.hasNext()) {
for (WorkflowElement element : elementsIterator.next()) {
List<String> inputList = new ArrayList<String>();
if (element.needsInput()) {
for (Input elementInput : element.getInput()) {
if (elementInput.isExternal())
inputList.add(elementInput.getData());
if (elementInput.isInternal())
inputList.add(getWorkflowStore().get(elementInput.getUri()));
}
}
Class<AbstractComponent> elementClass = (Class<AbstractComponent>) Class.forName(element.getUri());
AbstractComponent elementComponent = elementClass.newInstance();
elementComponent.setInput(inputList.toArray(new String[] {}));
String output = elementComponent.execute();
if (output != null)
getWorkflowStore().put(element.getOutputUri(), output);
}
}
}
}