package org.trianacode.shiwaall.iwir.logic;
import org.trianacode.gui.main.organize.DaxOrganize;
import org.trianacode.taskgraph.*;
import org.trianacode.taskgraph.imp.ToolImp;
import org.trianacode.taskgraph.proxy.ProxyFactory;
import org.trianacode.taskgraph.proxy.java.JavaProxy;
import java.util.ArrayList;
import java.util.List;
// TODO: Auto-generated Javadoc
/**
* Created by IntelliJ IDEA.
* User: Ian Harvey
* Date: 13/07/2011
* Time: 14:14
* To change this template use File | Settings | File Templates.
*/
public class RuntimeTaskCreation extends Unit {
/* (non-Javadoc)
* @see org.trianacode.taskgraph.Unit#process()
*/
@Override
public void process() throws Exception {
ArrayList<Object> allInputs = new ArrayList<Object>();
System.out.println("Connected nodes : " + this.getInputNodeCount());
for (int i = 0; i < this.getInputNodeCount(); i++) {
allInputs.add(this.getInputAtNode(i));
}
for (Object inputData : allInputs) {
if (inputData instanceof List) {
System.out.println("\nRuntime task creator will attempt to add : " + ((List) inputData).size());
for (Object inputFromList : (List) inputData) {
EmptyStringCreator unit = new EmptyStringCreator();
Task addedTask = addAndConnectUnit(unit, inputFromList);
}
} else {
EmptyStringCreator unit = new EmptyStringCreator();
Task addedTask = addAndConnectUnit(unit, inputData);
}
}
// output("Some text");
}
/**
* Adds the and connect unit.
*
* @param unit the unit
* @param data the data
* @return the task
*/
private Task addAndConnectUnit(Unit unit, Object data) {
TaskGraph parent = this.getTask().getParent();
org.trianacode.taskgraph.tool.Tool tool = initTool(unit);
Task newTask = null;
try {
newTask = parent.createTask(tool);
Node outputNode = this.getTask().addDataOutputNode();
System.out.println("Added node : " + outputNode.getNodeIndex());
Node inputNode = newTask.addDataInputNode();
Cable cable = parent.connect(outputNode, inputNode);
if (cable.isConnected() && data != null) {
System.out.println("Output " + data.toString() + " to node : " + outputNode.getNodeIndex());
outputAtNode(outputNode.getNodeIndex(), data);
}
} catch (TaskException e) {
e.printStackTrace();
} catch (CableException e) {
System.out.println("Failed to add cable");
e.printStackTrace();
}
DaxOrganize daxOrganize = new DaxOrganize(parent);
return newTask;
}
/**
* Inits the tool.
*
* @param unit the unit
* @return the tool imp
*/
private ToolImp initTool(Unit unit) {
ToolImp tool = null;
ProxyFactory.initProxyFactory();
try {
tool = new ToolImp(this.getTask().getProperties());
tool.setProxy(new JavaProxy(unit, unit.getClass().getSimpleName(), unit.getClass().getPackage().getName()));
tool.setToolName(unit.getClass().getSimpleName());
tool.setToolPackage(unit.getClass().getPackage().getName());
// tool.setDataInputNodeCount(taskHolder.getIWIRTask().getInputPorts().size());
// tool.setDataOutputNodeCount(taskHolder.getIWIRTask().getOutputPorts().size());
} catch (Exception e) {
System.out.println("Failed to initialise tool from Unit.");
e.printStackTrace();
}
return tool;
}
/* (non-Javadoc)
* @see org.trianacode.taskgraph.Unit#getInputTypes()
*/
@Override
public String[] getInputTypes() {
return new String[]{"java.lang.Object"};
}
/* (non-Javadoc)
* @see org.trianacode.taskgraph.Unit#getOutputTypes()
*/
@Override
public String[] getOutputTypes() {
return new String[]{"java.lang.Object"};
}
}