http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivity.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivity.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivity.java deleted file mode 100644 index 41e8c4f..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivity.java +++ /dev/null @@ -1,545 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import net.sf.taverna.t2.annotation.annotationbeans.MimeType; -import net.sf.taverna.t2.reference.ExternalReferenceSPI; -import net.sf.taverna.t2.reference.ReferenceService; -import net.sf.taverna.t2.reference.T2Reference; -import net.sf.taverna.t2.workflowmodel.EditException; -import net.sf.taverna.t2.workflowmodel.OutputPort; -import net.sf.taverna.t2.workflowmodel.processor.activity.AbstractAsynchronousActivity; -import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException; -import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort; -import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback; - -import org.apache.log4j.Logger; -import org.biomoby.client.CentralImpl; -import org.biomoby.registry.meta.Registry; -import org.biomoby.shared.Central; -import org.biomoby.shared.MobyDataType; -import org.biomoby.shared.MobyException; -import org.biomoby.shared.MobyNamespace; -import org.biomoby.shared.MobyRelationship; -import org.biomoby.shared.NoSuccessException; -import org.biomoby.shared.data.MobyDataBoolean; -import org.biomoby.shared.data.MobyDataComposite; -import org.biomoby.shared.data.MobyDataDateTime; -import org.biomoby.shared.data.MobyDataFloat; -import org.biomoby.shared.data.MobyDataInstance; -import org.biomoby.shared.data.MobyDataInt; -import org.biomoby.shared.data.MobyDataString; -import org.jdom.Element; - -/** - * An Activity providing Biomoby Object functionality. - * - * Copied from org.biomoby.client.taverna.plugin.BiomobyObjectProcessor and - * org.biomoby.client.taverna.plugin.BiomobyObjectTask and converted to a Taverna 2 - * Activity. - * - * @author Edward Kawas - * @author David Withers - */ -public class BiomobyObjectActivity extends AbstractAsynchronousActivity<BiomobyObjectActivityConfigurationBean> { - - public static final String URI = "http://ns.taverna.org.uk/2010/activity/biomoby/object"; - - private static Logger logger = Logger.getLogger(BiomobyObjectActivity.class); - - private BiomobyObjectActivityConfigurationBean configurationBean = new BiomobyObjectActivityConfigurationBean(); - - private Central worker = null; - - private MobyDataType mobyObject = null; - - @Override - public void configure(BiomobyObjectActivityConfigurationBean configurationBean) throws ActivityConfigurationException { - this.configurationBean = configurationBean; - init(); - generatePorts(); - } - - @Override - public void executeAsynch(final Map<String, T2Reference> data, - final AsynchronousActivityCallback callback) { - callback.requestRun(new Runnable() { - - public void run() { - ReferenceService referenceService = callback.getContext().getReferenceService(); - - Map<String, T2Reference> outputMap = new HashMap<String, T2Reference>(); - - // initialize the namespace and id fields - String namespace = ""; - String id = ""; - String article = ""; - boolean isPrimitiveType = getInputPort("value")!=null; - String objectName = configurationBean.getServiceName(); - // would like to use the MobyObjectClass to generate a skeleton - - String registryEndpoint = worker.getRegistryEndpoint(); - Registry mRegistry = new Registry(registryEndpoint,registryEndpoint,"http://domain.com/MOBY/Central"); - - BiomobyCache.cacheForRegistry(mRegistry); - - if (isPrimitiveType) { - try { - - T2Reference inputId; - try { - inputId = data.get("namespace"); - namespace = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - try { - inputId = data.get("id"); - id = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - try { - inputId = data.get("article name"); - article = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - inputId = data.get("value"); - String value = null; - try { - value = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } - catch(NullPointerException e) { - //means the value hasn't been set and is handled below - } - - if (objectName.equals("String")) { - if (value == null) { - value = ""; - } - MobyDataString d = new MobyDataString(value,mRegistry); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } else if (objectName.equals("Float")) { - if (value == null || value.trim().equals("")) { - MobyDataComposite d = new MobyDataComposite( - MobyDataType.getDataType("Float", mRegistry)); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } else { - MobyDataFloat d = new MobyDataFloat(value,mRegistry); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } - } else if (objectName.equals("Integer")) { - - try { - int val = 0; - val = Integer.parseInt(value); - MobyDataInt d = new MobyDataInt(val,mRegistry); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } catch (Exception e) { - MobyDataComposite d = new MobyDataComposite( - MobyDataType.getDataType("Integer", mRegistry)); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } - }else if (objectName.equals("Boolean")) { - if (value == null || value.trim().equals("")) { - MobyDataComposite d = new MobyDataComposite(MobyDataType.getDataType("Boolean", mRegistry)); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } else { - MobyDataBoolean d = new MobyDataBoolean(value,mRegistry); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } - } else if (objectName.equals("DateTime")) { - if (value == null || value.trim().equals("")) { - MobyDataComposite d = new MobyDataComposite(MobyDataType.getDataType("DateTime", mRegistry)); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } else { - MobyDataDateTime d = new MobyDataDateTime("", value,mRegistry); - d.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - d.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - d.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - outputMap.put("mobyData", referenceService.register(XMLUtilities.createMobyDataElementWrapper( - "<Simple articleName=\""+article+"\">" + d.toXML() +"</Simple>" ), 0, true, callback.getContext())); - } - } - callback.receiveResult(outputMap, new int[0]); - } catch (Exception ex) { - // details of other exceptions will appear only in a log - logger.error("Error creating biomoby object for biomoby", ex); - callback.fail("Service failed due to problem creating biomoby object (see details in log)", ex); - } - } else { - // Situation where simples are feeding into this non primitive type - try { - T2Reference inputId; - try { - inputId = data.get("namespace"); - namespace = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - try { - inputId = data.get("id"); - id = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - try { - inputId = data.get("article name"); - article = (String) referenceService.renderIdentifier(inputId, String.class, callback.getContext()); - } catch (Exception e) { - } - - //Element mobyObjectElement = mo.createObject(objectName,namespace, id, article); - - MobyDataComposite composite = new MobyDataComposite(MobyDataType.getDataType(objectName, mRegistry)); - composite.setId(id); - MobyNamespace mNamespace = MobyNamespace.getNamespace(namespace,mRegistry); - if (mNamespace != null) - composite.setPrimaryNamespace(MobyNamespace.getNamespace(namespace,mRegistry)); - composite.setXmlMode(MobyDataInstance.SERVICE_XML_MODE); - - // Element mobyObjectElement = XMLUtilities.getDOMDocument(XMLUtilities.createMobyDataElementWrapper( "<Simple articleName=\""+article+"\">" + composite.toXML() +"</Simple>" )).detachRootElement(); - Element mobyObjectElement = XMLUtilities.getDOMDocument(( composite.toXML() )).detachRootElement(); - - // using the inputs, iterate through and fill in data - for (ActivityInputPort inputPort : getInputPorts()) { - String portName = inputPort.getName(); - if (!(portName.equalsIgnoreCase("namespace") - || portName.equalsIgnoreCase("id") || portName - .equalsIgnoreCase("article name"))) { - String type = portName.substring(0, portName - .indexOf("(")); - String articleName = portName.substring( - type.length() + 1, portName.length() - 1); - inputId = null; - try { - inputId = data.get(portName); - } catch (Exception e) { - - } - if (inputId != null) { - String value = (String) referenceService.renderIdentifier(inputId, inputPort.getTranslatedElementClass(), callback.getContext()); - Element valueElement = (XMLUtilities.getDOMDocument(value)).getRootElement(); - if (valueElement.getChild("mobyContent",XMLUtilities.MOBY_NS) != null) { - valueElement = valueElement.getChild("mobyContent",XMLUtilities.MOBY_NS); - } else { - valueElement = valueElement.getChild("mobyContent"); - } - if (valueElement.getChild("mobyData",XMLUtilities.MOBY_NS) != null ) { - valueElement = valueElement.getChild("mobyData",XMLUtilities.MOBY_NS); - } else { - valueElement = valueElement.getChild("mobyData"); - } - if (valueElement.getChild("Simple",XMLUtilities.MOBY_NS) != null ) { - valueElement = valueElement.getChild("Simple",XMLUtilities.MOBY_NS); - } else { - valueElement = valueElement.getChild("Simple"); - } - if (valueElement.getChild(type,XMLUtilities.MOBY_NS) != null ) { - valueElement = valueElement.getChild(type,XMLUtilities.MOBY_NS); - } else { - valueElement = valueElement.getChild(type); - } - // Element _child = mo.getObject(mobyObjectElement,type, articleName); - - valueElement.removeAttribute("articleName"); - valueElement.removeAttribute("articleName", XMLUtilities.MOBY_NS); - valueElement.setAttribute("articleName", articleName, XMLUtilities.MOBY_NS); -// Element _newChild = mo.createObject(type, _ns, _id, -// articleName); -// _newChild.setText(valueElement -// .getText()); -// _newChild.addContent(_child.cloneContent()); - // import and replace the node - // mobyObjectElement.removeContent(_child); - mobyObjectElement.addContent(valueElement.detach()); - } - } - } - Element simple = new Element("Simple", XMLUtilities.MOBY_NS); - simple.setAttribute("articleName", article, XMLUtilities.MOBY_NS); - simple.addContent(mobyObjectElement); - - org.jdom.output.XMLOutputter outputter = new org.jdom.output.XMLOutputter(org.jdom.output.Format.getPrettyFormat()); - String mobyDataString = outputter.outputString(XMLUtilities.createMobyDataElementWrapper(simple)); - outputMap.put("mobyData", referenceService.register(mobyDataString, 0, true, callback.getContext())); - - callback.receiveResult(outputMap, new int[0]); - } catch (Exception ex) { - // details of other exceptions will appear only in a log - logger.error("Error creating biomoby object for biomoby", ex); - callback.fail("Service failed due to problem creating biomoby object (see details in log)", ex); - } - } - } - }); - - } - - @Override - public BiomobyObjectActivityConfigurationBean getConfiguration() { - return configurationBean; - } - - private void init() throws ActivityConfigurationException { - // Find the service endpoint (by calling Moby registry) - try { - if (mobyObject == null) { - worker = new CentralImpl(configurationBean.getMobyEndpoint()); - mobyObject = worker.getDataType(configurationBean.getServiceName()); - } - - } catch (Exception e) { - if (e instanceof ActivityConfigurationException) { - throw (ActivityConfigurationException) e; - } - throw new ActivityConfigurationException(formatError(e.toString())); - } - // here we make sure that we have downloaded the ontology for the - // registry that we got this service from - try { - new GetOntologyThread(worker.getRegistryEndpoint()).start(); - } catch (Exception e) { - /* don't care if an exception occurs here ... */ - } - } - - private void generatePorts() { - removeInputs(); - removeOutputs(); - - //inputs - addInput("namespace", 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - - addInput("id", 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - - addInput("article name", 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - - try { - String serviceName = configurationBean.getServiceName(); - MobyDataType datatype = worker.getDataType(serviceName); - MobyRelationship[] relations = datatype.getChildren(); - processRelationships(relations); - String parent = "Object"; - try { - parent = datatype.getParentNames()[0]; - if (parent.indexOf(":") > 0) { - parent = parent.substring(parent.lastIndexOf(":") + 1); - } - } catch (ArrayIndexOutOfBoundsException e) { - // parent is then by default object - } - if (parent.equalsIgnoreCase("String") - || parent.equalsIgnoreCase("Integer") - || parent.equalsIgnoreCase("float") - || parent.equalsIgnoreCase("DateTime") - || parent.equalsIgnoreCase("Boolean") - || serviceName.equalsIgnoreCase("String") - || serviceName.equalsIgnoreCase("Boolean") - || serviceName.equalsIgnoreCase("Integer") - || serviceName.equalsIgnoreCase("float") - || serviceName.equalsIgnoreCase("DateTime")) { - addInput("value", 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - } else { - if (!parent.equalsIgnoreCase("Object")) - extractParentContainerRelationships(parent); - } - } catch (MobyException e) { - } catch (NoSuccessException e) { - } - - //outputs - addOutput("mobyData", 0, "text/xml"); - } - - private void extractParentContainerRelationships(String string) { - try { - MobyDataType datatype = worker.getDataType(string); - // need to propagate the isa up to Object to get all of the has/hasa - MobyRelationship[] relations = datatype.getChildren(); - processRelationships(relations); - String parent = "Object"; - try { - parent = datatype.getParentNames()[0]; - if (parent.indexOf(":") > 0) { - parent = parent.substring(parent.lastIndexOf(":") + 1); - } - } catch (ArrayIndexOutOfBoundsException e) { - // parent is then by default object - } - String serviceName = configurationBean.getServiceName(); - if (parent.equalsIgnoreCase("String") - || parent.equalsIgnoreCase("Integer") - || parent.equalsIgnoreCase("float") - || serviceName.equalsIgnoreCase("String") - || parent.equalsIgnoreCase("Boolean") - || serviceName.equalsIgnoreCase("Boolean") - || serviceName.equalsIgnoreCase("Integer") - || serviceName.equalsIgnoreCase("float")) { - addInput("value", 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - } else { - if (!parent.equalsIgnoreCase("Object")) - extractParentContainerRelationships(parent); - } - } catch (MobyException e) { - } catch (NoSuccessException e) { - } - } - - private void processRelationships(MobyRelationship[] relations) { - for (int x = 0; x < relations.length; x++) { - MobyRelationship relationship = relations[x]; - - // strip urn:lsid:... - String name = relationship.getDataTypeName(); - if (name.indexOf(":") > 0) { - name = name.substring(name.lastIndexOf(":") + 1); - } - // port name == DataType(articleName) - name = name + "(" + relationship.getName() + ")"; - switch (relationship.getRelationshipType()) { - case (Central.iHAS): { - // TODO - not really supported - addInput(name, 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - break; - } - case (Central.iHASA): { - addInput(name, 0, true, - new ArrayList<Class<? extends ExternalReferenceSPI>>(), - String.class); - break; - } - default: - break; - } - } - } - - - protected String formatError(String msg) { - // Removed references to the authority, some errors - // were causing it to be null which in turn threw - // a NPE from here, breaking Taverna's error handlers - return ("Problems with service '" + configurationBean.getServiceName() - + "' provided by authority '" - + configurationBean.getAuthorityName() - + "'\nfrom Moby registry at " - + configurationBean.getMobyEndpoint() + ":\n\n" + msg); - } - - protected ActivityInputPort getInputPort(String name) { - for (ActivityInputPort port : getInputPorts()) { - if (port.getName().equals(name)) { - return port; - } - } - return null; - } - - protected OutputPort getOutputPort(String name) { - for (OutputPort port : getOutputPorts()) { - if (port.getName().equals(name)) { - return port; - } - } - return null; - } - - protected void addOutput(String portName, int portDepth, String type) { - OutputPort port = edits.createActivityOutputPort( - portName, portDepth, portDepth); - MimeType mimeType = new MimeType(); - mimeType.setText(type); - try { - edits.getAddAnnotationChainEdit(port, mimeType).doEdit(); - } catch (EditException e) { - logger.debug("Error adding MimeType annotation to port", e); - } - outputPorts.add(port); - } - - public Central getCentral() { - if (worker != null) - return worker; - else - try { - return new CentralImpl(getConfiguration().getMobyEndpoint()); - } catch (MobyException e) { - return null; - } - } - - public MobyDataType getMobyObject() { - return mobyObject; - } - -}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityConfigurationBean.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityConfigurationBean.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityConfigurationBean.java deleted file mode 100644 index ab26b32..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityConfigurationBean.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationBean; -import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationProperty; - -/** - * A configuration bean specific to the Biomoby Object activity. - * - * @author David Withers - */ -@ConfigurationBean(uri = BiomobyObjectActivity.URI + "#Config") -public class BiomobyObjectActivityConfigurationBean { - - private String mobyEndpoint=""; - - private String serviceName=""; - - private String authorityName=""; - - /** - * Returns the mobyEndpoint. - * - * @return the mobyEndpoint - */ - public String getMobyEndpoint() { - return mobyEndpoint; - } - - /** - * Sets the mobyEndpoint. - * - * @param mobyEndpoint the new mobyEndpoint - */ - @ConfigurationProperty(name = "mobyEndpoint", label = "Moby Endpoint", description = "") - public void setMobyEndpoint(String mobyEndpoint) { - this.mobyEndpoint = mobyEndpoint; - } - - /** - * Returns the serviceName. - * - * @return the serviceName - */ - public String getServiceName() { - return serviceName; - } - - /** - * Sets the serviceName. - * - * @param serviceName the new serviceName - */ - @ConfigurationProperty(name = "serviceName", label = "Service Name", description = "") - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - - /** - * Returns the authorityName. - * - * @return the authorityName - */ - public String getAuthorityName() { - return authorityName; - } - - /** - * Sets the authorityName. - * - * @param authorityName the new authorityName - */ - @ConfigurationProperty(name = "authorityName", label = "Authority Name", description = "") - public void setAuthorityName(String authorityName) { - this.authorityName = authorityName; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityFactory.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityFactory.java deleted file mode 100644 index 955b808..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2011 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.biomoby; - -import java.net.URI; - -import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory; - -/** - * An {@link ActivityFactory} for creating <code>BiomobyObjectActivity</code>. - * - * @author David Withers - */ -public class BiomobyObjectActivityFactory implements ActivityFactory { - - @Override - public BiomobyObjectActivity createActivity() { - return new BiomobyObjectActivity(); - } - - @Override - public URI getActivityURI() { - return URI.create(BiomobyObjectActivity.URI); - } - - @Override - public Object createActivityConfiguration() { - return new BiomobyObjectActivityConfigurationBean(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityHealthChecker.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityHealthChecker.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityHealthChecker.java deleted file mode 100644 index 7db539a..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/BiomobyObjectActivityHealthChecker.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.SocketTimeoutException; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; - -import net.sf.taverna.t2.workflowmodel.Processor; -import net.sf.taverna.t2.workflowmodel.processor.activity.Activity; -import net.sf.taverna.t2.workflowmodel.health.HealthCheck; -import net.sf.taverna.t2.workflowmodel.health.HealthChecker; -import net.sf.taverna.t2.visit.VisitReport; -import net.sf.taverna.t2.visit.VisitReport.Status; - -import net.sf.taverna.t2.workflowmodel.health.RemoteHealthChecker; -import net.sf.taverna.t2.workflowmodel.processor.activity.DisabledActivity; - -/** - * A health checker for the Biomoby Object activity. - * - * @author David Withers - */ -public class BiomobyObjectActivityHealthChecker extends RemoteHealthChecker { - - public boolean canVisit(Object subject) { - if (subject == null) { - return false; - } - if (subject instanceof BiomobyObjectActivity) { - return true; - } - if (subject instanceof DisabledActivity) { - return (((DisabledActivity) subject).getActivity() instanceof BiomobyObjectActivity); - } - return false; - } - - public VisitReport visit(Object o, List<Object> ancestors) { - Activity activity = (Activity) o; - BiomobyObjectActivityConfigurationBean configuration = null; - if (activity instanceof BiomobyObjectActivity) { - configuration = (BiomobyObjectActivityConfigurationBean) activity.getConfiguration(); - } else if (activity instanceof DisabledActivity) { - configuration = (BiomobyObjectActivityConfigurationBean) ((DisabledActivity) activity).getActivityConfiguration(); - } - return contactEndpoint(activity, configuration.getMobyEndpoint()); - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncCgiService.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncCgiService.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncCgiService.java deleted file mode 100644 index 552dd34..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncCgiService.java +++ /dev/null @@ -1,517 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.HashMap; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.PostMethod; -import org.apache.commons.httpclient.methods.RequestEntity; -import org.apache.commons.httpclient.methods.StringRequestEntity; -import org.apache.commons.httpclient.params.HttpMethodParams; -import org.apache.log4j.Logger; -import org.biomoby.shared.MobyException; -import org.biomoby.shared.MobyPrefixResolver; -import org.biomoby.shared.parser.MobyTags; -import org.biomoby.w3c.addressing.EndpointReference; -import org.jdom.Element; -import org.jdom.output.Format; -import org.jdom.output.XMLOutputter; -import org.omg.lsae.notifications.AnalysisEvent; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; - -/** - * This class contains one method that is used to execute asynchronous HTTP POST - * services - * - * @author Edward Kawas - * - */ -public class ExecuteAsyncCgiService { - - private static final String GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION = "http://docs.oasis-open.org/wsrf/rpw-2/GetMultipleResourceProperties/GetMultipleResourcePropertiesRequest"; - private static final String DESTROY_RESOURCE_ACTION = "http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyRequest"; - - private static final String RESOURCE_PROPERTIES_NS = "http://docs.oasis-open.org/wsrf/rp-2"; - private static final String RESULT_PREFIX = "result_"; - private static final String STATUS_PREFIX = "status_"; - private static Logger logger = Logger - .getLogger(ExecuteAsyncCgiService.class); - - /** - * - * @param url - * @param serviceName - * @param xml - * @return - */ - public static String executeMobyCgiAsyncService(String url, - String serviceName, String xml) throws MobyException { - - // First, let's get the queryIds - org.w3c.dom.Document message = null; - - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - dbf.setValidating(false); - DocumentBuilder db = dbf.newDocumentBuilder(); - - message = db.parse(new InputSource(new StringReader(xml))); - } catch (Throwable t) { - throw new MobyException("Error while parsing input query", t); - } - - NodeList l_data = message.getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE, MobyTags.MOBYDATA); - if (l_data == null || l_data.getLength() == 0) { - l_data = message.getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE_INVALID, - MobyTags.MOBYDATA); - } - - // Freeing resources - message = null; - - if (l_data == null || l_data.getLength() == 0) { - throw new MobyException("Empty asynchronous MOBY query!"); - } - - int nnode = l_data.getLength(); - String[] queryIds = new String[nnode]; - String[] tmpQueryIds = new String[nnode]; - String[] results = new String[nnode]; - for (int inode = 0; inode < nnode; inode++) { - String queryId = null; - - org.w3c.dom.Element mdata = (org.w3c.dom.Element) l_data - .item(inode); - - queryId = mdata.getAttribute(MobyTags.QUERYID); - if (queryId == null || queryId.length() == 0) - queryId = mdata - .getAttributeNS(MobyPrefixResolver.MOBY_XML_NAMESPACE, - MobyTags.QUERYID); - if (queryId == null || queryId.length() == 0) - queryId = mdata.getAttributeNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE_INVALID, - MobyTags.QUERYID); - - if (queryId == null || queryId.length() == 0) { - throw new MobyException( - "Unable to extract queryId for outgoing MOBY message"); - } - - tmpQueryIds[inode] = queryIds[inode] = queryId; - results[inode] = null; - } - - // Freeing resources - l_data = null; - - // Second, let's launch - EndpointReference epr = launchCgiAsyncService(url, xml); - - // Third, waiting for the results - try { - // FIXME - add appropriate values here - long pollingInterval = 1000L; - double backoff = 1.0; - - // Max: one minute pollings - long maxPollingInterval = 60000L; - - // Min: one second - if (pollingInterval <= 0L) - pollingInterval = 1000L; - - // Backoff: must be bigger than 1.0 - if (backoff <= 1.0) - backoff = 1.5; - - do { - try { - Thread.sleep(pollingInterval); - } catch (InterruptedException ie) { - // DoNothing(R) - } - - if (pollingInterval != maxPollingInterval) { - pollingInterval = (long) ((double) pollingInterval * backoff); - if (pollingInterval > maxPollingInterval) { - pollingInterval = maxPollingInterval; - } - } - } while (pollAsyncCgiService(serviceName, url, epr, tmpQueryIds, - results)); - } finally { - - // Call destroy on this service .... - freeCgiAsyncResources(url, epr); - - } - - // Fourth, assembling back the results - - // Results array already contains mobyData - Element[] mobydatas = new Element[results.length]; - for (int x = 0; x < results.length; x++) { - // TODO remove the extra wrapping from our result - try { - Element inputElement = XMLUtilities.getDOMDocument(results[x]) - .getRootElement(); - if (inputElement.getName().indexOf( - "GetMultipleResourcePropertiesResponse") >= 0) - if (inputElement.getChildren().size() > 0) - inputElement = (Element) inputElement.getChildren() - .get(0); - if (inputElement.getName().indexOf("result_") >= 0) - if (inputElement.getChildren().size() > 0) - inputElement = (Element) inputElement.getChildren() - .get(0); - // replace results[x] - mobydatas[x] = inputElement; - } catch (MobyException e) { - // TODO what should i do? - } - } - Element e = null; - try { - e = XMLUtilities.createMultipleInvokations(mobydatas); - } catch (Exception ex) { - logger - .error("There was a problem creating our XML message ...", - ex); - } - // Fifth, returning results - return e == null ? "" : new XMLOutputter(Format.getPrettyFormat()) - .outputString(e); - } - - private static void freeCgiAsyncResources(String endpoint, - EndpointReference epr) throws MobyException { - // construct the Httpclient - HttpClient client = new HttpClient(); - client.getParams().setParameter("http.useragent", "jMoby/Taverna2"); - // create the post method - PostMethod method = new PostMethod(endpoint + "/destroy"); - - // put our data in the request - RequestEntity entity; - try { - entity = new StringRequestEntity( - "<Destroy xmlns=\"http://docs.oasis-open.org/wsrf/rl-2\"/>", - "text/xml", null); - } catch (UnsupportedEncodingException e) { - throw new MobyException("Problem posting data to webservice", e); - } - method.setRequestEntity(entity); - - // set the header - StringBuffer httpheader = new StringBuffer(); - httpheader.append("<moby-wsrf>"); - httpheader - .append("<wsa:Action xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">" - + DESTROY_RESOURCE_ACTION + "</wsa:Action>"); - httpheader - .append("<wsa:To xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsu:Id=\"To\">" - + endpoint + "</wsa:To>"); - httpheader - .append("<mobyws:ServiceInvocationId xmlns:mobyws=\"http://biomoby.org/\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsa:IsReferenceParameter=\"true\">" - + epr.getServiceInvocationId() - + "</mobyws:ServiceInvocationId>"); - httpheader.append("</moby-wsrf>"); - method.addRequestHeader("moby-wsrf", httpheader.toString().replaceAll( - "\r\n", "")); - // retry up to 10 times - client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, - new DefaultHttpMethodRetryHandler(10, true)); - - // call the method - try { - int result = client.executeMethod(method); - if (result != HttpStatus.SC_OK) - throw new MobyException( - "Async HTTP POST service returned code: " + result - + "\n" + method.getStatusLine()); - } catch (IOException e) { - throw new MobyException("Problem reading response from webservice", - e); - } finally { - // Release current connection to the connection pool once you are - // done - method.releaseConnection(); - } - } - - /** - * - * @param endpoint - * the url to the service to call - * @param xml - * the BioMOBY input message - * @return EndpointReference the EPR returned by the service - * @throws MobyException - */ - private static EndpointReference launchCgiAsyncService(String endpoint, - String xml) throws MobyException { - // construct the Httpclient - HttpClient client = new HttpClient(); - client.getParams().setParameter("http.useragent", "jMoby/Taverna2"); - // create the post method - PostMethod method = new PostMethod(endpoint); - - // put our data in the request - RequestEntity entity; - try { - entity = new StringRequestEntity(xml, "text/xml", null); - } catch (UnsupportedEncodingException e) { - throw new MobyException("Problem posting data to webservice", e); - } - method.setRequestEntity(entity); - - // retry up to 10 times - client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, - new DefaultHttpMethodRetryHandler(10, true)); - - // call the method - try { - int result = client.executeMethod(method); - if (result != HttpStatus.SC_OK) - throw new MobyException( - "Async HTTP POST service returned code: " + result - + "\n" + method.getStatusLine()); - return EndpointReference.createFromXML(method.getResponseHeader( - "moby-wsrf").getValue()); - } catch (IOException e) { - throw new MobyException("Problem reading response from webservice", - e); - } finally { - // Release current connection to the connection pool once you are - // done - method.releaseConnection(); - } - } - - private static boolean pollAsyncCgiService(String msName, String url, - EndpointReference epr, String[] queryIds, String[] result) - throws MobyException { - // Needed to remap results - HashMap<String, Integer> queryMap = new HashMap<String, Integer>(); - for (int qi = 0; qi < queryIds.length; qi++) { - String queryId = queryIds[qi]; - if (queryId != null) - queryMap.put(queryId, new Integer(qi)); - } - - if (queryMap.size() == 0) - return false; - - // construct the GetMultipleResourceProperties XML - StringBuffer xml = new StringBuffer(); - xml.append("<wsrf-rp:GetMultipleResourceProperties xmlns:wsrf-rp='" - + RESOURCE_PROPERTIES_NS - + "' xmlns:mobyws='http://biomoby.org/'>"); - for (String q : queryMap.keySet()) - xml.append("<wsrf-rp:ResourceProperty>mobyws:" + STATUS_PREFIX + q - + "</wsrf-rp:ResourceProperty>"); - xml.append("</wsrf-rp:GetMultipleResourceProperties>"); - - StringBuffer httpheader = new StringBuffer(); - httpheader.append("<moby-wsrf>"); - httpheader - .append("<wsa:Action xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">" - + GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION - + "</wsa:Action>"); - httpheader - .append("<wsa:To xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsu:Id=\"To\">" - + url + "</wsa:To>"); - httpheader - .append("<mobyws:ServiceInvocationId xmlns:mobyws=\"http://biomoby.org/\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsa:IsReferenceParameter=\"true\">" - + epr.getServiceInvocationId() - + "</mobyws:ServiceInvocationId>"); - httpheader.append("</moby-wsrf>"); - - AnalysisEvent[] l_ae = null; - // First, status from queries - String response = ""; - // construct the Httpclient - HttpClient client = new HttpClient(); - client.getParams().setParameter("http.useragent", "jMoby/Taverna2"); - // create the post method - PostMethod method = new PostMethod(url + "/status"); - // add the moby-wsrf header (with no newlines) - method.addRequestHeader("moby-wsrf", httpheader.toString().replaceAll( - "\r\n", "")); - - // put our data in the request - RequestEntity entity; - try { - entity = new StringRequestEntity(xml.toString(), "text/xml", null); - } catch (UnsupportedEncodingException e) { - throw new MobyException("Problem posting data to webservice", e); - } - method.setRequestEntity(entity); - - // retry up to 10 times - client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, - new DefaultHttpMethodRetryHandler(10, true)); - - // call the method - try { - if (client.executeMethod(method) != HttpStatus.SC_OK) - throw new MobyException( - "Async HTTP POST service returned code: " - + method.getStatusCode() + "\n" - + method.getStatusLine() - + "\nduring our polling request"); - response = stream2String(method.getResponseBodyAsStream()); - } catch (IOException e) { - throw new MobyException("Problem reading response from webservice", - e); - } finally { - // Release current connection to the connection pool once you - // are - // done - method.releaseConnection(); - } - - if (response != null) { - l_ae = AnalysisEvent.createFromXML(response); - } - - if (l_ae == null || l_ae.length == 0) { - new MobyException( - "Troubles while checking asynchronous MOBY job status from service " - + msName); - } - - ArrayList<String> finishedQueries = new ArrayList<String>(); - // Second, gather those finished queries - for (int iae = 0; iae < l_ae.length; iae++) { - AnalysisEvent ae = l_ae[iae]; - if (ae.isCompleted()) { - String queryId = ae.getQueryId(); - if (!queryMap.containsKey(queryId)) { - throw new MobyException( - "Invalid result queryId on asynchronous MOBY job status fetched from " - + msName); - } - finishedQueries.add(queryId); - } - } - - // Third, let's fetch the results from the finished queries - if (finishedQueries.size() > 0) { - String[] resQueryIds = finishedQueries.toArray(new String[0]); - for (int x = 0; x < resQueryIds.length; x++) { - // construct the GetMultipleResourceProperties XML - xml = new StringBuffer(); - xml - .append("<wsrf-rp:GetMultipleResourceProperties xmlns:wsrf-rp='" - + RESOURCE_PROPERTIES_NS - + "' xmlns:mobyws='http://biomoby.org/'>"); - for (String q : resQueryIds) - xml.append("<wsrf-rp:ResourceProperty>mobyws:" + RESULT_PREFIX + q - + "</wsrf-rp:ResourceProperty>"); - xml.append("</wsrf-rp:GetMultipleResourceProperties>"); - - httpheader = new StringBuffer(); - httpheader.append("<moby-wsrf>"); - httpheader - .append("<wsa:Action xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">" - + GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION - + "</wsa:Action>"); - httpheader - .append("<wsa:To xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsu:Id=\"To\">" - + url + "</wsa:To>"); - httpheader - .append("<mobyws:ServiceInvocationId xmlns:mobyws=\"http://biomoby.org/\" xmlns:wsa=\"http://www.w3.org/2005/08/addressing\" wsa:IsReferenceParameter=\"true\">" - + epr.getServiceInvocationId() - + "</mobyws:ServiceInvocationId>"); - httpheader.append("</moby-wsrf>"); - client = new HttpClient(); - client.getParams().setParameter("http.useragent", - "jMoby/Taverna2"); - // create the post method - method = new PostMethod(url + "/results"); - // add the moby-wsrf header (with no newlines) - method.addRequestHeader("moby-wsrf", httpheader.toString() - .replaceAll("\r\n", "")); - - // put our data in the request - entity = null; - try { - entity = new StringRequestEntity(xml.toString(), - "text/xml", null); - } catch (UnsupportedEncodingException e) { - throw new MobyException( - "Problem posting data to webservice", e); - } - method.setRequestEntity(entity); - - // retry up to 10 times - client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, - new DefaultHttpMethodRetryHandler(10, true)); - - // call the method - try { - if (client.executeMethod(method) != HttpStatus.SC_OK) - throw new MobyException( - "Async HTTP POST service returned code: " - + method.getStatusCode() + "\n" - + method.getStatusLine() - + "\nduring our polling request"); - // place the result in the array - result[x] = stream2String(method.getResponseBodyAsStream()); - // Marking as null - queryIds[x] = null; - } catch (IOException e) { - logger.warn("Problem getting result from webservice\n" - + e.getMessage()); - } finally { - // Release current connection - method.releaseConnection(); - } - } - - } - return finishedQueries.size() != queryMap.size(); - } - - private static String stream2String(InputStream is) { - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - StringBuilder sb = new StringBuilder(); - String line = null; - String newline = System.getProperty("line.separator"); - try { - while ((line = br.readLine()) != null) { - sb.append(line + newline); - } - } catch (IOException e) { - logger.warn("Exception reading input stream ...", e); - } finally { - try { - br.close(); - } catch (IOException e) { - logger.warn("Exception closing input stream ...", e); - } - } - return sb.toString(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncMobyService.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncMobyService.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncMobyService.java deleted file mode 100644 index 10c76bc..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteAsyncMobyService.java +++ /dev/null @@ -1,695 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPHeader; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.Dispatch; -import javax.xml.ws.Service; -import javax.xml.ws.soap.SOAPBinding; - -import org.apache.log4j.Logger; -import org.biomoby.shared.MobyException; -import org.biomoby.shared.MobyPrefixResolver; -import org.biomoby.shared.MobyService; -import org.biomoby.shared.parser.MobyTags; -import org.biomoby.w3c.addressing.EndpointReference; -import org.omg.lsae.notifications.AnalysisEvent; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; - - -/** - * This class contains one method that is used to execute asynchronous moby - * services - * - * @author Edward Kawas - * - */ - -public class ExecuteAsyncMobyService { - - /* async constants */ - private static final String GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION = "http://docs.oasis-open.org/wsrf/rpw-2/GetMultipleResourceProperties/GetMultipleResourcePropertiesRequest"; - private static final String DESTROY_RESOURCE_ACTION = "http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyRequest"; - - private static final String RESOURCE_PROPERTIES_NS = "http://docs.oasis-open.org/wsrf/rp-2"; - private static final String RESOURCE_LIFETIME_NS = "http://docs.oasis-open.org/wsrf/rl-2"; - - @SuppressWarnings("unused") - private static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/"; - private static final String XSD_NS = "http://www.w3.org/2001/XMLSchema"; - private static final String WSA_NS = "http://www.w3.org/2005/08/addressing"; - private static final String WSU_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; - private static final String ANON_URI = WSA_NS + "/anonymous"; - private static final String RESULT_PREFIX = "result_"; - private static final String STATUS_PREFIX = "status_"; - - private static Logger logger = Logger.getLogger(ExecuteAsyncMobyService.class); - /** - * This method does the same as getMultipleResourceProperties, with the - * difference that it returns an String instead of a SOAPPart object. The - * result is the serialization of the SOAPPart output obtained from - * getMultipleResourceProperties. - * - * @param msName - * The MOBY service name - * @param queryIds - * The array with the queryIds to use. It may contain null - * strings - * @param epr - * The EndpointReference object which helds the MOBY asynchronous - * job information - * @param asResult - * If this parameter is true, then this call fetches the results - * associated to the input queryIds. If it is false, then this - * call only asks for the job status. - * @return When at least one of the strings from queryIds array was not - * null, an String with the serialized answer from the service. - * Otherwise, it returns null. - * @throws SOAPException - */ - private static String getMultipleResourcePropertiesAsString(String msName, - String[] queryIds, EndpointReference epr, boolean asResult) - throws TransformerConfigurationException, SOAPException, - TransformerException { - SOAPPart result = getMultipleResourceProperties(msName, queryIds, epr, - asResult); - if (result == null) - return null; - Transformer tr = TransformerFactory.newInstance().newTransformer(); - tr.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - - DOMSource dombody = new DOMSource(result); - - StringWriter sw = new StringWriter(); - tr.transform(dombody, new StreamResult(sw)); - - return sw.toString(); - } - - /** - * This method does the check and fetch work related to asynchronous - * services. When all the results are fetched, it returns false. When some - * recheck must be issued, it returns true. - * - * @param msName - * The MOBY service name - * @param epr - * The EndpointReference, used for the queries - * @param queryIds - * The array which holds the queryIds to ask for. It can contain - * null strings. - * @param result - * The array which will hold the mobyData results. This one must - * have the same size as queryIds array. - * @return true, if we need more checking iterations. Otherwise, false - * @throws MobyException - */ - private static boolean checkMobyAsyncJobsStatus(String msName, - EndpointReference epr, String[] queryIds, - org.w3c.dom.Element[] result) throws MobyException { - // Needed to remap results - HashMap<String, Integer> queryMap = new HashMap<String, Integer>(); - for (int qi = 0; qi < queryIds.length; qi++) { - String queryId = queryIds[qi]; - if (queryId != null) - queryMap.put(queryId, new Integer(qi)); - } - - if (queryMap.size() == 0) - return false; - - try { - AnalysisEvent[] l_ae = null; - // First, status from queries - String response = getMultipleResourcePropertiesAsString(msName, - queryIds, epr, false); - if (response != null) { - l_ae = AnalysisEvent.createFromXML(response); - } - - if (l_ae == null || l_ae.length == 0) { - new MobyException( - "Troubles while checking asynchronous MOBY job status from service " - + msName); - } - - ArrayList<String> finishedQueries = new ArrayList<String>(); - // Second, gather those finished queries - for (int iae = 0; iae < l_ae.length; iae++) { - AnalysisEvent ae = l_ae[iae]; - if (ae.isCompleted()) { - String queryId = ae.getQueryId(); - if (!queryMap.containsKey(queryId)) { - throw new MobyException( - "Invalid result queryId on asynchronous MOBY job status fetched from " - + msName); - } - finishedQueries.add(queryId); - } - } - - // Third, let's fetch the results from the finished queries - if (finishedQueries.size() > 0) { - String[] resQueryIds = finishedQueries.toArray(new String[0]); - SOAPPart soapDOM = getMultipleResourceProperties(msName, - resQueryIds, epr, true); - NodeList l_mul = soapDOM.getElementsByTagNameNS( - RESOURCE_PROPERTIES_NS, - "GetMultipleResourcePropertiesResponse"); - if (l_mul == null || l_mul.getLength() == 0) { - throw new MobyException( - "Error while fetching asynchronous MOBY results from " - + msName); - } - - org.w3c.dom.Element mul = (org.w3c.dom.Element) l_mul.item(0); - for (org.w3c.dom.Node child = mul.getFirstChild(); child != null; child = child - .getNextSibling()) { - if (child.getNodeType() == Node.ELEMENT_NODE - && MobyService.BIOMOBY_SERVICE_URI.equals(child - .getNamespaceURI())) { - String preQueryId = child.getLocalName(); - int subpos = preQueryId.indexOf(RESULT_PREFIX); - if (subpos != 0) { - throw new MobyException( - "Invalid result prefix on asynchronous MOBY job results fetched from " - + msName); - } - String queryId = preQueryId.substring(RESULT_PREFIX - .length()); - if (!queryMap.containsKey(queryId)) { - throw new MobyException( - "Invalid result queryId on asynchronous MOBY job results fetched from " - + msName); - } - - org.w3c.dom.Element elchild = (org.w3c.dom.Element) child; - NodeList l_moby = elchild.getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE, - MobyTags.MOBYDATA); - if (l_moby == null || l_moby.getLength() == 0) - l_moby = elchild - .getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE_INVALID, - MobyTags.MOBYDATA); - - if (l_moby == null || l_moby.getLength() == 0) { - throw new MobyException( - "Recovered empty payload from asynchronous MOBY service " - + msName); - } - Integer queryPos = queryMap.get(queryId); - result[queryPos] = (org.w3c.dom.Element) l_moby.item(0); - // Marking as null - queryIds[queryPos] = null; - } - } - } - - return finishedQueries.size() != queryMap.size(); - } catch (SOAPException se) { - throw new MobyException("Error while querying MOBY job status", se); - } catch (TransformerConfigurationException tce) { - throw new MobyException( - "Error while preparing to parse MOBY job status", tce); - } catch (TransformerException te) { - throw new MobyException("Error while parsing MOBY job status", te); - } - } - - /** - * This method calls the input MOBY service using the asynchronous protocol. - * - * @param endpoint - * The endpoint of the service. - * @param msName - * The MOBY service name. - * @param mobyXML - * The MOBY payload to be sent to the service. - * @return The MOBY payload with the results from the service. - * @throws MobyException - */ - public static String executeMobyAsyncService(String endpoint, String msName, - String mobyXML) throws MobyException { - // First, let's get the queryIds - org.w3c.dom.Document message = null; - - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - dbf.setValidating(false); - DocumentBuilder db = dbf.newDocumentBuilder(); - - message = db.parse(new InputSource(new StringReader(mobyXML))); - } catch (Throwable t) { - throw new MobyException("Error while parsing input query", t); - } - - NodeList l_data = message.getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE, MobyTags.MOBYDATA); - if (l_data == null || l_data.getLength() == 0) { - l_data = message.getElementsByTagNameNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE_INVALID, - MobyTags.MOBYDATA); - } - - // Freeing resources - message = null; - - if (l_data == null || l_data.getLength() == 0) { - throw new MobyException("Empty asynchronous MOBY query!"); - } - - int nnode = l_data.getLength(); - String[] queryIds = new String[nnode]; - String[] tmpQueryIds = new String[nnode]; - org.w3c.dom.Element[] results = new org.w3c.dom.Element[nnode]; - for (int inode = 0; inode < nnode; inode++) { - String queryId = null; - - org.w3c.dom.Element mdata = (org.w3c.dom.Element) l_data - .item(inode); - - queryId = mdata.getAttribute(MobyTags.QUERYID); - if (queryId == null || queryId.length() == 0) - queryId = mdata - .getAttributeNS(MobyPrefixResolver.MOBY_XML_NAMESPACE, - MobyTags.QUERYID); - if (queryId == null || queryId.length() == 0) - queryId = mdata.getAttributeNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE_INVALID, - MobyTags.QUERYID); - - if (queryId == null || queryId.length() == 0) { - throw new MobyException( - "Unable to extract queryId for outgoing MOBY message"); - } - - tmpQueryIds[inode] = queryIds[inode] = queryId; - results[inode] = null; - } - - // Freeing resources - l_data = null; - - // Second, let's launch - EndpointReference epr = launchMobyAsyncService(endpoint, msName, - mobyXML); - - // Third, waiting for the results - try { - // FIXME - add appropriate values here - long pollingInterval = 1000L; // proc.getRetryDelay(); - double backoff = 1.0;// proc.getBackoff(); - - // Max: one minute pollings - long maxPollingInterval = 60000L; - - // Min: one second - if (pollingInterval <= 0L) - pollingInterval = 1000L; - - // Backoff: must be bigger than 1.0 - if (backoff <= 1.0) - backoff = 1.5; - - do { - try { - Thread.sleep(pollingInterval); - } catch (InterruptedException ie) { - // DoNothing(R) - } - - if (pollingInterval != maxPollingInterval) { - pollingInterval = (long) ((double) pollingInterval * backoff/* - * proc. - * getBackoff - * ( - * ) - */); - if (pollingInterval > maxPollingInterval) { - pollingInterval = maxPollingInterval; - } - } - } while (checkMobyAsyncJobsStatus(msName, epr, tmpQueryIds, results)); - } finally { - try { - freeAsyncResources(msName, epr); - } catch (SOAPException se) { - logger.info( - "An error was fired while freeing MOBY asynchronous resources from " - + msName, se); - } - } - - // Fourth, assembling back the results - org.w3c.dom.Document resdoc = null; - try { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - dbf.setValidating(false); - DocumentBuilder db = dbf.newDocumentBuilder(); - resdoc = db.newDocument(); - - org.w3c.dom.Element mobyroot = resdoc.createElementNS( - MobyPrefixResolver.MOBY_XML_NAMESPACE, MobyTags.MOBY); - resdoc.appendChild(mobyroot); - org.w3c.dom.Element mobycontent = resdoc - .createElementNS(MobyPrefixResolver.MOBY_XML_NAMESPACE, - MobyTags.MOBYCONTENT); - mobyroot.appendChild(mobycontent); - - // Results array already contains mobyData - - for (org.w3c.dom.Element result : results) { - mobycontent.appendChild(resdoc.importNode(result, true)); - } - } catch (Throwable t) { - throw new MobyException("Error while assembling output", t); - } - - // Fifth, returning results - try { - Transformer tr = TransformerFactory.newInstance().newTransformer(); - tr.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - - DOMSource dombody = new DOMSource(resdoc); - - StringWriter sw = new StringWriter(); - tr.transform(dombody, new StreamResult(sw)); - - return sw.toString(); - } catch (Throwable t) { - throw new MobyException("Error while assembling output", t); - } - } - - /** - * This method free the asynchronous MOBY resources associated to the job - * identifier tied to the EndpointReference object passed as input. - * - * @param msName - * The MOBY service name - * @param epr - * The EndpointReference object which holds the MOBY asynchronous - * job information - * @throws SOAPException - */ - private static void freeAsyncResources(String msName, EndpointReference epr) - throws SOAPException { - Service service = Service.create(new QName( - MobyService.BIOMOBY_SERVICE_URI, msName + "Service")); - QName mQName = new QName(MobyService.BIOMOBY_SERVICE_URI, - "WSRF_Operations_Port"); - service.addPort(mQName, SOAPBinding.SOAP11HTTP_BINDING, epr - .getAddress()); - - Dispatch<SOAPMessage> dispatch = service.createDispatch(mQName, - SOAPMessage.class, Service.Mode.MESSAGE); - Map<String, Object> rc = dispatch.getRequestContext(); - rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, new Boolean(true)); - rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, - GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION); - - MessageFactory mf = MessageFactory.newInstance(); - SOAPMessage request = mf.createMessage(); - SOAPPart part = request.getSOAPPart(); - - String mobyPrefix = "mobyws"; - String wsaPrefix = "wsa"; - String wsuPrefix = "wsu"; - // Obtain the SOAPEnvelope and header and body elements. - SOAPEnvelope env = part.getEnvelope(); - SOAPHeader header = env.getHeader(); - SOAPBody body = env.getBody(); - - header.addNamespaceDeclaration(mobyPrefix, - MobyService.BIOMOBY_SERVICE_URI); - header.addNamespaceDeclaration(wsaPrefix, WSA_NS); - header.addNamespaceDeclaration(wsuPrefix, WSU_NS); - // This is for the action - SOAPElement actionRoot = header.addChildElement("Action", wsaPrefix, - WSA_NS); - actionRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), - "Action"); - actionRoot.addTextNode(DESTROY_RESOURCE_ACTION); - - // This is for the To - SOAPElement toRoot = header.addChildElement("To", wsaPrefix, WSA_NS); - toRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), "To"); - toRoot.addTextNode(epr.getAddress()); - - // And this is for the mobyws - SOAPElement mobywsRoot = header.addChildElement("ServiceInvocationId", - mobyPrefix, MobyService.BIOMOBY_SERVICE_URI); - mobywsRoot.addNamespaceDeclaration(wsaPrefix, WSA_NS); - mobywsRoot.addAttribute(env.createName("isReferenceParameter", - wsaPrefix, WSA_NS), "true"); - mobywsRoot.addTextNode(epr.getServiceInvocationId()); - - // At last, the replyto - SOAPElement replyRoot = header.addChildElement("ReplyTo", wsaPrefix, - WSA_NS); - replyRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), - "ReplyTo"); - SOAPElement addr = replyRoot.addChildElement("Address", wsaPrefix, - WSA_NS); - addr.addTextNode(ANON_URI); - - // Let's disable the headers - // ((WSBindingProvider)dispatch).setOutboundHeaders(headers); - - // Now the SOAP body - body.addChildElement("Destroy", "rl", RESOURCE_LIFETIME_NS); - - request.saveChanges(); - // We don't mind what it is returned - dispatch.invoke(request); - } - - /** - * This method is used to launch an asynchronous MOBY job. - * - * @param endpoint - * The endpoint of the service. - * @param msName - * The MOBY service name. - * @param mobyXML - * The MOBY payload to be sent to the service. - * @return The EndpointReference object which helds the details of the MOBY - * asynchronous job. - * @throws MobyException - */ - private static EndpointReference launchMobyAsyncService(String endpoint, - String msName, String mobyXML) throws MobyException { - try { - Service service = Service.create(new QName( - MobyService.BIOMOBY_SERVICE_URI, msName + "Service")); - QName mQName = new QName(MobyService.BIOMOBY_SERVICE_URI, msName - + "Port"); - - service.addPort(mQName, SOAPBinding.SOAP11HTTP_BINDING, endpoint); - Dispatch<SOAPMessage> dispatch = service.createDispatch(mQName, - SOAPMessage.class, Service.Mode.MESSAGE); - Map<String, Object> rc = dispatch.getRequestContext(); - rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, new Boolean(true)); - rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, - MobyService.BIOMOBY_SERVICE_URI + "#" + msName + "_submit"); - - MessageFactory mf = MessageFactory.newInstance(); - SOAPMessage request = mf.createMessage(); - SOAPPart part = request.getSOAPPart(); - - String mobyPrefix = "mobyws"; - String xsiPrefix = "xsi"; - - // Obtain the SOAPEnvelope and header and body elements. - SOAPEnvelope env = part.getEnvelope(); - SOAPBody body = env.getBody(); - - // Now the SOAP body - body.addNamespaceDeclaration(mobyPrefix, - MobyService.BIOMOBY_SERVICE_URI); - SOAPElement rootMessage = body.addChildElement(msName + "_submit", - mobyPrefix, MobyService.BIOMOBY_SERVICE_URI); - SOAPElement data = rootMessage.addChildElement("data", mobyPrefix, - MobyService.BIOMOBY_SERVICE_URI); - data.addNamespaceDeclaration(xsiPrefix, - MobyPrefixResolver.XSI_NAMESPACE2001); - data.addNamespaceDeclaration("xsd", XSD_NS); - data.addAttribute(env.createName("type", xsiPrefix, - MobyPrefixResolver.XSI_NAMESPACE2001), "xsd:string"); - data.addTextNode(mobyXML); - - request.saveChanges(); - SOAPMessage outputMessage = dispatch.invoke(request); - DOMSource output = new DOMSource(outputMessage.getSOAPPart() - .getEnvelope()); - - StringWriter sw = new StringWriter(); - Transformer tr = TransformerFactory.newInstance().newTransformer(); - tr.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - tr.transform(output, new StreamResult(sw)); - - String response = sw.toString(); - return EndpointReference.createFromXML(response); - } catch (SOAPException pce) { - throw new MobyException( - "Unable to create SOAP document builder for MOBY asynchronous call submission", - pce); - } catch (TransformerConfigurationException tce) { - throw new MobyException( - "Unable to create transformer factory for MOBY asynchronous call response", - tce); - } catch (TransformerException te) { - throw new MobyException( - "Unable to create transformer for MOBY asynchronous call response", - te); - } - } - - - - /** - * This method issues WSRF getMultipleResourceProperties calls. As this call - * is used in BioMOBY for polling and for result fetching, it has an - * additional parameter which handles the call mode. - * - * @param msName - * The MOBY service name - * @param queryIds - * The array with the queryIds to use. It may contain null - * strings - * @param epr - * The EndpointReference object which helds the MOBY asynchronous - * job information - * @param asResult - * If this parameter is true, then this call fetches the results - * associated to the input queryIds. If it is false, then this - * call only asks for the job status. - * @return When at least one of the strings from queryIds array was not - * null, a SOAPPart object is returned with the answer for the - * request issued to the MOBY service. Otherwise, it returns null. - * @throws SOAPException - */ - private static SOAPPart getMultipleResourceProperties(String msName, - String[] queryIds, EndpointReference epr, boolean asResult) - throws SOAPException { - String op = asResult ? RESULT_PREFIX : STATUS_PREFIX; - - Service service = Service.create(new QName( - MobyService.BIOMOBY_SERVICE_URI, msName + "Service")); - QName mQName = new QName(MobyService.BIOMOBY_SERVICE_URI, - "WSRF_Operations_Port"); - service.addPort(mQName, SOAPBinding.SOAP11HTTP_BINDING, epr - .getAddress()); - - Dispatch<SOAPMessage> dispatch = service.createDispatch(mQName, - SOAPMessage.class, Service.Mode.MESSAGE); - Map<String, Object> rc = dispatch.getRequestContext(); - rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, new Boolean(true)); - rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, - GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION); - - MessageFactory mf = MessageFactory.newInstance(); - SOAPMessage request = mf.createMessage(); - SOAPPart part = request.getSOAPPart(); - - String mobyPrefix = "mobyws"; - String wsaPrefix = "wsa"; - String wsuPrefix = "wsu"; - // Obtain the SOAPEnvelope and header and body elements. - SOAPEnvelope env = part.getEnvelope(); - SOAPHeader header = env.getHeader(); - SOAPBody body = env.getBody(); - - header.addNamespaceDeclaration(mobyPrefix, - MobyService.BIOMOBY_SERVICE_URI); - header.addNamespaceDeclaration(wsaPrefix, WSA_NS); - header.addNamespaceDeclaration(wsuPrefix, WSU_NS); - // This is for the action - SOAPElement actionRoot = header.addChildElement("Action", wsaPrefix, - WSA_NS); - actionRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), - "Action"); - actionRoot.addTextNode(GET_MULTIPLE_RESOURCE_PROPERTIES_ACTION); - - // This is for the To - SOAPElement toRoot = header.addChildElement("To", wsaPrefix, WSA_NS); - toRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), "To"); - toRoot.addTextNode(epr.getAddress()); - - // And this is for the mobyws - SOAPElement mobywsRoot = header.addChildElement("ServiceInvocationId", - mobyPrefix, MobyService.BIOMOBY_SERVICE_URI); - mobywsRoot.addNamespaceDeclaration(wsaPrefix, WSA_NS); - mobywsRoot.addAttribute(env.createName("isReferenceParameter", - wsaPrefix, WSA_NS), "true"); - mobywsRoot.addTextNode(epr.getServiceInvocationId()); - - // At last, the replyto - SOAPElement replyRoot = header.addChildElement("ReplyTo", wsaPrefix, - WSA_NS); - replyRoot.addAttribute(env.createName("Id", wsuPrefix, WSU_NS), - "ReplyTo"); - SOAPElement addr = replyRoot.addChildElement("Address", wsaPrefix, - WSA_NS); - addr.addTextNode(ANON_URI); - - // Let's disable the headers - // ((WSBindingProvider)dispatch).setOutboundHeaders(headers); - - // Now the SOAP body - SOAPElement smrp = body.addChildElement( - "GetMultipleResourceProperties", "rp", RESOURCE_PROPERTIES_NS); - boolean doSubmit = false; - for (String queryId : queryIds) { - if (queryId != null) { - doSubmit = true; - SOAPElement sii = smrp.addChildElement("ResourceProperty", - "rp", RESOURCE_PROPERTIES_NS); - sii.addNamespaceDeclaration(mobyPrefix, - MobyService.BIOMOBY_SERVICE_URI); - sii.addTextNode(mobyPrefix + ":" + op + queryId); - } - } - - if (doSubmit) { - request.saveChanges(); - SOAPMessage output = dispatch.invoke(request); - - return output.getSOAPPart(); - } else { - return null; - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteCgiService.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteCgiService.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteCgiService.java deleted file mode 100644 index a221a8a..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteCgiService.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -import java.io.OutputStreamWriter; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLEncoder; - -import org.biomoby.shared.MobyException; - -/** - * This class contains one method that is used to execute synchronous HTTP POST - * services - * - * @author Edward Kawas - * - */ - -public class ExecuteCgiService { - - /** - * - * @param serviceEndpoint - * the URL to the HTTP POST service - * @param xml - * the XML to send the service - * @return a string representing the output from the service - * @throws MobyException - * if anything goes wrong (problems reading/writing to the - * service) - */ - public static String executeCgiService(String serviceEndpoint, String xml) - throws MobyException { - try { - // Construct data - String data = "data=" + URLEncoder.encode(xml, "UTF-8"); - - // Send data - URL url = new URL(serviceEndpoint); - URLConnection conn = url.openConnection(); - conn.setDoOutput(true); - OutputStreamWriter wr = new OutputStreamWriter(conn - .getOutputStream()); - wr.write(data); - wr.flush(); - // Get the response - BufferedReader rd = new BufferedReader(new InputStreamReader(conn - .getInputStream())); - String line; - StringBuffer sb = new StringBuffer(); - while ((line = rd.readLine()) != null) { - sb.append(line); - } - wr.close(); - rd.close(); - return sb.toString(); - } catch (Exception e) { - throw new MobyException(e.getMessage()); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteMobyService.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteMobyService.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteMobyService.java deleted file mode 100644 index f494d47..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/ExecuteMobyService.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -package net.sf.taverna.t2.activities.biomoby; - -import org.biomoby.client.CentralImpl; -import org.biomoby.shared.MobyException; - -/** - * This class contains one method that is used to execute synchronous moby - * services - * - * @author Edward Kawas - * - */ - -public class ExecuteMobyService { - - /** - * - * @param endpoint - * the SOAP endpoint of the service to call - * @param service - * the name of the service - * @param xml - * the XML to send the service - * @return a string of XML representing the output from the service given - * our input - * @throws MobyException - * if anything goes wrong (SOAP error) - */ - public static String executeMobyService(String endpoint, String service, - String xml) throws MobyException { - return new CentralImpl(endpoint, "http://biomoby.org/").call(service, - xml); - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/709e8c1c/src/main/java/net/sf/taverna/t2/activities/biomoby/GetOntologyThread.java ---------------------------------------------------------------------- diff --git a/src/main/java/net/sf/taverna/t2/activities/biomoby/GetOntologyThread.java b/src/main/java/net/sf/taverna/t2/activities/biomoby/GetOntologyThread.java deleted file mode 100644 index e2402e8..0000000 --- a/src/main/java/net/sf/taverna/t2/activities/biomoby/GetOntologyThread.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * This file is a component of the Taverna project, and is licensed under the - * GNU LGPL. Copyright Edward Kawas, The BioMoby Project - ******************************************************************************/ -/* - * This file is a component of the Taverna project, - * and is licensed under the GNU LGPL. - * Copyright Edward Kawas, The BioMoby Project - */ - -package net.sf.taverna.t2.activities.biomoby; - - -import org.biomoby.client.CentralImpl; - -/** - * This class is used to speed up the running of workflows. Basically, whenever - * a new Biomoby activity is added to taverna, a call out to RESOURCES/Objects - * is made to download the datatype ontology. - * - * Uses BiomobyCache to process the registry - * - * This should speed up the execution of workflows, since the ontologies will - * have already been downloaded. - * - * @author Eddie Kawas - * @author Stuart Owen - * - * @see BiomobyCache - * - */ -public class GetOntologyThread extends Thread { - - - // the registry endpoint - String worker = null; - - /** - * - * @param url - * the registry endpoint URL - */ - public GetOntologyThread(String url) { - super("BioMOBY GetOntologyThread"); - if (url == null || url.trim().equals("")) - url = CentralImpl.getDefaultURL(); - this.worker = url; - setDaemon(true); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Thread#run() - */ - public void run() { - BiomobyCache.cacheForRegistryEndpoint(worker); - } -}