You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2012/04/09 21:11:31 UTC

svn commit: r1311379 - in /incubator/airavata/trunk/modules/xbaya-gui: ./ src/main/java/org/apache/airavata/xbaya/interpretor/ src/main/java/org/apache/airavata/xbaya/invoker/

Author: lahiru
Date: Mon Apr  9 19:11:30 2012
New Revision: 1311379

URL: http://svn.apache.org/viewvc?rev=1311379&view=rev
Log:
adding embedded gfac feature to WorkflowInterpreter.

Added:
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
Modified:
    incubator/airavata/trunk/modules/xbaya-gui/pom.xml
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorSkeleton.java
    incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/GenericInvoker.java

Modified: incubator/airavata/trunk/modules/xbaya-gui/pom.xml
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/pom.xml?rev=1311379&r1=1311378&r2=1311379&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/pom.xml (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/pom.xml Mon Apr  9 19:11:30 2012
@@ -374,6 +374,11 @@
 		</dependency>
         <dependency>
 			<groupId>org.apache.airavata</groupId>
+			<artifactId>gfac-core</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+        <dependency>
+			<groupId>org.apache.airavata</groupId>
 			<artifactId>registry-migrator</artifactId>
 			<version>${project.version}</version>
 		</dependency>

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java?rev=1311379&r1=1311378&r2=1311379&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java Mon Apr  9 19:11:30 2012
@@ -44,7 +44,9 @@ import org.apache.airavata.common.regist
 import org.apache.airavata.common.utils.Pair;
 import org.apache.airavata.common.utils.WSDLUtil;
 import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.registry.api.AiravataRegistry;
 import org.apache.airavata.registry.api.WorkflowExecutionStatus.ExecutionStatus;
+import org.apache.airavata.registry.api.impl.AiravataJCRRegistry;
 import org.apache.airavata.xbaya.XBayaConfiguration;
 import org.apache.airavata.xbaya.XBayaEngine;
 import org.apache.airavata.xbaya.XBayaException;
@@ -94,6 +96,7 @@ import org.apache.airavata.xbaya.graph.w
 import org.apache.airavata.xbaya.graph.ws.WSPort;
 import org.apache.airavata.xbaya.gui.Cancelable;
 import org.apache.airavata.xbaya.gui.WaitDialog;
+import org.apache.airavata.xbaya.invoker.EmbeddedGFacInvoker;
 import org.apache.airavata.xbaya.invoker.GenericInvoker;
 import org.apache.airavata.xbaya.invoker.Invoker;
 import org.apache.airavata.xbaya.invoker.WorkflowInvokerWrapperForGFacInvoker;
@@ -164,6 +167,8 @@ public class WorkflowInterpreter {
 
 	private String topic;
 
+    private Boolean gfacEmbeddedMode = false;
+
 	private LeadResourceMapping resourceMapping;
 
 	private boolean actOnProvenance = false;
@@ -909,19 +914,41 @@ public class WorkflowInterpreter {
 					// if user configure the msgBox url using the UI we have to
 					// pick the latest one which
 					// set by the UI
-					invoker = new GenericInvoker(portTypeQName,
-							WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
-									.getComponent().getWSDL()), node.getID(),
-							this.engine.getMonitor().getConfiguration()
-									.getMessageBoxURL().toASCIIString(),
-							gfacURLString, this.notifier);
+                    if (this.gfacEmbeddedMode) {
+                        invoker = new EmbeddedGFacInvoker(portTypeQName,
+                                WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
+                                        .getComponent().getWSDL()), node.getID(),
+                                this.engine.getMonitor().getConfiguration()
+                                        .getMessageBoxURL().toASCIIString(),
+                                gfacURLString, this.notifier, this.topic,
+                                this.engine.getConfiguration().getJcrComponentRegistry().getRegistry(),
+                                portTypeQName.getLocalPart());
+                    } else {
+                        invoker = new GenericInvoker(portTypeQName,
+                                WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
+                                        .getComponent().getWSDL()), node.getID(),
+                                this.engine.getMonitor().getConfiguration()
+                                        .getMessageBoxURL().toASCIIString(),
+                                gfacURLString, this.notifier);
+                    }
 				} else {
-					invoker = new GenericInvoker(portTypeQName,
-							WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
-									.getComponent().getWSDL()), node.getID(),
-							this.configuration.getMessageBoxURL()
-									.toASCIIString(), gfacURLString,
-							this.notifier);
+                    if(this.gfacEmbeddedMode){
+                        invoker = new EmbeddedGFacInvoker(portTypeQName,
+                                WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
+                                        .getComponent().getWSDL()), node.getID(),
+                                this.configuration.getMessageBoxURL()
+                                        .toASCIIString(),
+                                gfacURLString, this.notifier, this.topic, configuration.getJcrComponentRegistry().getRegistry(),
+                                portTypeQName.getLocalPart());
+                    }else{
+                        invoker = new GenericInvoker(portTypeQName,
+                                WSDLUtil.wsdlDefinitions5ToWsdlDefintions3(wsNode
+                                        .getComponent().getWSDL()), node.getID(),
+                                this.configuration.getMessageBoxURL()
+                                        .toASCIIString(), gfacURLString,
+                                this.notifier);
+
+                    }
 				}
 			}
 
@@ -1818,11 +1845,6 @@ public class WorkflowInterpreter {
 		return list;
 
 	}
-
-
-
-
-
 	public boolean isRunWithCrossProduct() {
 		return runWithCrossProduct;
 	}
@@ -1842,4 +1864,12 @@ public class WorkflowInterpreter {
 	public void setProvenanceWriter(PredicatedTaskRunner provenanceWriter) {
 		this.provenanceWriter = provenanceWriter;
 	}
+
+    public void setGfacEmbeddedMode(Boolean gfacEmbeddedMode) {
+        this.gfacEmbeddedMode = gfacEmbeddedMode;
+    }
+
+    public Boolean getGfacEmbeddedMode() {
+        return gfacEmbeddedMode;
+    }
 }
\ No newline at end of file

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorSkeleton.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorSkeleton.java?rev=1311379&r1=1311378&r2=1311379&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorSkeleton.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpretorSkeleton.java Mon Apr  9 19:11:30 2012
@@ -21,14 +21,21 @@
 
 package org.apache.airavata.xbaya.interpretor;
 
+import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.airavata.common.registry.api.exception.RegistryException;
 import org.apache.airavata.common.registry.api.impl.JCRRegistry;
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.schemas.gfac.GlobusHostType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
 import org.apache.airavata.xbaya.XBayaConfiguration;
 import org.apache.airavata.xbaya.XBayaConstants;
 import org.apache.airavata.xbaya.XBayaException;
@@ -44,8 +51,17 @@ import org.apache.airavata.xbaya.wf.Work
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.engine.ServiceLifeCycle;
+import org.apache.xmlbeans.XmlObject;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
 
 import javax.jcr.RepositoryException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 
 /**
  * WorkflowInterpretorSkeleton java skeleton for the axisService
@@ -69,11 +85,13 @@ public class WorkflowInterpretorSkeleton
     public static  String jcrURL = "";
     public static boolean runInThread = false;
     public static final String RUN_IN_THREAD = "runInThread";
+    public static  Boolean gfacEmbeddedMode = false;
     private static PredicatedTaskRunner runner = null;
     public static  JCRComponentRegistry jcrComponentRegistry = null;
     public static int provenanceWriterThreadPoolSize = 1;
     public static final String PROVENANCE_WRITER_THREAD_POOL_SIZE = "provenanceWriterThreadPoolSize";
     public static final int JCR_AVAIALABILITY_WAIT_INTERVAL = 1000 * 10;
+    public static final String GFAC_EMBEDDED = "gfac.embedded";
 
     public void startUp(final ConfigurationContext configctx, AxisService service) {
     	new Thread(){
@@ -94,19 +112,24 @@ public class WorkflowInterpretorSkeleton
 		            jcrUserName = (String)properties.get(JCR_USER);
 		            jcrPassword = (String) properties.get(JCR_PASS);
 		            jcrURL = (String) properties.get(JCR_URL);
-		            provenanceWriterThreadPoolSize = Integer.parseInt((String)properties.get(PROVENANCE_WRITER_THREAD_POOL_SIZE));
-		
+		            provenanceWriterThreadPoolSize = Integer.parseInt((String) properties.get(PROVENANCE_WRITER_THREAD_POOL_SIZE));
 		            if("true".equals(properties.get(PROVENANCE))){
 		                provenance = true;
 		                runner = new PredicatedTaskRunner(provenanceWriterThreadPoolSize);
 		                try {
 		                    jcrComponentRegistry = new JCRComponentRegistry(new URI(jcrURL),jcrUserName,jcrPassword);
+                            List<HostDescription> hostList = getDefinedHostDescriptions();
+                            for(HostDescription host:hostList){
+                                jcrComponentRegistry.getRegistry().saveHostDescription(host);
+                            }
 		                } catch (RepositoryException e) {
 		                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
 		                } catch (URISyntaxException e) {
 		                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-		                }
-		            }else{
+		                } catch (RegistryException e) {
+                            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                        }
+                    }else{
 		                provenance = false;
 		            }
 		            if("true".equals(properties.get(RUN_IN_THREAD))){
@@ -114,6 +137,12 @@ public class WorkflowInterpretorSkeleton
 		            }else{
 		                runInThread = false;
 		            }
+
+                     if("true".equals(properties.get(GFAC_EMBEDDED))){
+		                gfacEmbeddedMode = true;
+		            }else{
+		                gfacEmbeddedMode = false;
+		            }
 		
 		        } catch (IOException e) {
 		            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
@@ -194,6 +223,7 @@ public class WorkflowInterpretorSkeleton
         final WorkflowInterpreter finalInterpreter = interpreter;
         interpreter.setActOnProvenance(provenance);
         interpreter.setProvenanceWriter(runner);
+        interpreter.setGfacEmbeddedMode(gfacEmbeddedMode);
         final String experimentId = topic;
         System.err.println("Created the interpreter");
         if(inNewThread){
@@ -260,4 +290,43 @@ public class WorkflowInterpretorSkeleton
              runner.shutDown();
          }
     }
+
+    private List<HostDescription> getDefinedHostDescriptions() {
+        URL url = this.getClass().getClassLoader().getResource("host.xml");
+        File fXmlFile = new File(url.getPath());
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder = null;
+        ArrayList<HostDescription> hostDescriptions = new ArrayList<HostDescription>();
+        try {
+            dBuilder = dbFactory.newDocumentBuilder();
+            Document doc = dBuilder.parse(fXmlFile);
+            doc.getDocumentElement().normalize();
+            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
+            NodeList nList = doc.getElementsByTagName("server");
+            for (int temp = 0; temp < nList.getLength(); temp++) {
+                Node nNode = nList.item(temp);
+                HostDescription hostDescription ;
+                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+                    Element eElement = (Element) nNode;
+                    if(XMLUtil.getTagValue("gram.endpoint", eElement) != null){
+                        hostDescription = new HostDescription(GlobusHostType.type);
+                         ((GlobusHostType)hostDescription.getType()).addGlobusGateKeeperEndPoint(XMLUtil.getTagValue("gram.endpoint", eElement));
+                        ((GlobusHostType)hostDescription.getType()).addGridFTPEndPoint(XMLUtil.getTagValue("gridftp.endpoint", eElement));
+                    }else{
+                        hostDescription = new HostDescription(HostDescriptionType.type);
+                    }
+                    (hostDescription.getType()).setHostName(XMLUtil.getTagValue("name", eElement));
+                    (hostDescription.getType()).setHostAddress(XMLUtil.getTagValue("host", eElement));
+                    hostDescriptions.add(hostDescription);
+                }
+            }
+        } catch (ParserConfigurationException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        } catch (SAXException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        } catch (IOException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        return hostDescriptions;
+    }
 }

Added: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java?rev=1311379&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java (added)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java Mon Apr  9 19:11:30 2012
@@ -0,0 +1,470 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.xbaya.invoker;
+
+import org.apache.airavata.common.registry.api.exception.RegistryException;
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+import org.apache.airavata.commons.gfac.type.ActualParameter;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.commons.gfac.wsdl.WSDLConstants;
+import org.apache.airavata.core.gfac.GfacAPI;
+import org.apache.airavata.core.gfac.context.GFacConfiguration;
+import org.apache.airavata.core.gfac.context.JobContext;
+import org.apache.airavata.core.gfac.context.invocation.InvocationContext;
+import org.apache.airavata.core.gfac.context.invocation.impl.DefaultInvocationContext;
+import org.apache.airavata.core.gfac.context.message.MessageContext;
+import org.apache.airavata.core.gfac.context.message.impl.ParameterContextImpl;
+import org.apache.airavata.core.gfac.utils.GfacUtils;
+import org.apache.airavata.registry.api.AiravataRegistry;
+import org.apache.airavata.schemas.gfac.Parameter;
+import org.apache.airavata.schemas.gfac.ServiceDescriptionType;
+import org.apache.airavata.xbaya.XBayaException;
+import org.apache.airavata.xbaya.XBayaRuntimeException;
+import org.apache.airavata.xbaya.invoker.factory.InvokerFactory;
+import org.apache.airavata.xbaya.jython.lib.ServiceNotifiable;
+import org.apache.airavata.xbaya.jython.lib.WorkflowNotifiable;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.builder.XmlElement;
+import xsul.wsdl.WsdlDefinitions;
+import xsul.wsdl.WsdlException;
+import xsul.wsdl.WsdlResolver;
+import xsul.wsif.WSIFMessage;
+import xsul.wsif.impl.WSIFMessageElement;
+import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler;
+import xsul.xwsif_runtime.WSIFClient;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.File;
+import java.io.StringReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.concurrent.*;
+
+public class EmbeddedGFacInvoker implements Invoker{
+
+      private static final Logger logger = LoggerFactory.getLogger(EmbeddedGFacInvoker.class);
+
+    private String nodeID;
+
+    private QName portTypeQName;
+
+    private String wsdlLocation;
+
+    private String serviceInformation;
+
+    private String messageBoxURL;
+
+    private String gfacURL;
+
+    private Invoker invoker;
+
+
+    private Future<Boolean> result;
+
+    private ServiceNotifiable notifier;
+
+    private AiravataRegistry registry;
+
+    private String topic;
+
+    private String serviceName;
+    /**
+     * used for notification
+     */
+    private List<Object> inputValues = new ArrayList<Object>();
+
+    /**
+     * used for notification
+     */
+    private List<String> inputNames = new ArrayList<String>();
+
+    boolean failerSent;
+
+    private WsdlDefinitions wsdlDefinitionObject;
+
+    Map<Parameter,ActualParameter> actualParameters = new HashMap<Parameter,ActualParameter>();
+
+    /**
+     * Creates an InvokerWithNotification.
+     *
+     * @param portTypeQName
+     *
+     * @param wsdlLocation
+     *            The URL of WSDL of the service to invoke
+     * @param nodeID
+     *            The ID of the service
+     * @param notifier
+     *            The notification sender
+     */
+    public EmbeddedGFacInvoker(QName portTypeQName, String wsdlLocation, String nodeID, WorkflowNotifiable notifier) {
+        this(portTypeQName, wsdlLocation, nodeID, null, notifier);
+    }
+
+    /**
+     * Creates an InvokerWithNotification.
+     *
+     * @param portTypeQName
+     *
+     * @param wsdlLocation
+     *            The URL of WSDL of the service to invoke
+     * @param nodeID
+     *            The ID of the service
+     * @param gfacURL
+     *            The URL of GFac service.
+     * @param notifier
+     *            The notification sender
+     */
+    public EmbeddedGFacInvoker(QName portTypeQName, String wsdlLocation, String nodeID, String gfacURL,
+            WorkflowNotifiable notifier) {
+        this(portTypeQName, wsdlLocation, nodeID, null, gfacURL, notifier);
+    }
+
+    /**
+     * Creates an InvokerWithNotification.
+     *
+     * @param portTypeQName
+     *
+     * @param wsdlLocation
+     *            The URL of WSDL of the service to invoke
+     * @param nodeID
+     *            The ID of the service
+     * @param messageBoxURL
+     * @param gfacURL
+     *            The URL of GFac service.
+     * @param notifier
+     *            The notification sender
+     */
+    public EmbeddedGFacInvoker(QName portTypeQName, String wsdlLocation, String nodeID, String messageBoxURL,
+            String gfacURL, WorkflowNotifiable notifier) {
+        this.nodeID = nodeID;
+        this.portTypeQName = portTypeQName;
+        this.wsdlLocation = wsdlLocation;
+        this.serviceInformation = wsdlLocation;
+        this.messageBoxURL = messageBoxURL;
+        this.gfacURL = gfacURL;
+        this.notifier = notifier.createServiceNotificationSender(nodeID);
+
+        this.failerSent = false;
+    }
+
+    /**
+     *
+     * @param portTypeQName
+     * @param wsdl
+     * @param nodeID
+     * @param messageBoxURL
+     * @param gfacURL
+     * @param notifier
+     */
+    public EmbeddedGFacInvoker(QName portTypeQName, WsdlDefinitions wsdl, String nodeID, String messageBoxURL,
+            String gfacURL, WorkflowNotifiable notifier,String topic,AiravataRegistry registry,String serviceName) {
+        final String wsdlStr = xsul.XmlConstants.BUILDER.serializeToString(wsdl);
+        this.nodeID = nodeID;
+        this.portTypeQName = portTypeQName;
+        this.wsdlDefinitionObject = wsdl;
+        this.messageBoxURL = messageBoxURL;
+        this.serviceInformation = wsdlStr;
+        this.gfacURL = gfacURL;
+        this.notifier = notifier.createServiceNotificationSender(nodeID);
+        this.registry = registry;
+        this.topic = topic;
+        this.serviceName = serviceName;
+        this.failerSent = false;
+    }
+
+    /**
+     *
+     * @throws XBayaException
+     */
+    public void setup() throws XBayaException {
+    }
+
+    private void setup(WsdlDefinitions definitions) throws XBayaException {
+    }
+
+    /**
+     *
+     * @param operationName
+     *            The name of the operation
+     * @throws XBayaException
+     */
+    public void setOperation(String operationName) throws XBayaException {
+    }
+
+    /**
+     *
+     * @param name
+     *            The name of the input parameter
+     * @param value
+     *            The value of the input parameter
+     * @throws XBayaException
+     */
+    public void setInput(String name, Object value) throws XBayaException {
+        try {
+            if (value instanceof XmlElement) {
+                logger.info("value: " + XMLUtil.xmlElementToString((XmlElement) value));
+            }
+            this.inputNames.add(name);
+            this.inputValues.add(value);
+            ServiceDescription serviceDescription = registry.getServiceDescription(this.serviceName);
+            ServiceDescriptionType serviceDescriptionType = serviceDescription.getType();
+            for (Parameter parameter : serviceDescriptionType.getInputParametersArray()) {
+                //todo this implementation doesn't work when there are n number of nodes connecting .. need to fix
+                actualParameters.put(parameter, GfacUtils.getInputActualParameter(parameter, (String) value));
+            }
+        } catch (RuntimeException e) {
+            logger.error(e.getMessage(), e);
+            String message = "Error in setting an input. name: " + name + " value: " + value;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (Error e) {
+            logger.error(e.getMessage(), e);
+            String message = "Unexpected error: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (RegistryException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+
+    /**
+     *
+     * @return
+     * @throws XBayaException
+     */
+    public synchronized boolean invoke() throws XBayaException {
+        try {
+            ExecutorService executor = Executors.newSingleThreadExecutor();
+            this.result = executor.submit(new Callable<Boolean>() {
+                @SuppressWarnings("boxing")
+                public Boolean call() {
+                    try {
+                        JobContext jobContext = new JobContext(actualParameters,EmbeddedGFacInvoker.this.topic,EmbeddedGFacInvoker.this.serviceName);
+                        GFacConfiguration gFacConfiguration = new GFacConfiguration("myproxy.teragrid.org", "ogce",
+                            "Jdas7wph", 3600, EmbeddedGFacInvoker.this.gfacURL, EmbeddedGFacInvoker.this.registry, "/Users/lahirugunathilake/Downloads/certificates");
+
+                        GfacAPI gfacAPI1 = new GfacAPI();
+                        InvocationContext defaultInvocationContext = gfacAPI1.gridJobSubmit(jobContext, gFacConfiguration);
+                        ParameterContextImpl outputParamContext = (ParameterContextImpl) defaultInvocationContext
+                                .<ActualParameter>getMessageContext("output");
+                        if (outputParamContext.getNames().hasNext()) {
+                            /*
+                            * Process Output
+                            */
+                            OMFactory fac = OMAbstractFactory.getOMFactory();
+                            OMNamespace omNs = fac.createOMNamespace("http://ws.apache.org/axis2/xsd", "ns1");
+                            OMElement outputElement = fac.createOMElement("invokeResponse", omNs);
+
+                            for (Iterator<String> iterator = outputParamContext.getNames(); iterator.hasNext(); ) {
+                                String name = iterator.next();
+                                String outputString = outputParamContext.getValue(name).toXML().replaceAll("GFacParameter", name);
+                                XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(outputString));
+                                StAXOMBuilder builder = new StAXOMBuilder(reader);
+                                outputElement.addChild(builder.getDocumentElement());
+                            }
+                            // Send notification
+                            logger.info("outputMessage: " + outputElement.toString());
+                            EmbeddedGFacInvoker.this.notifier.serviceFinished(new WSIFMessageElement(XMLUtil.stringToXmlElement3(outputElement.toStringWithConsume())));
+                        } else {
+                            // An implementation of WSIFMessage,
+                            // WSIFMessageElement, implements toString(), which
+                            // serialize the message XML.
+                            EmbeddedGFacInvoker.this.notifier.receivedFault(new WSIFMessageElement(XMLUtil.stringToXmlElement3("<Message>Invocation Failed</Message>")));
+                            EmbeddedGFacInvoker.this.failerSent = true;
+                        }
+                        return true;
+                    } catch (XBayaException e) {
+                        logger.error(e.getMessage(), e);
+                        // An appropriate message has been set in the exception.
+                        EmbeddedGFacInvoker.this.notifier.invocationFailed(e.getMessage(), e);
+                        EmbeddedGFacInvoker.this.failerSent = true;
+                        throw new XBayaRuntimeException(e);
+                    } catch (RuntimeException e) {
+                        logger.error(e.getMessage(), e);
+                        String message = "Error in invoking a service: " + EmbeddedGFacInvoker.this.serviceInformation;
+                        EmbeddedGFacInvoker.this.notifier.invocationFailed(message, e);
+                        EmbeddedGFacInvoker.this.failerSent = true;
+                        throw e;
+                    } catch (XMLStreamException e) {
+                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                    } catch (Exception e) {
+                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                    }
+                    return false;
+                }
+            });
+            // Kill the thread inside of executor. This is necessary for Jython
+            // script to finish.
+//            executor.shutdown();
+
+            // Let other threads know that job has been submitted.
+            notifyAll();
+
+            // Check if the invocation itself fails. This happens immediately.
+            try {
+                this.result.get(100, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                logger.error(e.getMessage(), e);
+            } catch (TimeoutException e) {
+                // The job is probably running fine.
+                // The normal case.
+                return true;
+            } catch (ExecutionException e) {
+                // The service-failed notification should have been sent
+                // already.
+                logger.error(e.getMessage(), e);
+                String message = "Error in invoking a service: " + this.serviceInformation;
+                throw new XBayaException(message, e);
+            }
+        } catch (RuntimeException e) {
+            logger.error(e.getMessage(), e);
+            String message = "Error in invoking a service: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (Error e) {
+            logger.error(e.getMessage(), e);
+            String message = "Unexpected error: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (Exception e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        return true;
+    }
+
+    /**
+     *
+     * @throws XBayaException
+     */
+    @SuppressWarnings("boxing")
+    public synchronized void waitToFinish() throws XBayaException {
+        try {
+            while (this.result == null) {
+                // The job is not submitted yet.
+                try {
+                    wait();
+                } catch (InterruptedException e) {
+                    logger.error(e.getMessage(), e);
+                }
+            }
+            // Wait for the job to finish.
+            Boolean success = this.result.get();
+            if (success == false) {
+                WSIFMessage faultMessage = this.invoker.getFault();
+                String message = "Error in a service: ";
+                // An implementation of WSIFMessage,
+                // WSIFMessageElement, implements toString(), which
+                // serialize the message XML.
+                message += faultMessage.toString();
+                throw new XBayaException(message);
+            }
+        } catch (InterruptedException e) {
+            logger.error(e.getMessage(), e);
+        } catch (ExecutionException e) {
+            // The service-failed notification should have been sent already.
+            logger.error(e.getMessage(), e);
+            String message = "Error in invoking a service: " + this.serviceInformation;
+            throw new XBayaException(message, e);
+        } catch (RuntimeException e) {
+            logger.error(e.getMessage(), e);
+            String message = "Error while waiting for a service to finish: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (Error e) {
+            logger.error(e.getMessage(), e);
+            String message = "Unexpected error: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        }
+    }
+
+    /**
+     *
+     * @param name
+     *            The name of the output parameter
+     * @return
+     * @throws XBayaException
+     */
+    public Object getOutput(String name) throws XBayaException {
+        try {
+            waitToFinish();
+            Object output = this.invoker.getOutput(name);
+            if (output instanceof XmlElement) {
+                logger.info("output: " + XMLUtil.xmlElementToString((XmlElement) output));
+            }
+            return output;
+        } catch (XBayaException e) {
+            logger.error(e.getMessage(), e);
+            // An appropriate message has been set in the exception.
+            if (!this.failerSent) {
+                this.notifier.invocationFailed(e.getMessage(), e);
+            }
+            throw e;
+        } catch (RuntimeException e) {
+            logger.error(e.getMessage(), e);
+            String message = "Error while waiting for a output: " + name;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        } catch (Error e) {
+            logger.error(e.getMessage(), e);
+            String message = "Unexpected error: " + this.serviceInformation;
+            this.notifier.invocationFailed(message, e);
+            throw new XBayaException(message, e);
+        }
+    }
+
+    /**
+     *
+     * @return
+     * @throws XBayaException
+     */
+    public WSIFMessage getOutputs() throws XBayaException {
+        return this.invoker.getOutputs();
+    }
+
+    @Override
+    public WSIFClient getClient() {
+        return null;
+    }
+
+    @Override
+    public WSIFMessage getInputs() throws XBayaException {
+        return null;
+    }
+
+    @Override
+    public WSIFMessage getFault() throws XBayaException {
+        return null;
+    }
+}

Modified: incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/GenericInvoker.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/GenericInvoker.java?rev=1311379&r1=1311378&r2=1311379&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/GenericInvoker.java (original)
+++ incubator/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/GenericInvoker.java Mon Apr  9 19:11:30 2012
@@ -149,7 +149,6 @@ public class GenericInvoker implements I
         this.messageBoxURL = messageBoxURL;
         this.gfacURL = gfacURL;
         this.notifier = notifier.createServiceNotificationSender(nodeID);
-
         this.failerSent = false;
     }
 
@@ -172,7 +171,6 @@ public class GenericInvoker implements I
         this.serviceInformation = wsdlStr;
         this.gfacURL = gfacURL;
         this.notifier = notifier.createServiceNotificationSender(nodeID);
-
         this.failerSent = false;
     }
 
@@ -233,10 +231,6 @@ public class GenericInvoker implements I
         //todo write a UI component to collect this information and pass it through Header
 //        builder.setGridMyProxyRepository("myproxy.nersc.gov","fangliu","Jdas7wph",14000);
         StickySoapHeaderHandler handler = new StickySoapHeaderHandler("use-workflowcontext-header", builder.getXml());
-
-
-
-
         // Create Invoker
         this.invoker = InvokerFactory.createInvoker(this.portTypeQName, definitions, this.gfacURL, this.messageBoxURL,
                 builder, true);