package org.trianacode.shiwaall.handler;
import org.shiwa.desktop.data.transfer.WorkflowEngineHandler;
import org.shiwa.desktop.gui.SHIWADesktop;
import org.shiwa.desktop.gui.util.InterfaceUtils;
import org.trianacode.TrianaInstance;
import org.trianacode.enactment.AddonUtils;
import org.trianacode.enactment.addon.ConversionAddon;
import org.trianacode.gui.action.ActionDisplayOptions;
import org.trianacode.gui.action.files.ImageAction;
import org.trianacode.gui.hci.ApplicationFrame;
import org.trianacode.gui.hci.GUIEnv;
import org.trianacode.gui.panels.DisplayDialog;
import org.trianacode.taskgraph.TaskGraph;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Set;
// TODO: Auto-generated Javadoc
/**
* Created by IntelliJ IDEA.
* User: Ian Harvey
* Date: 22/02/2011
* Time: 14:36
* To change this template use File | Settings | File Templates.
*/
public class PublishWorkflow extends AbstractAction implements ActionDisplayOptions {
/**
* Instantiates a new publish workflow.
*/
public PublishWorkflow() {
this(DISPLAY_BOTH);
}
/**
* Instantiates a new publish workflow.
*
* @param displayOption the display option
*/
public PublishWorkflow(int displayOption) {
putValue(SHORT_DESCRIPTION, "Publish");
putValue(NAME, "Publish");
if ((displayOption == DISPLAY_ICON) || (displayOption == DISPLAY_BOTH)) {
// putValue(SMALL_ICON, GUIEnv.getIcon("upload_small.png"));
// InterfaceUtils.initImages();
Icon icon = InterfaceUtils.X16_ICON;
putValue(SMALL_ICON, icon);
}
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent actionEvent) {
final ApplicationFrame frame = GUIEnv.getApplicationFrame();
final TaskGraph tg = frame.getSelectedTaskgraph();
WorkflowEngineHandler handler = buildHandler(tg);
if (handler != null) {
System.out.println("Handler built " + handler.getClass().getCanonicalName());
publish(handler, frame.getEngine());
}
}
/**
* Builds the handler.
*
* @param tg the tg
* @return the workflow engine handler
*/
public static WorkflowEngineHandler buildHandler(TaskGraph tg) {
System.out.println("Publishing Workflow");
if (tg == null || tg.getTasks(false).length == 0) {
JOptionPane.showMessageDialog(null, "No taskgraph selected," +
" or currently selected taskgraph has no tasks");
return null;
} else {
System.out.println(tg.getQualifiedTaskName());
ArrayList<ConversionAddon> converters = new ArrayList<ConversionAddon>();
Set<Object> addons = AddonUtils.getCLIaddons(GUIEnv.getApplicationFrame().getEngine());
for (Object addon : addons) {
if (addon instanceof ConversionAddon) {
converters.add((ConversionAddon) addon);
}
}
Object[] choices = new Object[converters.size() + 1];
choices[0] = "taskgraph";
for (int i = 0; i < converters.size(); i++) {
ConversionAddon addon = converters.get(i);
// choices[i] = addon.getShortOption();
choices[i + 1] = addon;
}
Object addon = JOptionPane.showInputDialog(GUIEnv.getApplicationFrame(),
"Please select the format for the workflow definition to be submitted in.",
"Select Definition Type",
JOptionPane.PLAIN_MESSAGE,
null,
choices,
choices[0]);
if (addon != null) {
InputStream displayStream = getImageStream();
// TransferSignature signature = new TransferSignature();
if (!(addon instanceof ConversionAddon)) {
return new TrianaEngineHandler(tg, tg.getProperties().getEngine(), displayStream);
} else if (addon.toString().equals("IWIR")) {
return new TrianaIWIRHandler(tg, displayStream);
} else {
// InputStream definitionStream = ((ConversionAddon) addon).toolToWorkflowFileInputStream(tg);
// GenericWorkflowHandler handler = new GenericWorkflowHandler(definitionStream, displayStream);
// handler.setSignature(signature);
// handler.setLanguage(addon.toString());
// handler.setDefinitionName(tg.getToolName());
// return handler;
System.out.printf("Handler not found");
return null;
}
} else {
return null;
}
}
}
/**
* Gets the image stream.
*
* @return the image stream
*/
public static InputStream getImageStream() {
InputStream displayStream = null;
try {
File imageFile = File.createTempFile("image", ".jpg");
ImageAction.save(imageFile, 1, "jpg");
if (imageFile.length() > 0) {
displayStream = new FileInputStream(imageFile);
System.out.println("Display image created : " + imageFile.toURI());
}
} catch (IOException e) {
e.printStackTrace();
}
return displayStream;
}
/**
* Publish.
*
* @param handler the handler
* @param engine the TrianaInstange "engine"
*/
public static void publish(WorkflowEngineHandler handler, TrianaInstance engine) {
SHIWADesktop shiwaDesktop = new SHIWADesktop(handler, SHIWADesktop.ButtonOption.SHOW_TOOLBAR);
DisplayDialog dialog = null;
shiwaDesktop.addExecutionListener(new TrianaShiwaListener(engine));
Image icon = InterfaceUtils.X16_ICON.getImage();
dialog = new DisplayDialog(shiwaDesktop.getPanel(), "SHIWA Desktop", icon);
shiwaDesktop = null;
}
}