You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 12:48:30 UTC
[11/50] [abbrv] incubator-taverna-workbench-common-activities git
commit: taverna-external-tool-activity-ui/
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ScriptPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ScriptPanel.java b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ScriptPanel.java
new file mode 100644
index 0000000..ba15219
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ScriptPanel.java
@@ -0,0 +1,149 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+import javax.swing.text.JTextComponent;
+
+import net.sf.taverna.t2.activities.externaltool.ExternalToolActivityConfigurationBean;
+import net.sf.taverna.t2.lang.ui.DeselectingButton;
+import net.sf.taverna.t2.lang.ui.LineEnabledTextPanel;
+
+import org.jdom.input.SAXBuilder;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseEnumeration;
+
+
+/**
+ * @author alanrw
+ *
+ */
+public class ScriptPanel extends JPanel {
+
+ private static final String SCRIPT_DESCRIPTION = "Specify the commands that you want to run. You can use data arriving at an input port to replace parts of the command or to write to a file. You can also take data written to a file and send it to an output port.";
+ static SAXBuilder builder = new SAXBuilder();
+ private final JTextComponent scriptTextArea;
+
+ public ScriptPanel(final ExternalToolConfigView view, JTextComponent scriptTextArea, JCheckBox stdInCheckBox, JCheckBox stdOutCheckBox, JCheckBox stdErrCheckBox, JTextField returnCodesField) {
+ super();
+ this.setLayout(new BorderLayout());
+
+ JTextArea descriptionText = new JTextArea(
+ SCRIPT_DESCRIPTION);
+ descriptionText.setEditable(false);
+ descriptionText.setFocusable(false);
+ descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+ descriptionText.setLineWrap(true);
+ descriptionText.setWrapStyleWord(true);
+ this.add(descriptionText, BorderLayout.NORTH);
+
+ this.scriptTextArea = scriptTextArea;
+
+ this.add(new LineEnabledTextPanel(scriptTextArea),
+ BorderLayout.CENTER);
+
+
+ UseCaseDescription useCaseDescription = view.getConfiguration().getUseCaseDescription();
+ stdInCheckBox.setSelected(useCaseDescription.isIncludeStdIn());
+ stdOutCheckBox.setSelected(useCaseDescription.isIncludeStdOut());
+ stdErrCheckBox.setSelected(useCaseDescription.isIncludeStdErr());
+ returnCodesField.setText(useCaseDescription.getReturnCodesAsText());
+
+ JPanel codesPanel = new JPanel(new FlowLayout());
+ codesPanel.add(new JLabel("Valid return codes:"));
+ codesPanel.add(returnCodesField);
+
+ JPanel streamPanel = new JPanel(new FlowLayout());
+ streamPanel.add(stdInCheckBox);
+ streamPanel.add(stdOutCheckBox);
+ streamPanel.add(stdErrCheckBox);
+
+ JPanel buttonPanel = new JPanel(new FlowLayout());
+ if (view.isOriginallyFromRepository()) {
+ JButton revertButton = new DeselectingButton("Revert to original description",
+ new AbstractAction(){
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ ExternalToolActivityConfigurationBean bean = view.makeConfiguration();
+ String repositoryUrl = bean.getRepositoryUrl();
+ String id = bean.getExternaltoolid();
+ UseCaseDescription usecase = null;
+ try {
+ usecase = UseCaseEnumeration.readDescriptionFromUrl(
+ repositoryUrl, id);
+ }
+ catch (IOException ex) {
+ // Already logged
+ }
+ if (usecase != null) {
+ bean.setUseCaseDescription(usecase);
+ view.setEditable(false, bean);
+ } else {
+ JOptionPane.showMessageDialog(view, "Unable to find tool description " + id, "Missing tool description", JOptionPane.ERROR_MESSAGE);
+ }
+ }});
+ revertButton.setToolTipText("Revert to the tool description from the repository");
+ buttonPanel.add(revertButton);
+ }
+ JButton loadScriptButton = new DeselectingButton("Load description",
+ new LoadDescriptionAction(this, view));
+ loadScriptButton.setToolTipText("Load tool description from a file");
+
+ JButton saveScriptButton = new DeselectingButton("Export description",
+ new SaveDescriptionAction(this, view));
+ saveScriptButton.setToolTipText("Export the tool description to a file");
+
+ JButton clearScriptButton = new DeselectingButton("Clear script",
+ new AbstractAction() {
+
+ public void actionPerformed(ActionEvent e) {
+ clearScript();
+ }
+
+ });
+ clearScriptButton.setToolTipText("Clear the script from the edit area");
+
+ buttonPanel.add(loadScriptButton);
+ buttonPanel.add(saveScriptButton);
+ buttonPanel.add(clearScriptButton);
+
+ JPanel subPanel = new JPanel(new GridLayout(3,1));
+ subPanel.add(codesPanel);
+ subPanel.add(streamPanel);
+ subPanel.add(buttonPanel);
+
+ this.add(subPanel, BorderLayout.SOUTH);
+ }
+
+ /**
+ * Method for clearing the script
+ *
+ */
+ private void clearScript() {
+ if (JOptionPane.showConfirmDialog(this,
+ "Do you really want to clear the tool description?",
+ "Clearing the tool description", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
+ scriptTextArea.setText("");
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticStringPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticStringPanel.java b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticStringPanel.java
new file mode 100644
index 0000000..885cab5
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticStringPanel.java
@@ -0,0 +1,106 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+import net.sf.taverna.t2.activities.externaltool.utils.Tools;
+import net.sf.taverna.t2.lang.ui.DeselectingButton;
+import net.sf.taverna.t2.lang.ui.ReadOnlyTextArea;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StaticStringPanel extends JPanel {
+
+ private static final String STATIC_STRING_DESCRIPTION = "A fixed string can be written to the specified file.";
+ private final List<ExternalToolStaticStringViewer> staticStringViewList;
+
+ int staticGridy = 1;
+
+ private static String[] elementLabels = new String[] {"String to copy", "To file"};
+
+ public StaticStringPanel(final List<ExternalToolStaticStringViewer> staticStringViewList) {
+ super(new BorderLayout());
+ this.staticStringViewList = staticStringViewList;
+ final JPanel staticEditPanel = new JPanel(new GridBagLayout());
+
+ final GridBagConstraints staticConstraint = new GridBagConstraints();
+ staticConstraint.insets = new Insets(5, 5, 5, 5);
+ staticConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+ staticConstraint.gridx = 0;
+ staticConstraint.gridy = 0;
+ staticConstraint.weightx = 0.1;
+ staticConstraint.fill = GridBagConstraints.BOTH;
+
+ staticConstraint.gridx = 0;
+ synchronized (staticStringViewList) {
+ for (ExternalToolStaticStringViewer staticView : staticStringViewList) {
+ addStaticStringViewer(StaticStringPanel.this, staticEditPanel,
+ staticView);
+ }
+ }
+
+ JTextArea descriptionText = new ReadOnlyTextArea(
+ STATIC_STRING_DESCRIPTION);
+ descriptionText.setEditable(false);
+ descriptionText.setFocusable(false);
+ descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+ this.add(descriptionText, BorderLayout.NORTH);
+
+ this.add(new JScrollPane(staticEditPanel),
+ BorderLayout.CENTER);
+ JButton addStaticStringButton = new DeselectingButton("Add string",
+ new AbstractAction() {
+ // FIXME refactor this into a method
+ public void actionPerformed(ActionEvent e) {
+
+ ExternalToolStaticStringViewer newViewer = new ExternalToolStaticStringViewer();
+ synchronized (staticStringViewList) {
+ staticStringViewList.add(newViewer);
+ addStaticStringViewer(StaticStringPanel.this, staticEditPanel,
+ newViewer);
+ staticEditPanel.revalidate();
+ staticEditPanel.repaint();
+ }
+ }
+
+ });
+
+ JPanel buttonPanel = new JPanel(new BorderLayout());
+
+ buttonPanel.add(addStaticStringButton, BorderLayout.EAST);
+
+ this.add(buttonPanel, BorderLayout.SOUTH);
+
+ }
+
+ private void addStaticStringViewer(final JPanel outerPanel,
+ final JPanel panel, ExternalToolStaticStringViewer viewer) {
+ Tools.addViewer(panel,
+ elementLabels,
+ new JComponent[] {new JScrollPane(viewer.getContentField()), viewer.getValueField()},
+ staticStringViewList,
+ viewer,
+ outerPanel);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticUrlPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticUrlPanel.java b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticUrlPanel.java
new file mode 100644
index 0000000..ba441f4
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StaticUrlPanel.java
@@ -0,0 +1,108 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+import net.sf.taverna.t2.activities.externaltool.utils.Tools;
+import net.sf.taverna.t2.lang.ui.DeselectingButton;
+import net.sf.taverna.t2.lang.ui.ReadOnlyTextArea;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StaticUrlPanel extends JPanel {
+
+ private static final String STATIC_URL_DESCRIPTION = "The data at a URL can be downloaded and stored in the specified file.";
+ private final List<ExternalToolStaticUrlViewer> staticUrlViewList;
+ private int staticGridy = 1;
+
+ private static String[] elementLabels = new String[] {"Copy from URL", "To file"};
+
+
+ public StaticUrlPanel(final List<ExternalToolStaticUrlViewer> staticUrlViewList) {
+
+ super(new BorderLayout());
+ this.staticUrlViewList = staticUrlViewList;
+ final JPanel staticEditPanel = new JPanel(new GridBagLayout());
+
+ final GridBagConstraints staticConstraint = new GridBagConstraints();
+ staticConstraint.insets = new Insets(5, 5, 5, 5);
+ staticConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+ staticConstraint.gridx = 0;
+ staticConstraint.gridy = 0;
+ staticConstraint.weightx = 0.1;
+ staticConstraint.fill = GridBagConstraints.BOTH;
+
+ staticConstraint.gridx = 0;
+ synchronized (staticUrlViewList) {
+ for (ExternalToolStaticUrlViewer staticView : staticUrlViewList) {
+ addStaticUrlViewer(this, staticEditPanel,
+ staticView);
+ }
+ }
+
+ this.add(new JScrollPane(staticEditPanel),
+ BorderLayout.CENTER);
+
+ JTextArea descriptionText = new ReadOnlyTextArea(
+ STATIC_URL_DESCRIPTION);
+ descriptionText.setEditable(false);
+ descriptionText.setFocusable(false);
+ descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+
+ this.add(descriptionText, BorderLayout.NORTH);
+
+ JButton addstaticPortButton = new DeselectingButton("Add URL",
+ new AbstractAction() {
+ // FIXME refactor this into a method
+ public void actionPerformed(ActionEvent e) {
+
+ ExternalToolStaticUrlViewer newViewer = new ExternalToolStaticUrlViewer();
+ synchronized (staticUrlViewList) {
+ staticUrlViewList.add(newViewer);
+ addStaticUrlViewer(StaticUrlPanel.this, staticEditPanel,
+ newViewer);
+ staticEditPanel.revalidate();
+ staticEditPanel.repaint();
+ }
+ }
+
+ });
+ JPanel buttonPanel = new JPanel(new BorderLayout());
+
+ buttonPanel.add(addstaticPortButton, BorderLayout.EAST);
+
+ this.add(buttonPanel, BorderLayout.SOUTH);
+
+ }
+
+ private void addStaticUrlViewer(final JPanel outerPanel,
+ final JPanel panel, ExternalToolStaticUrlViewer viewer) {
+ Tools.addViewer(panel,
+ elementLabels,
+ new JComponent[] {viewer.getContentField(), viewer.getValueField()},
+ staticUrlViewList,
+ viewer,
+ outerPanel);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StringReplacementPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StringReplacementPanel.java b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StringReplacementPanel.java
new file mode 100644
index 0000000..1f85d3a
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/StringReplacementPanel.java
@@ -0,0 +1,134 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+
+import net.sf.taverna.t2.activities.externaltool.manager.ssh.ExternalToolSshNodeViewer;
+import net.sf.taverna.t2.activities.externaltool.utils.Tools;
+import net.sf.taverna.t2.lang.ui.DeselectingButton;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StringReplacementPanel extends JPanel {
+
+ private static final String STRING_REPLACEMENT_DESCRIPTION = "You can use a string replacement to " +
+ "feed data into the service via an input port and have that data replace part of the " +
+ "command.";
+ private final List<ExternalToolStringReplacementViewer> stringReplacementViewList;
+ private int stringReplacementGridy = 1;
+ private final ExternalToolConfigView view;
+
+ private static Insets insets = new Insets(1,5,1,5);
+
+ private static String[] elementLabels = new String[] {"Taverna port name", "Replace port name", "String to replace"};
+
+ private static CompoundBorder border = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createLineBorder(Color.BLACK, 1));
+
+
+ public StringReplacementPanel(final ExternalToolConfigView view, final List<ExternalToolStringReplacementViewer> stringReplacementViewList) {
+ super(new BorderLayout());
+ this.view = view;
+ this.stringReplacementViewList = stringReplacementViewList;
+
+ final JPanel inputEditPanel = new JPanel(new GridBagLayout());
+
+ final GridBagConstraints inputConstraint = new GridBagConstraints();
+
+ inputConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+ inputConstraint.gridx = 0;
+ inputConstraint.gridy = 0;
+ inputConstraint.weightx = 0.1;
+ inputConstraint.fill = GridBagConstraints.BOTH;
+
+ inputConstraint.gridx = 0;
+ synchronized (stringReplacementViewList) {
+ for (ExternalToolStringReplacementViewer inputView : stringReplacementViewList) {
+ addStringReplacementViewer(this, inputEditPanel,
+ inputView, elementLabels);
+
+ }
+ }
+
+ JTextArea descriptionText = new JTextArea(
+ STRING_REPLACEMENT_DESCRIPTION);
+ descriptionText.setEditable(false);
+ descriptionText.setFocusable(false);
+ descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+ descriptionText.setLineWrap(true);
+ descriptionText.setWrapStyleWord(true);
+
+ this.add(descriptionText, BorderLayout.NORTH);
+ this.add(new JScrollPane(inputEditPanel),
+ BorderLayout.CENTER);
+ JButton addInputPortButton = new DeselectingButton("Add string replacement",
+ new AbstractAction() {
+
+ public void actionPerformed(ActionEvent e) {
+
+ int portNumber = 1;
+ String name2 = "in" + portNumber++;
+ boolean nameExists = true;
+ while (nameExists == true) {
+ nameExists = view.portNameExists(name2);
+ if (nameExists) {
+ name2 = "in" + portNumber++;
+ }
+ }
+
+ ExternalToolStringReplacementViewer newViewer = new ExternalToolStringReplacementViewer(
+ name2);
+ synchronized (stringReplacementViewList) {
+ stringReplacementViewList.add(newViewer);
+ addStringReplacementViewer(StringReplacementPanel.this, inputEditPanel,
+ newViewer, elementLabels);
+ inputEditPanel.revalidate();
+ inputEditPanel.repaint();
+ }
+
+ }
+
+ });
+
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.setLayout(new BorderLayout());
+
+ buttonPanel.add(addInputPortButton, BorderLayout.EAST);
+
+ this.add(buttonPanel, BorderLayout.SOUTH);
+ }
+
+ private void addStringReplacementViewer(final JPanel outerPanel,
+ final JPanel innerPanel, final ExternalToolStringReplacementViewer viewer, String[] elementLabels) {
+ Tools.addViewer(innerPanel,
+ elementLabels,
+ new JComponent[] {viewer.getNameField(), viewer.getValueFromField(), viewer.getValueField()},
+ stringReplacementViewList,
+ viewer,
+ outerPanel);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ToolXMLPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ToolXMLPanel.java b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ToolXMLPanel.java
new file mode 100644
index 0000000..b49211f
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/net/sf/taverna/t2/activities/externaltool/views/ToolXMLPanel.java
@@ -0,0 +1,33 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import net.sf.taverna.t2.renderers.impl.XMLTree;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+
+/**
+ * @author alanrw
+ *
+ */
+public class ToolXMLPanel extends JPanel {
+
+ public ToolXMLPanel(UseCaseDescription useCaseDescription) {
+ super(new BorderLayout());
+ XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+ this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);
+ }
+
+ public void regenerateTree(UseCaseDescription useCaseDescription) {
+ this.removeAll();
+ XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+ this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
new file mode 100644
index 0000000..9307977
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
@@ -0,0 +1,2 @@
+net.sf.taverna.t2.activities.externaltool.manager.local.LocalInvocationMechanismEditor
+net.sf.taverna.t2.activities.externaltool.manager.ssh.SshInvocationMechanismEditor
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
new file mode 100644
index 0000000..e94cf6e
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
@@ -0,0 +1,2 @@
+net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolServiceProvider
+net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
new file mode 100644
index 0000000..db316f2
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
@@ -0,0 +1,4 @@
+net.sf.taverna.t2.activities.externaltool.menu.ConfigureExternalToolMenuAction
+# net.sf.taverna.t2.activities.externaltool.menu.FeedbackMenuAction
+net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolContextualMenuAction
+net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolMenuAction
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
new file mode 100644
index 0000000..e6686a0
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerShutdownHook
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
new file mode 100644
index 0000000..0dd97e4
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerStartupHook
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
new file mode 100644
index 0000000..cdafd5d
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolActivityIcon
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
new file mode 100644
index 0000000..b3d1525
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.externaltool.manager.ToolInvocationConfigurationUIFactory
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
new file mode 100644
index 0000000..ca0d30f
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
@@ -0,0 +1 @@
+net.sf.taverna.t2.activities.externaltool.views.ExternalToolActivityViewFactory
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
new file mode 100644
index 0000000..3d7110c
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:beans="http://www.springframework.org/schema/beans"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi
+ http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+ <service ref="ToolInvocationConfigurationUIFactory" interface="uk.org.taverna.configuration.ConfigurationUIFactory" />
+
+ <service ref="InvocationGroupManagerStartupHook" interface="net.sf.taverna.t2.workbench.StartupSPI" />
+
+ <service ref="ExternalToolActivityIcon" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI" />
+
+ <service ref="LocalInvocationMechanismEditor" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" />
+ <service ref="SshInvocationMechanismEditor" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" />
+
+ <service ref="ExternalToolServiceProvider" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider" />
+ <service ref="ExternalToolTemplateServiceDescription" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider" />
+
+ <service ref="ConfigureExternalToolMenuAction" auto-export="interfaces" />
+ <service ref="AddExternalToolContextualMenuAction" auto-export="interfaces" />
+ <service ref="AddExternalToolMenuAction" auto-export="interfaces" />
+
+ <service ref="InvocationGroupManagerShutdownHook" interface="net.sf.taverna.t2.workbench.ShutdownSPI" />
+
+ <service ref="ExternalToolActivityViewFactory" interface="net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
+
+ <list id="mechanismCreators" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" cardinality="0..N" />
+ <list id="invocationMechanismEditors" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" cardinality="0..N" />
+
+ <reference id="editManager" interface="net.sf.taverna.t2.workbench.edits.EditManager" />
+ <reference id="fileManager" interface="net.sf.taverna.t2.workbench.file.FileManager" />
+ <reference id="menuManager" interface="net.sf.taverna.t2.ui.menu.MenuManager" />
+ <reference id="selectionManager" interface="net.sf.taverna.t2.workbench.selection.SelectionManager" />
+ <reference id="activityIconManager" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconManager" />
+ <reference id="colourManager" interface="net.sf.taverna.t2.workbench.configuration.colour.ColourManager" />
+
+</beans:beans>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
new file mode 100644
index 0000000..7cf7f63
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="ToolInvocationConfigurationUIFactory" class="net.sf.taverna.t2.activities.externaltool.manager.ToolInvocationConfigurationUIFactory">
+ <property name="mechanismCreators" ref="mechanismCreators" />
+ <property name="invocationMechanismEditors" ref="invocationMechanismEditors" />
+ </bean>
+
+ <bean id="InvocationGroupManagerStartupHook" class="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerStartupHook" />
+
+ <bean id="ExternalToolActivityIcon" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolActivityIcon">
+ <property name="colourManager" ref="colourManager" />
+ </bean>
+
+ <bean id="LocalInvocationMechanismEditor" class="net.sf.taverna.t2.activities.externaltool.manager.local.LocalInvocationMechanismEditor" />
+ <bean id="SshInvocationMechanismEditor" class="net.sf.taverna.t2.activities.externaltool.manager.ssh.SshInvocationMechanismEditor" />
+
+ <bean id="ExternalToolServiceProvider" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolServiceProvider" />
+ <bean id="ExternalToolTemplateServiceDescription" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription" />
+
+ <bean id="ConfigureExternalToolMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.ConfigureExternalToolMenuAction">
+ <property name="editManager" ref="editManager" />
+ <property name="fileManager" ref="fileManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ </bean>
+ <bean id="AddExternalToolContextualMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolContextualMenuAction">
+ <property name="editManager" ref="editManager" />
+ <property name="menuManager" ref="menuManager" />
+ <property name="selectionManager" ref="selectionManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ </bean>
+ <bean id="AddExternalToolMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolMenuAction">
+ <property name="editManager" ref="editManager" />
+ <property name="menuManager" ref="menuManager" />
+ <property name="selectionManager" ref="selectionManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ </bean>
+
+ <bean id="InvocationGroupManagerShutdownHook" class="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerShutdownHook" />
+
+ <bean id="ExternalToolActivityViewFactory" class="net.sf.taverna.t2.activities.externaltool.views.ExternalToolActivityViewFactory">
+ <property name="editManager" ref="editManager" />
+ <property name="fileManager" ref="fileManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ <property name="colourManager" ref="colourManager" />
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/e48c3199/taverna-external-tool-activity-ui/src/main/resources/externaltool.png
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/externaltool.png b/taverna-external-tool-activity-ui/src/main/resources/externaltool.png
new file mode 100644
index 0000000..a9e84e6
Binary files /dev/null and b/taverna-external-tool-activity-ui/src/main/resources/externaltool.png differ