package org.trianacode.shiwaall.handler; import org.apache.commons.logging.Log; import org.shiwa.desktop.data.description.handler.TransferSignature; import org.shiwa.desktop.data.description.workflow.Author; import org.shiwa.desktop.data.transfer.WorkflowEngineHandler; import org.shiwa.desktop.gui.SHIWADesktop; import org.trianacode.TrianaInstance; import org.trianacode.config.TrianaProperties; import org.trianacode.enactment.logging.Loggers; import org.trianacode.taskgraph.Task; import org.trianacode.taskgraph.TaskGraphException; import org.trianacode.taskgraph.ser.XMLReader; import org.trianacode.taskgraph.ser.XMLWriter; import org.trianacode.taskgraph.tool.Tool; import javax.swing.*; import java.io.*; import java.util.List; import java.util.Set; // TODO: Auto-generated Javadoc /** * Created by IntelliJ IDEA. * User: Ian Harvey * Date: 24/02/2011 * Time: 12:56 * To change this template use File | Settings | File Templates. */ public class TrianaEngineHandler implements WorkflowEngineHandler { /** The dev log. */ private static Log devLog = Loggers.DEV_LOGGER; /** The task. */ private Task task; /** The display image. */ private InputStream displayImage; /** The triana instance. */ private TrianaInstance trianaInstance; /** * Instantiates a new triana engine handler. * * @param task the task * @param trianaInstance the triana instance * @param displayImage the display image */ public TrianaEngineHandler(Task task, TrianaInstance trianaInstance, InputStream displayImage) { this.task = task; this.trianaInstance = trianaInstance; this.displayImage = displayImage; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.WorkflowEngineHandler#getEngineName(java.util.Set) */ @Override public String getEngineName(Set<String> engines) { return "Triana"; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.WorkflowEngineHandler#getEngineVersion() */ @Override public String getEngineVersion() { return (String) task.getProperties().get(TrianaProperties.VERSION); } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.WorkflowEngineHandler#getWorkflowLanguage(java.util.Set) */ @Override public String getWorkflowLanguage(Set<String> languages) { return "triana-taskgraph"; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getSignature() */ @Override public TransferSignature getSignature() { TransferSignature signature = new TransferSignature(); signature.setName(task.getToolName()); setInputPorts(signature); setOutputPorts(signature); return signature; } /** * Sets the output ports. * * @param signature the new output ports */ private void setOutputPorts(TransferSignature signature) { for (int i = 0; i < task.getDataOutputNodeCount(); i++) { String s = task.getDataOutputTypes(i)[0]; signature.addOutput("OutputPort_" + i, ObjectToSchema.getSchemaURIString(s)); } } /** * Sets the input ports. * * @param signature the new input ports */ private void setInputPorts(TransferSignature signature) { for (int i = 0; i < task.getDataInputNodeCount(); i++) { String s = task.getDataInputTypes(i)[0]; signature.addInput("InputPort_" + i, s); } } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getDefinition() */ @Override public InputStream getDefinition() { try { File temp = File.createTempFile("publishedTaskgraphTemp", ".xml"); temp.deleteOnExit(); XMLWriter writer = new XMLWriter(new BufferedWriter(new FileWriter(temp))); writer.writeComponent(task); writer.close(); devLog.debug("Sending taskgraph to ShiwaDesktop."); return new FileInputStream(temp); } catch (Exception e) { devLog.debug("Failed to create temp xml for output to shiwa-desktop : "); e.printStackTrace(); return null; } } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getDefinitionName() */ @Override public String getDefinitionName() { return task.getQualifiedTaskName(); } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.WorkflowEngineHandler#getDisplayImage() */ @Override public InputStream getDisplayImage() { devLog.debug("Sending display image to ShiwaDesktop"); return displayImage; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.WorkflowEngineHandler#getDisplayImageName() */ @Override public String getDisplayImageName() { return task.getQualifiedTaskName() + "-image.jpg"; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getAuthors() */ @Override public List<Author> getAuthors() { return null; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getVersion() */ @Override public String getVersion() { return null; } /* (non-Javadoc) * @see org.shiwa.desktop.data.transfer.TaskHandler#getDescription() */ @Override public String getDescription() { return null; } /** * The main method. * * @param args the arguments * @throws IOException Signals that an I/O exception has occurred. * @throws TaskGraphException the task graph exception */ public static void main(String[] args) throws IOException, TaskGraphException { String wf = args[0]; File f = new File(wf); if (!f.exists()) { devLog.debug("Cannot find workflow file:" + wf); System.exit(1); } String[] engineArgs = new String[args.length - 1]; System.arraycopy(args, 1, engineArgs, 0, args.length - 1); TrianaInstance engine = new TrianaInstance(engineArgs); engine.init(); XMLReader reader = new XMLReader(new FileReader(f)); Tool tool = reader.readComponent(engine.getProperties()); // JPanel jPanel = new SHIWADesktopPanel( // new TrianaEngineHandler((Task) tool, engine, null), // SHIWADesktopPanel.ButtonOption.SHOW_TOOLBAR // ); SHIWADesktop shiwaDesktop = new SHIWADesktop( new TrianaEngineHandler((Task) tool, engine, null), SHIWADesktop.ButtonOption.SHOW_TOOLBAR ); JFrame jFrame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.add(shiwaDesktop.getPanel()); jFrame.pack(); jFrame.setVisible(true); } }