/*
* SimpleWorkflowEngineWithIO.java
*
* Version 1.0 Jan 10, 2009
*
* Copyright notice
*
* Brief description
*
* (c) 2009 by dbreuer
*/
package de.fhkoeln.cosima.workflow;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import de.fhkoeln.cosima.components.AbstractComponent;
import de.fhkoeln.cosima.services.IODescriptor;
import de.fhkoeln.cosima.workflow.WorkflowElement.Input;
/**
* A simple implementation of a {@link WorkflowEngine} which uses {@link IODescriptor} objects.
* This is only used for demonstration.
*
* @author Dirk Breuer
* @version 1.0 Jan 19, 2009
*
*/
public class SimpleWorkflowEngineWithIO extends WorkflowEngine {
public SimpleWorkflowEngineWithIO() {
setWorkflowStore(new HashMap<String, String>());
}
@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()) {
IODescriptor input = new IODescriptor();
if (element.needsInput()) {
for (Input elementInput : element.getInput()) {
if (elementInput.isExternal())
input.add(elementInput.getData());
if (elementInput.isInternal())
input.add(getWorkflowStore().get(elementInput.getUri()));
}
}
Class<AbstractComponent> elementClass = (Class<AbstractComponent>) Class.forName(element.getUri());
AbstractComponent elementComponent = elementClass.newInstance();
elementComponent.setInput(input);
IODescriptor output = elementComponent.execute();
if (output != null)
getWorkflowStore().put(element.getOutputUri(), output.first());
}
}
}
}