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/23 11:24:53 UTC
[06/16] incubator-taverna-workbench-common-activities git commit:
Revert "Temporarily empty repository"
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml b/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
new file mode 100644
index 0000000..7fdba26
--- /dev/null
+++ b/taverna-spreadsheet-import-activity-ui/src/main/resources/META-INF/spring/spreadsheet-import-activity-ui-context.xml
@@ -0,0 +1,45 @@
+<?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="SpreadsheetImportActivityIcon" class="net.sf.taverna.t2.activities.spreadsheet.servicedescriptions.SpreadsheetImportActivityIcon">
+ <property name="colourManager" ref="colourManager" />
+ </bean>
+
+ <bean id="SpreadsheetImportTemplateService" class="net.sf.taverna.t2.activities.spreadsheet.servicedescriptions.SpreadsheetImportTemplateService" />
+
+ <bean id="SpreadsheetImportAddTemplateAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportAddTemplateAction">
+ <property name="editManager" ref="editManager" />
+ <property name="menuManager" ref="menuManager" />
+ <property name="selectionManager" ref="selectionManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ <property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+ <property name="serviceRegistry" ref="serviceRegistry" />
+ </bean>
+ <bean id="SpreadsheetImportAddTemplateMenuAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportAddTemplateMenuAction">
+ <property name="editManager" ref="editManager" />
+ <property name="menuManager" ref="menuManager" />
+ <property name="selectionManager" ref="selectionManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ <property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+ <property name="serviceRegistry" ref="serviceRegistry" />
+ </bean>
+ <bean id="SpreadsheetImportConfigureMenuAction" class="net.sf.taverna.t2.activities.spreadsheet.menu.SpreadsheetImportConfigureMenuAction">
+ <property name="editManager" ref="editManager" />
+ <property name="fileManager" ref="fileManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ <property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+ <property name="serviceRegistry" ref="serviceRegistry" />
+ </bean>
+
+ <bean id="SpreadsheetImportContextualViewFactory" class="net.sf.taverna.t2.activities.spreadsheet.views.SpreadsheetImportContextualViewFactory">
+ <property name="editManager" ref="editManager" />
+ <property name="fileManager" ref="fileManager" />
+ <property name="activityIconManager" ref="activityIconManager" />
+ <property name="colourManager" ref="colourManager" />
+ <property name="serviceDescriptionRegistry" ref="serviceDescriptionRegistry" />
+ <property name="serviceRegistry" ref="serviceRegistry" />
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties b/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
new file mode 100644
index 0000000..2a4480f
--- /dev/null
+++ b/taverna-spreadsheet-import-activity-ui/src/main/resources/net/sf/taverna/t2/activities/spreadsheet/iln8/ui-text.properties
@@ -0,0 +1,43 @@
+SpreadsheetImportActivityConfigurationAction.canceButton=Cancel
+SpreadsheetImportActivityConfigurationAction.dialogTitle=Spreadsheet Import Configuration
+SpreadsheetImportActivityConfigurationAction.okButton=Finish
+SpreadsheetImportAddTemplateAction.addMenu=Spreadsheet import
+SpreadsheetImportConfigureMenuAction.configureMenu=Configure Spreadsheet Import
+SpreadsheetImportConfigTableModel.column=Column
+SpreadsheetImportConfigTableModel.portName=Port Name
+SpreadsheetImportConfigView.nextButton=Next
+SpreadsheetImportConfigView.backButton=Back
+SpreadsheetImportConfigView.columnMappingSectionLabel=Column to Port Name Mapping
+SpreadsheetImportConfigView.outputFormatSectionLabel=Output Format
+SpreadsheetImportConfigView.columnSectionLabel=Columns
+SpreadsheetImportConfigView.DEFAULT_MESSAGE=Select the data range
+SpreadsheetImportConfigView.DUPLICATE_PORT_NAME_ERROR_MESSAGE=Duplicate activity port name
+SpreadsheetImportConfigView.EMPTY_FROM_COLUMN_ERROR_MESSAGE='From' column must be specified
+SpreadsheetImportConfigView.EMPTY_FROM_ROW_ERROR_MESSAGE='From' row must be specified
+SpreadsheetImportConfigView.EMPTY_TO_COLUMN_ERROR_MESSAGE='To' column must be specified
+SpreadsheetImportConfigView.emptyCellSectionLabel=Empty cells
+SpreadsheetImportConfigView.emptyStringOption=Use an empty string
+SpreadsheetImportConfigView.excludeHeaderRowOption=Exclude header row
+SpreadsheetImportConfigView.from=From
+SpreadsheetImportConfigView.FROM_COLUMN_ERROR_MESSAGE='From' column can only contain characters A-Z
+SpreadsheetImportConfigView.FROM_ROW_ERROR_MESSAGE='From' row must be a number greater than 0
+SpreadsheetImportConfigView.generateErrorOption=Generate an error value
+SpreadsheetImportConfigView.ignoreBlankRowsOption=Ignore blank rows
+SpreadsheetImportConfigView.multiplePortOption=Multiple outputs (one per spreadsheet column)
+SpreadsheetImportConfigView.singlePortOption=A single CSV formatted output
+SpreadsheetImportConfigView.userDefinedCsvDelimiter=Use this value delimiter character:
+SpreadsheetImportConfigView.INCONSISTENT_COLUMN_MESSAGE='To' column must not be less than 'from' column
+SpreadsheetImportConfigView.INCONSISTENT_ROW_MESSAGE='To'row must not be less than 'from' row
+SpreadsheetImportConfigView.panelTitle=Configure spreadsheet file import
+SpreadsheetImportConfigView.rowSectionLabel=Rows
+SpreadsheetImportConfigView.selectAllRowsOption=All rows
+SpreadsheetImportConfigView.to=to
+SpreadsheetImportConfigView.TO_COLUMN_ERROR_MESSAGE='To' column can only contain characters A-Z
+SpreadsheetImportConfigView.TO_ROW_ERROR_MESSAGE='To' row must be a number greater than 0
+SpreadsheetImportConfigView.userDefinedOption=Use this value:
+SpreadsheetImportContextualView.activityName=Spreadsheet Import Activity
+SpreadsheetImportContextualView.depth=Depth
+SpreadsheetImportContextualView.inputPortName=Input Port Name
+SpreadsheetImportContextualView.outputPortName=Output Port Name
+SpreadsheetImportTemplateService.serviceDescription=A service that imports data from spreadsheets
+SpreadsheetImportTemplateService.serviceName=SpreadsheetImport
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png
----------------------------------------------------------------------
diff --git a/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png b/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png
new file mode 100644
index 0000000..886fac3
Binary files /dev/null and b/taverna-spreadsheet-import-activity-ui/src/main/resources/spreadsheet-import.png differ
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/pom.xml b/taverna-wsdl-activity-ui/pom.xml
new file mode 100644
index 0000000..be2d224
--- /dev/null
+++ b/taverna-wsdl-activity-ui/pom.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>net.sf.taverna</groupId>
+ <artifactId>taverna-parent</artifactId>
+ <version>3.0.1-SNAPSHOT</version>
+ </parent>
+ <groupId>net.sf.taverna.t2.ui-activities</groupId>
+ <artifactId>wsdl-activity-ui</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>Taverna 2 WSDL Activity UI</name>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <!-- Use the java version instead of xmlcommons for javax.* packages -->
+ <Import-Package>javax.xml.namespace;version="0.0.0",javax.xml.parsers;version="0.0.0",org.w3c.dom;version="0.0.0",org.xml.sax;version="0.0.0",*</Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>net.sf.taverna.t2.ui-api</groupId>
+ <artifactId>activity-icons-api</artifactId>
+ <version>${t2.ui.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.ui-api</groupId>
+ <artifactId>activity-palette-api</artifactId>
+ <version>${t2.ui.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.activities</groupId>
+ <artifactId>wsdl-activity</artifactId>
+ <version>${t2.activities.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.ui-components</groupId>
+ <artifactId>credential-manager-ui</artifactId>
+ <version>${t2.ui.components.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.ui-api</groupId>
+ <artifactId>contextual-views-api</artifactId>
+ <version>${t2.ui.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.ui-api</groupId>
+ <artifactId>activity-tools</artifactId>
+ <version>${t2.ui.api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.taverna.t2.lang</groupId>
+ <artifactId>ui</artifactId>
+ <version>${t2.lang.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <releases />
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <id>mygrid-repository</id>
+ <name>myGrid Repository</name>
+ <url>http://www.mygrid.org.uk/maven/repository
+ </url>
+ </repository>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots />
+ <id>mygrid-snapshot-repository</id>
+ <name>myGrid Snapshot Repository</name>
+ <url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
+ </repository>
+ </repositories>
+</project>
+
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
new file mode 100644
index 0000000..d92dab9
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AbstractAddXMLSplitterAction.java
@@ -0,0 +1,156 @@
+package net.sf.taverna.t2.activities.wsdl.actions;
+/*******************************************************************************
+ * Copyright (C) 2008 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.workbench.edits.EditException;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+import org.apache.log4j.Logger;
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.Scufl2Tools;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+/**
+ * Abstract superclass of {@link AddXMLOutputSplitterAction} and
+ * {@link AddXMLInputSplitterAction}.
+ * <p>
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an input/output splitter to the currently open
+ * dataflow using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ * @author Stuart Owen
+ *
+ */
+@SuppressWarnings("serial")
+public abstract class AbstractAddXMLSplitterAction extends AbstractAction {
+
+ private static Logger logger = Logger.getLogger(AddXMLOutputSplitterAction.class);
+
+ protected Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+ protected JComponent owner;
+ protected final Activity activity;
+ protected final EditManager editManager;
+ protected final SelectionManager selectionManager;
+
+ public AbstractAddXMLSplitterAction(Activity activity,
+ JComponent owner, EditManager editManager, SelectionManager selectionManager) {
+ this.activity = activity;
+ this.owner = owner;
+ this.editManager = editManager;
+ this.selectionManager = selectionManager;
+ }
+
+ public void actionPerformed(ActionEvent ev) {
+ List<String> possibilities;
+ Map<String, TypeDescriptor> typeDescriptors;
+ try {
+ typeDescriptors = getTypeDescriptors();
+ } catch (UnknownOperationException ex) {
+ logger.error("Can't find operation for activity "
+ + activity, ex);
+ return;
+ } catch (IOException | ParserConfigurationException | WSDLException | SAXException | JDOMException ex) {
+ logger.error("Can't read definition for activity "
+ + activity, ex);
+ return;
+ }
+
+ typeDescriptors = filterDescriptors(typeDescriptors);
+
+ possibilities = new ArrayList<String>(typeDescriptors.keySet());
+ if (possibilities.isEmpty()) {
+ logger.warn("No type descriptors found for activity " + activity);
+ return;
+ }
+ Collections.sort(possibilities);
+
+ String portName = (String) JOptionPane.showInputDialog(owner,
+ "Select the port to add the splitter to",
+ "Add output XML splitter", JOptionPane.PLAIN_MESSAGE, null,
+ possibilities.toArray(), possibilities.get(0));
+
+ Workflow workflow = selectionManager.getSelectedWorkflow();
+ Profile profile = selectionManager.getSelectedProfile();
+ TypeDescriptor typeDescriptorForPort = typeDescriptors
+ .get(portName);
+
+ if (typeDescriptorForPort instanceof ArrayTypeDescriptor
+ || typeDescriptorForPort instanceof ComplexTypeDescriptor) {
+ AddXMLSplitterEdit edit = new AddXMLSplitterEdit(workflow, profile,
+ activity, typeDescriptorForPort, portName, isInput());
+ try {
+ editManager.doDataflowEdit(workflow.getParent(), edit);
+ } catch (EditException ex) {
+ logger.error("Could not perform edit to add " + portName, ex);
+ }
+ } else {
+ logger.warn("Unknown typedescriptor for " + portName);
+ }
+ }
+
+ public static Map<String, TypeDescriptor> filterDescriptors(
+ Map<String, TypeDescriptor> descriptors) {
+ Map<String, TypeDescriptor> filtered = new HashMap<String, TypeDescriptor>();
+ for (Entry<String, TypeDescriptor> entry : descriptors.entrySet()) {
+ TypeDescriptor descriptor = entry.getValue();
+ if (descriptor.getMimeType().contains("'text/xml'")) {
+ filtered.put(entry.getKey(), descriptor);
+ }
+ }
+ return filtered;
+ }
+
+ protected abstract boolean isInput();
+
+ public abstract Map<String, TypeDescriptor> getTypeDescriptors()
+ throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException;
+
+ public void setOwner(JComponent owner) {
+ this.owner = owner;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
new file mode 100644
index 0000000..6faee9d
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLInputSplitterAction.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (C) 2008 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.AddXMLSplitterEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+import net.sf.taverna.wsdl.parser.WSDLParser;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.xml.sax.SAXException;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+
+/**
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an input splitter to the currently open dataflow
+ * using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ */
+@SuppressWarnings("serial")
+public class AddXMLInputSplitterAction extends AbstractAddXMLSplitterAction {
+
+ public AddXMLInputSplitterAction(Activity activity, JComponent owner, EditManager editManager,
+ SelectionManager selectionManager) {
+ super(activity, owner, editManager, selectionManager);
+ putValue(NAME, "Add input XML splitter");
+ }
+
+ @Override
+ public Map<String, TypeDescriptor> getTypeDescriptors() throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException {
+ Map<String, TypeDescriptor> descriptors = new HashMap<String, TypeDescriptor>();
+ Configuration configuration = scufl2Tools.configurationFor(activity, selectionManager.getSelectedProfile());
+ if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+ String wsdlLocation = configuration.getJson().get("operation").get("wsdl").textValue();
+ String operationName = configuration.getJson().get("operation").get("name").textValue();
+ List<TypeDescriptor> inputDescriptors = new WSDLParser(wsdlLocation)
+ .getOperationInputParameters(operationName);
+ for (TypeDescriptor descriptor : inputDescriptors) {
+ descriptors.put(descriptor.getName(), descriptor);
+ }
+ } else if (activity.getType().equals(WSDLServiceDescription.INPUT_SPLITTER_TYPE)) {
+ String wrappedType = configuration.getJson().get("wrappedType").textValue();
+ Element element = new SAXBuilder().build(new StringReader(wrappedType)).getRootElement();
+ TypeDescriptor typeDescriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+ if (typeDescriptor instanceof ComplexTypeDescriptor) {
+ for (TypeDescriptor desc : ((ComplexTypeDescriptor)typeDescriptor).getElements()) {
+ descriptors.put(desc.getName(), desc);
+ }
+ }
+ else if (typeDescriptor instanceof ArrayTypeDescriptor) {
+ TypeDescriptor desc = ((ArrayTypeDescriptor)typeDescriptor).getElementType();
+ descriptors.put(typeDescriptor.getName(), desc);
+ }
+ }
+ return descriptors;
+ }
+
+ @Override
+ protected boolean isInput() {
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
new file mode 100644
index 0000000..60cba69
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLOutputSplitterAction.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (C) 2008 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.xml.sax.SAXException;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.AddXMLSplitterEdit;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+import net.sf.taverna.wsdl.parser.WSDLParser;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+
+/**
+ * Pops up a {@link JOptionPane} with the names of all the wsdl ports. The one
+ * that is selected is added as an output splitter to the currently open
+ * dataflow using the {@link AddXMLSplitterEdit}
+ *
+ * @author Ian Dunlop
+ * @author Stian Soiland-Reyes
+ */
+@SuppressWarnings("serial")
+public class AddXMLOutputSplitterAction extends AbstractAddXMLSplitterAction {
+
+ public AddXMLOutputSplitterAction(Activity activity, JComponent owner, EditManager editManager,
+ SelectionManager selectionManager) {
+ super(activity, owner, editManager, selectionManager);
+ putValue(NAME, "Add output XML splitter");
+
+ }
+
+ @Override
+ public Map<String, TypeDescriptor> getTypeDescriptors() throws UnknownOperationException, IOException, ParserConfigurationException, WSDLException, SAXException, JDOMException {
+ Map<String, TypeDescriptor> descriptors = new HashMap<String, TypeDescriptor>();
+ Configuration configuration = scufl2Tools.configurationFor(activity, selectionManager.getSelectedProfile());
+ if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+ String wsdlLocation = configuration.getJson().get("operation").get("wsdl").textValue();
+ String operationName = configuration.getJson().get("operation").get("name").textValue();
+ List<TypeDescriptor> inputDescriptors = new WSDLParser(wsdlLocation)
+ .getOperationOutputParameters(operationName);
+ for (TypeDescriptor descriptor : inputDescriptors) {
+ descriptors.put(descriptor.getName(), descriptor);
+ }
+ } else if (activity.getType().equals(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE)) {
+ String wrappedType = configuration.getJson().get("wrappedType").textValue();
+ Element element = new SAXBuilder().build(new StringReader(wrappedType)).getRootElement();
+ TypeDescriptor typeDescriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+ if (typeDescriptor instanceof ComplexTypeDescriptor) {
+ for (TypeDescriptor desc : ((ComplexTypeDescriptor) typeDescriptor)
+ .getElements()) {
+ descriptors.put(desc.getName(), desc);
+ }
+ }
+ else if (typeDescriptor instanceof ArrayTypeDescriptor) {
+ TypeDescriptor desc = ((ArrayTypeDescriptor)typeDescriptor).getElementType();
+ descriptors.put(typeDescriptor.getName(), desc);
+ }
+ }
+ return descriptors;
+ }
+
+ @Override
+ protected boolean isInput() {
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
new file mode 100644
index 0000000..484feac
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/AddXMLSplitterEdit.java
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * Copyright (C) 2007 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.activities.wsdl.xmlsplitter.XMLSplitterConfigurationBeanBuilder;
+import net.sf.taverna.t2.workbench.edits.CompoundEdit;
+import net.sf.taverna.t2.workbench.edits.Edit;
+import net.sf.taverna.t2.workbench.edits.EditException;
+import net.sf.taverna.t2.workflow.edits.AddChildEdit;
+import net.sf.taverna.t2.workflow.edits.AddDataLinkEdit;
+import net.sf.taverna.t2.workflow.edits.AddProcessorEdit;
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.Scufl2Tools;
+import uk.org.taverna.scufl2.api.configurations.Configuration;
+import uk.org.taverna.scufl2.api.core.DataLink;
+import uk.org.taverna.scufl2.api.core.Processor;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.iterationstrategy.CrossProduct;
+import uk.org.taverna.scufl2.api.port.InputProcessorPort;
+import uk.org.taverna.scufl2.api.port.OutputProcessorPort;
+import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class AddXMLSplitterEdit implements Edit<Workflow> {
+
+ public static final URI INPUT_SPLITTER_TYPE = URI
+ .create("http://ns.taverna.org.uk/2010/activity/xml-splitter/in");
+ public static final URI OUTPUT_SPLITTER_TYPE = URI
+ .create("http://ns.taverna.org.uk/2010/activity/xml-splitter/out");
+ public static final URI SPLITTER_CONFIG_TYPE = URI
+ .create("http://ns.taverna.org.uk/2010/activity/xml-splitter#Config");
+
+ private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+ private final Workflow workflow;
+ private final Profile profile;
+ private final Activity activity;
+ private TypeDescriptor typeDescriptor;
+ private final String portName;
+ private final boolean isInput;
+
+ private CompoundEdit compoundEdit1 = null;
+ private Edit<?> linkUpEdit;
+ private boolean applied = false;
+
+ public AddXMLSplitterEdit(Workflow workflow, Profile profile, Activity activity,
+ TypeDescriptor typeDescriptor, String portName, boolean isInput) {
+ this.workflow = workflow;
+ this.profile = profile;
+ this.activity = activity;
+ this.typeDescriptor = typeDescriptor;
+ this.portName = portName;
+ this.isInput = isInput;
+ }
+
+ @Override
+ public Workflow doEdit() throws EditException {
+ if (applied) {
+ throw new EditException("Edit has already been applied!");
+ }
+
+ Activity splitter = null;
+ Configuration splitterConfiguration = null;
+ String sourcePortName = "";
+ Processor sourceProcessor = null;
+
+ String sinkPortName = "";
+ Processor sinkProcessor = null;
+
+ Processor activityProcessor = null;
+ List<ProcessorBinding> processorBindingsToActivity = scufl2Tools
+ .processorBindingsToActivity(activity);
+ for (ProcessorBinding processorBinding : processorBindingsToActivity) {
+ activityProcessor = processorBinding.getBoundProcessor();
+ break;
+ }
+ if (activityProcessor == null) {
+ throw new EditException("Cannot find the processor that the activity belongs to");
+ }
+
+ String displayName = portName;
+ if (portName.equals("parameters")) {
+ displayName = isInput ? "input" : "output";
+ }
+ String processorName = activityProcessor.getName();
+ String candidateName;
+ if (displayName.startsWith(processorName)) {
+ // No need to make GetRequest_GetRequestResponse
+ candidateName = displayName;
+ } else {
+ // Combine with processor name
+ String displayProcessorName;
+ if (activity.getType().equals(INPUT_SPLITTER_TYPE)
+ || activity.getType().equals(OUTPUT_SPLITTER_TYPE)) {
+ // For splitters on splitters - avoid adding up blah_bluh_blih_more_stuff
+ String[] processorNameSplit = processorName.replace("_input", "")
+ .replace("_output", "").split("_");
+ displayProcessorName = processorNameSplit[processorNameSplit.length - 1];
+ } else {
+ displayProcessorName = activityProcessor.getName();
+ }
+ candidateName = displayProcessorName + "_" + displayName;
+ }
+
+ Processor splitterProcessor = new Processor();
+ splitterProcessor.setName(candidateName);
+
+ CrossProduct crossProduct = new CrossProduct();
+ crossProduct.setParent(splitterProcessor.getIterationStrategyStack());
+
+ ProcessorBinding processorBinding = new ProcessorBinding();
+ processorBinding.setBoundProcessor(splitterProcessor);
+
+ try {
+ if (activity.getType().equals(INPUT_SPLITTER_TYPE)) {
+ if (!isInput) {
+ throw new EditException(
+ "Can only add an input splitter to another input splitter");
+ }
+ if (typeDescriptor instanceof ArrayTypeDescriptor
+ && !((ArrayTypeDescriptor) typeDescriptor).isWrapped()) {
+ typeDescriptor = ((ArrayTypeDescriptor) typeDescriptor).getElementType();
+ }
+
+ Element element = XMLSplitterSerialisationHelper
+ .typeDescriptorToExtensionXML(typeDescriptor);
+// String wrappedType = new XMLOutputter().outputString(element);
+
+ splitter = new Activity();
+ splitter.setType(INPUT_SPLITTER_TYPE);
+ splitterConfiguration = new Configuration();
+ splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+ splitterConfiguration.setConfigures(splitter);
+// ((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+ JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForInput(element);
+ splitterConfiguration.setJson(bean);
+
+ XMLSplitterPortBuilder.addPortsForInput(element, splitter, splitterProcessor,
+ processorBinding);
+
+ } else if (activity.getType().equals(OUTPUT_SPLITTER_TYPE)) {
+ if (isInput) {
+ throw new EditException(
+ "Can only add an output splitter to another output splitter");
+ }
+ if (typeDescriptor instanceof ArrayTypeDescriptor
+ && !((ArrayTypeDescriptor) typeDescriptor).isWrapped()) {
+ typeDescriptor = ((ArrayTypeDescriptor) typeDescriptor).getElementType();
+ }
+
+ Element element = XMLSplitterSerialisationHelper
+ .typeDescriptorToExtensionXML(typeDescriptor);
+// String wrappedType = new XMLOutputter().outputString(element);
+
+ splitter = new Activity();
+ splitter.setType(OUTPUT_SPLITTER_TYPE);
+ splitterConfiguration = new Configuration();
+ splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+ splitterConfiguration.setConfigures(splitter);
+// ((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+ JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForOutput(element);
+ splitterConfiguration.setJson(bean);
+
+ XMLSplitterPortBuilder.addPortsForOutput(element, splitter, splitterProcessor,
+ processorBinding);
+
+ } else if (activity.getType().equals(WSDLServiceDescription.ACTIVITY_TYPE)) {
+ if (isInput) {
+ Element element = XMLSplitterSerialisationHelper
+ .typeDescriptorToExtensionXML(typeDescriptor);
+// String wrappedType = new XMLOutputter().outputString(element);
+
+ splitter = new Activity();
+ splitter.setType(WSDLServiceDescription.INPUT_SPLITTER_TYPE);
+ splitterConfiguration = new Configuration();
+ splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+ splitterConfiguration.setConfigures(splitter);
+// ((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+ JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForInput(element);
+ splitterConfiguration.setJson(bean);
+
+ XMLSplitterPortBuilder.addPortsForInput(element, splitter, splitterProcessor,
+ processorBinding);
+
+ } else {
+ Element element = XMLSplitterSerialisationHelper
+ .typeDescriptorToExtensionXML(typeDescriptor);
+// String wrappedType = new XMLOutputter().outputString(element);
+
+ splitter = new Activity();
+ splitter.setType(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE);
+ splitterConfiguration = new Configuration();
+ splitterConfiguration.setType(SPLITTER_CONFIG_TYPE);
+ splitterConfiguration.setConfigures(splitter);
+// ((ObjectNode) splitterConfiguration.getJson()).put("wrappedType", wrappedType);
+
+ JsonNode bean = XMLSplitterConfigurationBeanBuilder.buildBeanForOutput(element);
+ splitterConfiguration.setJson(bean);
+
+ XMLSplitterPortBuilder.addPortsForOutput(element, splitter, splitterProcessor,
+ processorBinding);
+ }
+ } else {
+ throw new EditException(
+ "The activity type is not suitable for adding xml processing processors");
+ }
+ } catch (Exception e) {
+ throw new EditException(
+ "An error occured whilst tyring to add an XMLSplitter to the activity:"
+ + activity, e);
+ }
+
+ if (isInput) {
+ sourcePortName = "output";
+ sinkPortName = portName;
+ sinkProcessor = activityProcessor;
+ sourceProcessor = splitterProcessor;
+ } else {
+ sourcePortName = portName;
+ sinkPortName = "input";
+ sinkProcessor = splitterProcessor;
+ sourceProcessor = activityProcessor;
+ }
+
+ processorBinding.setBoundActivity(splitter);
+
+ List<Edit<?>> editList = new ArrayList<Edit<?>>();
+ editList.add(new AddChildEdit<Profile>(profile, splitter));
+ editList.add(new AddChildEdit<Profile>(profile, splitterConfiguration));
+ editList.add(new AddChildEdit<Profile>(profile, processorBinding));
+ editList.add(new AddProcessorEdit(workflow, splitterProcessor));
+
+ compoundEdit1 = new CompoundEdit(editList);
+ compoundEdit1.doEdit();
+
+ List<Edit<?>> linkUpEditList = new ArrayList<Edit<?>>();
+
+ OutputProcessorPort source = sourceProcessor.getOutputPorts().getByName(sourcePortName);
+ InputProcessorPort sink = sinkProcessor.getInputPorts().getByName(sinkPortName);
+
+ if (source == null)
+ throw new EditException("Unable to find the source port when linking up "
+ + sourcePortName + " to " + sinkPortName);
+ if (sink == null)
+ throw new EditException("Unable to find the sink port when linking up "
+ + sourcePortName + " to " + sinkPortName);
+
+ DataLink dataLink = new DataLink();
+ dataLink.setReceivesFrom(source);
+ dataLink.setSendsTo(sink);
+ linkUpEditList.add(new AddDataLinkEdit(workflow, dataLink));
+
+ linkUpEdit = new CompoundEdit(linkUpEditList);
+ linkUpEdit.doEdit();
+ applied = true;
+ return workflow;
+ }
+
+ @Override
+ public void undo() {
+ if (!applied) {
+ throw new RuntimeException("Attempt to undo edit that was never applied");
+ }
+ if (linkUpEdit.isApplied())
+ linkUpEdit.undo();
+ if (compoundEdit1.isApplied())
+ compoundEdit1.undo();
+ applied = false;
+ }
+
+ @Override
+ public boolean isApplied() {
+ return applied;
+ }
+
+ @Override
+ public Object getSubject() {
+ return workflow;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
new file mode 100644
index 0000000..92a8fb6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/WSDLActivityConfigureAction.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (C) 2007-2008 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.JDialog;
+
+import net.sf.taverna.t2.activities.wsdl.views.WSDLActivityConfigurationView;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.workbench.ui.actions.activity.ActivityConfigurationAction;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationDialog;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationPanel;
+import uk.org.taverna.scufl2.api.activity.Activity;
+
+@SuppressWarnings("serial")
+public class WSDLActivityConfigureAction extends ActivityConfigurationAction {
+
+ private final EditManager editManager;
+ private final FileManager fileManager;
+ private final CredentialManager credentialManager;
+
+ public WSDLActivityConfigureAction(Activity activity, Frame owner, EditManager editManager,
+ FileManager fileManager, ActivityIconManager activityIconManager,
+ ServiceDescriptionRegistry serviceDescriptionRegistry, CredentialManager credentialManager) {
+ super(activity, activityIconManager, serviceDescriptionRegistry);
+ this.editManager = editManager;
+ this.fileManager = fileManager;
+ this.credentialManager = credentialManager;
+ putValue(Action.NAME, "Configure security");
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ JDialog currentDialog = ActivityConfigurationAction.getDialog(getActivity());
+ if (currentDialog != null) {
+ currentDialog.toFront();
+ return;
+ }
+ final ActivityConfigurationPanel rshellConfigView = new WSDLActivityConfigurationView(
+ getActivity(), credentialManager);
+ final ActivityConfigurationDialog dialog = new ActivityConfigurationDialog(getActivity(),
+ rshellConfigView, editManager);
+
+ ActivityConfigurationAction.setDialog(getActivity(), dialog, fileManager);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
new file mode 100644
index 0000000..f41f298
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/actions/XMLSplitterPortBuilder.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (C) 2007 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.actions;
+
+import net.sf.taverna.wsdl.parser.ArrayTypeDescriptor;
+import net.sf.taverna.wsdl.parser.BaseTypeDescriptor;
+import net.sf.taverna.wsdl.parser.ComplexTypeDescriptor;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.xmlsplitter.XMLSplitterSerialisationHelper;
+
+import org.jdom.Element;
+
+import uk.org.taverna.scufl2.api.activity.Activity;
+import uk.org.taverna.scufl2.api.common.NamedSet;
+import uk.org.taverna.scufl2.api.core.Processor;
+import uk.org.taverna.scufl2.api.port.InputActivityPort;
+import uk.org.taverna.scufl2.api.port.InputProcessorPort;
+import uk.org.taverna.scufl2.api.port.OutputActivityPort;
+import uk.org.taverna.scufl2.api.port.OutputProcessorPort;
+import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
+import uk.org.taverna.scufl2.api.profiles.ProcessorInputPortBinding;
+import uk.org.taverna.scufl2.api.profiles.ProcessorOutputPortBinding;
+
+/**
+ * A helper class to facilitate in building XMLSplitter ports
+ * from the type descriptor XML.
+ *
+ * @author Stuart Owen
+ * @author David Withers
+ */
+public class XMLSplitterPortBuilder {
+
+ public static void addPortsForInput(Element element, Activity activity, Processor processor,
+ ProcessorBinding binding) {
+ TypeDescriptor descriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+ addOutputPort("output", 0, activity, processor, binding);
+
+ if (descriptor instanceof ComplexTypeDescriptor) {
+ for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getElements()) {
+ addInputPort(typeDescriptor.getName(), depthForDescriptor(typeDescriptor), activity, processor,
+ binding);
+ }
+ NamedSet<InputActivityPort> inputPorts = activity.getInputPorts();
+ for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getAttributes()) {
+ String name = typeDescriptor.getName();
+ if (inputPorts.containsName(name)) {
+ name = "1" + name;
+ }
+ addInputPort(name, depthForDescriptor(typeDescriptor), activity, processor, binding);
+ }
+ } else if (descriptor instanceof ArrayTypeDescriptor) {
+ addInputPort(descriptor.getName(), 1, activity, processor, binding);
+ }
+ }
+
+ public static void addPortsForOutput(Element element, Activity activity, Processor processor,
+ ProcessorBinding binding) {
+ TypeDescriptor descriptor = XMLSplitterSerialisationHelper.extensionXMLToTypeDescriptor(element);
+ addInputPort("input", 0, activity, processor, binding);
+
+ if (descriptor instanceof ComplexTypeDescriptor) {
+ for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getElements()) {
+ addOutputPort(typeDescriptor.getName(), depthForDescriptor(typeDescriptor), activity, processor,
+ binding);
+ }
+ NamedSet<OutputActivityPort> outputPorts = activity.getOutputPorts();
+ for (TypeDescriptor typeDescriptor : ((ComplexTypeDescriptor) descriptor).getAttributes()) {
+ String name = typeDescriptor.getName();
+ if (outputPorts.containsName(name)) {
+ name = "1" + name;
+ }
+ addOutputPort(name, depthForDescriptor(typeDescriptor), activity, processor, binding);
+ }
+ } else if (descriptor instanceof ArrayTypeDescriptor) {
+ addOutputPort(descriptor.getName(), 1, activity, processor, binding);
+ }
+ }
+
+ private static int depthForDescriptor(TypeDescriptor desc) {
+ if (desc instanceof ArrayTypeDescriptor
+ && (!((ArrayTypeDescriptor) desc).isWrapped() || ((ArrayTypeDescriptor) desc)
+ .getElementType() instanceof BaseTypeDescriptor)) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+
+ private static void addOutputPort(String name, int depth, Activity activity,
+ Processor processor, ProcessorBinding binding) {
+ OutputActivityPort activityPort = new OutputActivityPort(activity, name);
+ activityPort.setDepth(depth);
+ activityPort.setGranularDepth(depth);
+ OutputProcessorPort processorPort = new OutputProcessorPort(processor, name);
+ processorPort.setDepth(depth);
+ processorPort.setGranularDepth(depth);
+ new ProcessorOutputPortBinding(binding, activityPort, processorPort);
+ }
+
+ private static void addInputPort(String name, int depth, Activity activity,
+ Processor processor, ProcessorBinding binding) {
+ InputActivityPort activityPort = new InputActivityPort(activity, name);
+ activityPort.setDepth(depth);
+ InputProcessorPort processorPort = new InputProcessorPort(processor, name);
+ processorPort.setDepth(depth);
+ new ProcessorInputPortBinding(binding, processorPort, activityPort);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
new file mode 100644
index 0000000..a2935e6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForWSDLActivityMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLInputSplitterForWSDLActivityMenuAction extends AddXMLInputSplitterMenuAction {
+
+ public AddXMLInputSplitterForWSDLActivityMenuAction() {
+ super(WSDLServiceDescription.ACTIVITY_TYPE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
new file mode 100644
index 0000000..070c006
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterForXMLInputSplitterMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLInputSplitterForXMLInputSplitterMenuAction extends AddXMLInputSplitterMenuAction {
+
+ public AddXMLInputSplitterForXMLInputSplitterMenuAction() {
+ super(WSDLServiceDescription.INPUT_SPLITTER_TYPE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
new file mode 100644
index 0000000..60ef904
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLInputSplitterMenuAction.java
@@ -0,0 +1,70 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+import net.sf.taverna.t2.activities.wsdl.InputPortTypeDescriptorActivity;
+import net.sf.taverna.t2.activities.wsdl.actions.AbstractAddXMLSplitterAction;
+import net.sf.taverna.t2.activities.wsdl.actions.AddXMLInputSplitterAction;
+import net.sf.taverna.t2.ui.menu.ContextualMenuComponent;
+import net.sf.taverna.t2.ui.menu.MenuComponent;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+/**
+ * @author alanrw
+ */
+public abstract class AddXMLInputSplitterMenuAction extends AbstractConfigureActivityMenuAction
+ implements MenuComponent, ContextualMenuComponent {
+
+ private static final String ADD_XML_INPUT_SPLITTER = "Add XML Input Splitter";
+ private EditManager editManager;
+ private SelectionManager selectionManager;
+
+ public AddXMLInputSplitterMenuAction(URI activityType) {
+ super(activityType);
+ }
+
+ @Override
+ protected Action createAction() {
+ AddXMLInputSplitterAction configAction = new AddXMLInputSplitterAction(findActivity(),
+ null, editManager, selectionManager);
+ Map<String, TypeDescriptor> descriptors;
+ try {
+ descriptors = configAction.getTypeDescriptors();
+ } catch (UnknownOperationException | IOException | ParserConfigurationException
+ | WSDLException | SAXException | JDOMException e) {
+ return null;
+ }
+ if (!AbstractAddXMLSplitterAction.filterDescriptors(descriptors).isEmpty()) {
+ configAction.putValue(Action.NAME, ADD_XML_INPUT_SPLITTER);
+ addMenuDots(configAction);
+ return configAction;
+ } else {
+ return null;
+ }
+ }
+
+ public void setEditManager(EditManager editManager) {
+ this.editManager = editManager;
+ }
+
+ public void setSelectionManager(SelectionManager selectionManager) {
+ this.selectionManager = selectionManager;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
new file mode 100644
index 0000000..58b3724
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForWSDLActivityMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLOutputSplitterForWSDLActivityMenuAction extends AddXMLOutputSplitterMenuAction {
+
+ public AddXMLOutputSplitterForWSDLActivityMenuAction() {
+ super(WSDLServiceDescription.ACTIVITY_TYPE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
new file mode 100644
index 0000000..129c996
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterForXMLOutputSplitterMenuAction.java
@@ -0,0 +1,11 @@
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+
+public class AddXMLOutputSplitterForXMLOutputSplitterMenuAction extends AddXMLOutputSplitterMenuAction {
+
+ public AddXMLOutputSplitterForXMLOutputSplitterMenuAction() {
+ super(WSDLServiceDescription.OUTPUT_SPLITTER_TYPE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
new file mode 100644
index 0000000..33541e6
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/AddXMLOutputSplitterMenuAction.java
@@ -0,0 +1,66 @@
+/**
+ *
+ */
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+
+import javax.swing.Action;
+import javax.wsdl.WSDLException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sf.taverna.t2.activities.wsdl.actions.AbstractAddXMLSplitterAction;
+import net.sf.taverna.t2.activities.wsdl.actions.AddXMLOutputSplitterAction;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.selection.SelectionManager;
+import net.sf.taverna.wsdl.parser.TypeDescriptor;
+import net.sf.taverna.wsdl.parser.UnknownOperationException;
+
+import org.jdom.JDOMException;
+import org.xml.sax.SAXException;
+
+/**
+ * @author alanrw
+ */
+public abstract class AddXMLOutputSplitterMenuAction extends AbstractConfigureActivityMenuAction {
+
+ private static final String ADD_XML_OUTPUT_SPLITTER = "Add XML Output Splitter";
+ private EditManager editManager;
+ private SelectionManager selectionManager;
+
+ public AddXMLOutputSplitterMenuAction(URI activityType) {
+ super(activityType);
+ }
+
+ @Override
+ protected Action createAction() {
+ AddXMLOutputSplitterAction configAction = new AddXMLOutputSplitterAction(
+ findActivity(), null, editManager, selectionManager);
+ Map<String, TypeDescriptor> descriptors;
+ try {
+ descriptors = configAction.getTypeDescriptors();
+ } catch (UnknownOperationException | IOException | ParserConfigurationException
+ | WSDLException | SAXException | JDOMException e) {
+ return null;
+ }
+ if (!AbstractAddXMLSplitterAction.filterDescriptors(descriptors).isEmpty()) {
+ configAction.putValue(Action.NAME, ADD_XML_OUTPUT_SPLITTER);
+ addMenuDots(configAction);
+ return configAction;
+ } else {
+ return null;
+ }
+ }
+
+ public void setEditManager(EditManager editManager) {
+ this.editManager = editManager;
+ }
+
+ public void setSelectionManager(SelectionManager selectionManager) {
+ this.selectionManager = selectionManager;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
new file mode 100644
index 0000000..87e7d0f
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/menu/ConfigureWSDLMenuAction.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (C) 2007-2009 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.menu;
+
+import javax.swing.Action;
+
+import net.sf.taverna.t2.activities.wsdl.actions.WSDLActivityConfigureAction;
+import net.sf.taverna.t2.activities.wsdl.servicedescriptions.WSDLServiceDescription;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
+import net.sf.taverna.t2.ui.menu.ContextualMenuComponent;
+import net.sf.taverna.t2.ui.menu.MenuComponent;
+import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
+import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import net.sf.taverna.t2.workbench.edits.EditManager;
+import net.sf.taverna.t2.workbench.file.FileManager;
+
+public class ConfigureWSDLMenuAction extends AbstractConfigureActivityMenuAction implements
+ MenuComponent, ContextualMenuComponent {
+
+ private EditManager editManager;
+ private ActivityIconManager activityIconManager;
+ private ServiceDescriptionRegistry serviceDescriptionRegistry;
+ private CredentialManager credentialManager;
+ private FileManager fileManager;
+
+ public ConfigureWSDLMenuAction() {
+ super(WSDLServiceDescription.ACTIVITY_TYPE);
+ }
+
+ @Override
+ protected Action createAction() {
+ WSDLActivityConfigureAction configAction = new WSDLActivityConfigureAction(findActivity(),
+ getParentFrame(), editManager, fileManager, activityIconManager,
+ serviceDescriptionRegistry, credentialManager);
+ addMenuDots(configAction);
+ return configAction;
+ }
+
+ public void setEditManager(EditManager editManager) {
+ this.editManager = editManager;
+ }
+
+ public void setFileManager(FileManager fileManager) {
+ this.fileManager = fileManager;
+ }
+
+ public void setActivityIconManager(ActivityIconManager activityIconManager) {
+ this.activityIconManager = activityIconManager;
+ }
+
+ public void setServiceDescriptionRegistry(ServiceDescriptionRegistry serviceDescriptionRegistry) {
+ this.serviceDescriptionRegistry = serviceDescriptionRegistry;
+ }
+
+ public void setCredentialManager(CredentialManager credentialManager) {
+ this.credentialManager = credentialManager;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/54050685/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
----------------------------------------------------------------------
diff --git a/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
new file mode 100644
index 0000000..b2b31ae
--- /dev/null
+++ b/taverna-wsdl-activity-ui/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/AddWSDLServiceDialog.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * Copyright (C) 2007 The University of Manchester
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.activities.wsdl.servicedescriptions;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+
+import net.sf.taverna.t2.workbench.MainWindow;
+import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Dialog that lets user specify a URL of a WSDL service they want
+ * to add to the Service Panel. In the case the WSDL URL is behind
+ * HTTPS or service's endpoints require HTTPS it will ask user to confirm
+ * if they want to trust it.
+ *
+ * @author Alex Nenadic
+ *
+ */
+@SuppressWarnings("serial")
+public abstract class AddWSDLServiceDialog extends HelpEnabledDialog {
+
+ private JTextField wsdlLocationField;
+ private Logger logger = Logger.getLogger(AddWSDLServiceDialog.class);
+
+ public AddWSDLServiceDialog() {
+ super(MainWindow.getMainWindow(), "Add WSDL service", true, null); // create a non-modal dialog
+ initComponents();
+ setLocationRelativeTo(getParent());
+ }
+
+ private void initComponents() {
+ JPanel mainPanel = new JPanel(new GridBagLayout());
+ mainPanel.setBorder(new EmptyBorder(10,10,10,10));
+
+ JLabel wsdlLocatitionLabel = new JLabel("WSDL location",WSDLActivityIcon.getWSDLIcon(), JLabel.LEFT);
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.weighty = 0.0;
+
+ gbc.weightx = 0.0;
+ gbc.gridx = 0;
+ gbc.gridy = 0;
+ gbc.fill = GridBagConstraints.NONE;
+ gbc.anchor = GridBagConstraints.WEST;
+ gbc.insets = new Insets(5, 10, 0, 0);
+ mainPanel.add(wsdlLocatitionLabel, gbc);
+
+ wsdlLocationField = new JTextField("http://somehost/service?wsdl");
+ gbc.weightx = 1.0;
+ gbc.gridx = 1;
+ gbc.gridy = 0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.anchor = GridBagConstraints.WEST;
+ gbc.insets = new Insets(5, 10, 0, 5);
+ mainPanel.add(wsdlLocationField, gbc);
+
+ final JButton addServiceButton = new JButton("Add");
+ addServiceButton.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent evt)
+ {
+ addPressed();
+ }
+ });
+
+ // When user presses "Return" key fire the action on the "Add" button
+ addServiceButton.addKeyListener(new java.awt.event.KeyAdapter() {
+ public void keyPressed(java.awt.event.KeyEvent evt) {
+ if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
+ addPressed();
+ }
+ }
+ });
+ getRootPane().setDefaultButton(addServiceButton);
+
+ JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ buttonsPanel.add(addServiceButton);
+
+ getContentPane().setLayout(new BorderLayout());
+ getContentPane().add(mainPanel, BorderLayout.CENTER);
+ getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
+
+ setSize(getPreferredSize());
+ pack();
+ }
+
+ /**
+ * 'Add service' button pressed or otherwise activated.
+ */
+ private void addPressed()
+ {
+ final String wsdlURLString = wsdlLocationField.getText().trim();
+ new Thread("Adding WSDL " + wsdlURLString) {
+ public void run() {
+ // Only add the service provider for this service if service URL
+ // starts with 'http'
+ // or if it starts with 'https' and user explicitly said they
+ // wanted to trust this service.
+ /*
+ * if (shouldTrust(wsdlURLString)){ addRegistry(wsdlURLString);
+ * }
+ */
+ try {
+ URL url = new URL(wsdlURLString);
+ URLConnection connection = url.openConnection();
+ try {
+ // If the url starts with 'https' - security hook for
+ // https connection's trust manager
+ // will be engaged and user will be asked automatically
+ // if they want
+ // to trust the connection (if it is not already
+ // trusted). If the urls starts with 'http' -
+ // this will not have any effect apart from checking if
+ // we can open a connection.
+ connection.connect(); // if this does not fail - add the
+ // WSDL
+ // service provider for this service to
+ // the registry
+ } finally {
+ try {
+ connection.getInputStream().close();
+ } catch (IOException ex) {
+ }
+ }
+ addRegistry(wsdlURLString);
+ } catch (Exception ex) { // anything failed
+ JOptionPane.showMessageDialog(null,
+ "Could not read the WSDL definition from "
+ + wsdlURLString + ":\n" + ex,
+ "Could not add WSDL service",
+ JOptionPane.ERROR_MESSAGE);
+
+ logger.error(
+ "Failed to add WSDL service provider for service: "
+ + wsdlURLString, ex);
+
+ }
+ };
+ }.start();
+ closeDialog();
+ }
+
+ /**
+ * If WSDL service's URL starts with 'https' - asks user
+ * whether to trust it or not. If it starts with 'http' -
+ * does not ask anything as the service is implicitly trusted (weird but true).
+ */
+ protected abstract void addRegistry(String wsdl);
+
+ /**
+ * Checks if a service is trusted and if not - asks user if they want to trust it.
+ */
+// public boolean shouldTrust(String wsdlURLString){
+// try {
+// URI wsdlURI = new URI(wsdlURLString);
+// URL wsdlURL = wsdlURI.toURL();
+// String protocol = wsdlURL.getProtocol();
+// if (protocol.toLowerCase().startsWith("https")){
+// logger.info("Checking if service " + wsdlURLString + " is already trusted.");
+// // Check if opening an HTTPS connection will cause a SSLHandshakeException.
+// // This is most probably due to the fact that we do not have this service's
+// // certificate in Credential Manager's truststore
+// try {
+// HttpsURLConnection httpsConnection;
+// httpsConnection = (HttpsURLConnection) wsdlURL.openConnection();
+// httpsConnection.connect();
+// logger.info("HTTPS works out of the box for service " + wsdlURLString);
+// return true; // Opening HTTPS connection worked - so we trust this service already
+// }
+// catch (SSLException sslex) { // most probably due to the fact that service is not trusted, i.e. its certificate is not in Credential Manager's Truststore
+// logger.info("Service " + wsdlURLString + " is not trusted out of the box. Trying to fetch its certificate.");
+// logger.info("The SSLException was caused by: " + sslex.getCause());
+// // Handshake most probably failed as we do not already trust this service -
+// // fetch its certificate and ask user if they want to add this service as trusted
+// try {
+//
+// // This controls SSL socket creation for HTTPS connections
+// // per thread so the damage of switching off certificates
+// // verification is limited
+// ThreadLocalSSLSocketFactory.install();
+// // switch certificate checking off for a moment so we can fetch
+// // service's certificate
+// ThreadLocalSSLSocketFactory.startTrustingEverything();
+//
+// HttpsURLConnection httpsConnection;
+// httpsConnection = (HttpsURLConnection) wsdlURL
+// .openConnection();
+// httpsConnection.connect();
+// // Stop being overly trusting
+// ThreadLocalSSLSocketFactory.stopTrustingEverything();
+// Certificate[] certificates = httpsConnection
+// .getServerCertificates();
+// logger.info("Need to ask user if they want to trust service " + wsdlURLString);
+// // Ask user if they want to trust this service
+// ConfirmTrustedCertificateDialog confirmCertTrustDialog = new ConfirmTrustedCertificateDialog(
+// this, "Untrusted HTTPS connection", true,
+// (X509Certificate) certificates[0]);
+// confirmCertTrustDialog.setLocationRelativeTo(null);
+// confirmCertTrustDialog.setVisible(true);
+// boolean shouldTrust = confirmCertTrustDialog
+// .shouldTrust();
+// if (shouldTrust) {
+// try {
+// CredentialManager credManager = CredentialManager
+// .getInstance();
+// credManager
+// .saveTrustedCertificate((X509Certificate) certificates[0]);
+// return true;
+// } catch (CMException cme) {
+// logger
+// .error(
+// "Failed to add WSDL service provider for service: "
+// + wsdlURLString
+// + " . Credential Manager failed to "
+// + "save trusted certificate.",
+// cme);
+// return false;
+// }
+// } else {
+// // Do not even add a WSDL service provider for this
+// // service and tell user the service will not be
+// // added to Service Panel
+// JOptionPane
+// .showMessageDialog(
+// this,
+// "As you refused to trust it, the service will not be added to Service Panel.",
+// "Add WSDL service",
+// JOptionPane.INFORMATION_MESSAGE);
+// return false;
+// }
+// } catch (Exception e1) {
+// logger
+// .error(
+// "Failed to add WSDL service provider for service: "
+// + wsdlURLString
+// + ". 'Trust everyone' HTTPS connection failed.",
+// e1);
+// return false;
+// } finally {// switch it off here as well if some unexpected exception occurred
+// ThreadLocalSSLSocketFactory.stopTrustingEverything();
+// }
+//
+// } catch (Exception e2) {
+// logger.error("Failed to add WSDL service provider for service: "+ wsdlURLString+". Connecting to service failed.", e2);
+// return false;
+// }
+// }
+// else{ // protocol starts with 'http'
+// return true;
+// }
+// } catch (MalformedURLException e3) {
+// logger.error("Failed to add WSDL service provider: URL "+ wsdlURLString+" was malformed.", e3);
+// return false;
+// } catch (URISyntaxException e4) {
+// logger.error("Failed to add WSDL service provider: URI "+ wsdlURLString+" could not be parsed.", e4);
+// return false;
+// }
+// }
+
+ /**
+ * Closes the dialog.
+ */
+ private void closeDialog() {
+ setVisible(false);
+ dispose();
+ }
+}