Author: samindaw
Date: Thu Dec 20 14:53:00 2012
New Revision: 1424502

URL: http://svn.apache.org/viewvc?rev=1424502&view=rev
Log:
adding execution advance options impl + updating the API + api impl

Added:
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
   (with props)
Modified:
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
    
airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties

Modified: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
 (original)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExecutionManager.java
 Thu Dec 20 14:53:00 2012
@@ -32,14 +32,25 @@ import org.apache.airavata.ws.monitor.Mo
 public interface ExecutionManager {
     /**
      * Run an experiment containing single workflow
-     * @param workflowTemplateId
+     * @param workflow - Workflow template Id or Workflow Graph XML
      * @param inputs
      * @return
      * @throws AiravataAPIInvocationException
      */
-       public String runExperiment(String 
workflowTemplateId,List<WorkflowInput> inputs) throws 
AiravataAPIInvocationException;
+       public String runExperiment(String workflow,List<WorkflowInput> inputs) 
throws AiravataAPIInvocationException;
 
     /**
+     * Run an experiment containing single workflow with custom settings for 
the experiment
+     * @param workflow - Workflow template Id or Workflow Graph XML
+     * @param inputs
+     * @param options
+     * @return
+     * @throws AiravataAPIInvocationException
+     */
+       public String runExperiment(String workflow,List<WorkflowInput> inputs, 
ExperimentAdvanceOptions options) throws AiravataAPIInvocationException;
+
+       
+    /**
      * Run an experiment containing single workflow
      * @param workflow
      * @param inputs
@@ -49,6 +60,7 @@ public interface ExecutionManager {
        public String runExperiment(Workflow workflow,List<WorkflowInput> 
inputs) throws AiravataAPIInvocationException;
 
     /**
+     * @deprecated Use the function 
<code>runExperiment(String,List&ltWorkflowInput&gt,ExperimentAdvanceOptions)</code>
 instead. <br />
      * Run an experiment containing single workflow
      * @param workflowTemplateId
      * @param inputs
@@ -61,6 +73,7 @@ public interface ExecutionManager {
        public String runExperiment(String 
workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, 
String workflowInstanceName)throws AiravataAPIInvocationException;
 
        /**
+        * @deprecated Use the function 
<code>runExperiment(String,List&ltWorkflowInput&gt,ExperimentAdvanceOptions)</code>
 instead. <br />
      * Run an experiment containing single workflow
      * @param workflowTemplateId
      * @param inputs
@@ -73,6 +86,7 @@ public interface ExecutionManager {
        public String runExperiment(String 
workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, 
String workflowInstanceName, String experimentName)throws 
AiravataAPIInvocationException;
 
        /**
+        * @deprecated Use the function 
<code>runExperiment(String,List&ltWorkflowInput&gt,ExperimentAdvanceOptions)</code>
 instead. <br />
         * Run an experiment containing single workflow
         * @param workflowTemplateId
         * @param inputs
@@ -86,6 +100,7 @@ public interface ExecutionManager {
        public String runExperiment(String 
workflowTemplateId,List<WorkflowInput> inputs, String user, String metadata, 
String workflowInstanceName, WorkflowContextHeaderBuilder builder)throws 
AiravataAPIInvocationException;
 
     /**
+     * @deprecated Use the function 
<code>runExperiment(String,List&ltWorkflowInput&gt,ExperimentAdvanceOptions)</code>
 instead. <br />
      * Run an experiment containing single workflow
      * @param workflow
      * @param inputs
@@ -114,6 +129,7 @@ public interface ExecutionManager {
        public Monitor getExperimentMonitor(String experimentId, 
MonitorEventListener listener) throws AiravataAPIInvocationException;
 
        /**
+        * @deprecated
         * Creates a WorkflowContextHeaderBuilder object that can be used to 
customize the scheduling of a workflow execution.
         * Once configured this object run the workflow using
         *   <code>runWorkflow(String workflowTemplateId,List<WorkflowInput> 
inputs, String user, String metadata, String workflowInstanceName, 
WorkflowContextHeaderBuilder builder)</code>
@@ -123,11 +139,6 @@ public interface ExecutionManager {
        public WorkflowContextHeaderBuilder createWorkflowContextHeader() 
throws AiravataAPIInvocationException;
 
 
-    /**
-     * Creates a DefaultExecutionContext.
-     * @return DefaultExecutionContext
-     * @throws AiravataAPIInvocationException AiravataAPIInvocationException
-     */
-//    public DefaultExecutionContext createDefaultExecutionContext() throws 
AiravataAPIInvocationException;
+    public ExperimentAdvanceOptions createExperimentAdvanceOptions() throws 
AiravataAPIInvocationException;
 
 }

Modified: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
 (original)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ExperimentAdvanceOptions.java
 Thu Dec 20 14:53:00 2012
@@ -100,8 +100,9 @@ public interface ExperimentAdvanceOption
         * Users should use the function 
</i><code><b>setCustomWorkflowContext(...)</b></code><i> to do 
         * so</i>.
         * @return A WorkflowContextHeaderBuilder object.
+        * @throws AiravataAPIInvocationException 
         */
-       public WorkflowContextHeaderBuilder newCustomWorkflowContext();
+       public WorkflowContextHeaderBuilder newCustomWorkflowContext() throws 
AiravataAPIInvocationException;
        
        /**
         * Create a unique experiment Id.<br />

Modified: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
 (original)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExecutionManagerImpl.java
 Thu Dec 20 14:53:00 2012
@@ -21,18 +21,32 @@
 
 package org.apache.airavata.client.impl;
 
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.UUID;
+
+import javax.xml.stream.XMLStreamException;
+
 import org.apache.airavata.client.AiravataClient;
 import org.apache.airavata.client.AiravataClientConfiguration;
 import org.apache.airavata.client.api.AiravataAPIInvocationException;
 import org.apache.airavata.client.api.ExecutionManager;
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import org.apache.airavata.client.stub.interpretor.NameValue;
+import org.apache.airavata.client.stub.interpretor.WorkflowInterpretorStub;
+import org.apache.airavata.common.utils.XMLUtil;
 import 
org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+import org.apache.airavata.workflow.model.component.ComponentException;
+import org.apache.airavata.workflow.model.component.ws.WSComponentPort;
+import org.apache.airavata.workflow.model.graph.GraphException;
 import org.apache.airavata.workflow.model.wf.Workflow;
 import org.apache.airavata.workflow.model.wf.WorkflowInput;
 import org.apache.airavata.ws.monitor.Monitor;
 import org.apache.airavata.ws.monitor.MonitorEventListener;
-
-import java.util.Calendar;
-import java.util.List;
+import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
+import org.apache.axis2.AxisFault;
 
 public class ExecutionManagerImpl implements ExecutionManager {
        private AiravataClient client;
@@ -120,19 +134,6 @@ public class ExecutionManagerImpl implem
                }
        }
 
-//    @Override
-//    public DefaultExecutionContext createDefaultExecutionContext() throws 
AiravataAPIInvocationException {
-//        DefaultExecutionContext ec = new DefaultExecutionContext();
-////        ec.addNotifiable(new LoggingNotification());
-////        try {
-//            // TODO : Fix me
-////            ec.setRegistryService(getClient().getRegistry());
-////        } catch (RegistryException e) {
-////            throw new AiravataAPIInvocationException(e);
-////        }
-//        return  ec;
-//    }
-
        @Override
        public String runExperiment(String workflowName,
                        List<WorkflowInput> inputs, String user, String 
metadata,
@@ -145,4 +146,141 @@ public class ExecutionManagerImpl implem
                }
        }
 
+       @Override
+       public String runExperiment(String workflow,
+                       List<WorkflowInput> inputs, ExperimentAdvanceOptions 
options)
+                       throws AiravataAPIInvocationException {
+               return runWorkflow(workflow, inputs, options);
+       }
+       
+       private String runWorkflow(String workflowName, List<WorkflowInput> 
inputs, ExperimentAdvanceOptions options) throws AiravataAPIInvocationException 
{
+               Workflow workflowObj = extractWorkflow(workflowName);
+               return runWorkflow(workflowName, workflowObj, inputs, options);
+       }
+       
+       private String runWorkflow(String workflowName, Workflow workflowObj, 
List<WorkflowInput> inputs, ExperimentAdvanceOptions options) throws 
AiravataAPIInvocationException {
+               try {
+               
+                       String workflowString = 
XMLUtil.xmlElementToString(workflowObj.toXML());
+                       List<WSComponentPort> ports = 
getWSComponentPortInputs(workflowObj);
+                       for (WorkflowInput input : inputs) {
+                               WSComponentPort port = 
getWSComponentPort(input.getName(),
+                                               ports);
+                               if (port != null) {
+                                       port.setValue(input.getValue());
+                               }
+                       }
+                       List<NameValue> inputValues = new 
ArrayList<NameValue>();
+                       for (WSComponentPort port : ports) {
+                               NameValue nameValue = new NameValue();
+                               nameValue.setName(port.getName());
+                               if (port.getValue() == null) {
+                                       
nameValue.setValue(port.getDefaultValue());
+                               } else {
+                                       
nameValue.setValue(port.getValue().toString());
+                               }
+                               inputValues.add(nameValue);
+                       }
+                       String experimentID=options.getCustomExperimentId();
+                       String workflowTemplateName = workflowObj.getName();
+                       if (experimentID == null || experimentID.isEmpty()) {
+                               experimentID = workflowTemplateName + "_" + 
UUID.randomUUID();
+                       }
+               
getClient().getProvenanceManager().setWorkflowInstanceTemplateName(experimentID,workflowTemplateName);
+               
+                       WorkflowContextHeaderBuilder 
builder=options.getCustomWorkflowContext();
+                       if (builder==null){
+                               builder=options.newCustomWorkflowContext();
+                       }
+                       
+                       //TODO - fix user passing
+               String submissionUser = 
getClient().getUserManager().getAiravataUser();
+                       builder.setUserIdentifier(submissionUser);
+                       String 
executionUser=options.getExperimentExecutionUser();
+                       if (executionUser==null){
+                               executionUser=submissionUser;
+                       }
+                       runPreWorkflowExecutionTasks(experimentID, 
executionUser, options.getExperimentMetadata(), options.getExperimentName());
+                       NameValue[] inputVals = inputValues.toArray(new 
NameValue[] {});
+                       launchWorkflow(experimentID, workflowString, inputVals, 
builder);
+                       return experimentID;
+                       
+               }  catch (GraphException e) {
+                       throw new AiravataAPIInvocationException(e);
+               } catch (ComponentException e) {
+                       throw new AiravataAPIInvocationException(e);
+               } catch (Exception e) {
+               throw new AiravataAPIInvocationException("Error working with 
Airavata Registry: " + e.getLocalizedMessage(), e);
+           }
+       }
+    private Workflow extractWorkflow(String workflowName) throws 
AiravataAPIInvocationException {
+        Workflow workflowObj = null;
+        if(getClient().getWorkflowManager().isWorkflowExists(workflowName)) {
+            workflowObj = 
getClient().getWorkflowManager().getWorkflow(workflowName);
+        }else {
+            try{
+                workflowObj = 
getClient().getWorkflowManager().getWorkflowFromString(workflowName);
+            }catch (AiravataAPIInvocationException e){
+               getClient().getWorkflowManager().getWorkflow(workflowName);
+            }
+
+        }
+        return workflowObj;
+    }
+    
+       private List<WSComponentPort> getWSComponentPortInputs(Workflow 
workflow)
+                       throws GraphException, ComponentException {
+               workflow.createScript();
+               List<WSComponentPort> inputs = workflow.getInputs();
+               return inputs;
+       }
+
+       private WSComponentPort getWSComponentPort(String name,
+                       List<WSComponentPort> ports) {
+               for (WSComponentPort port : ports) {
+                       if (port.getName().equals(name)) {
+                               return port;
+                       }
+               }
+               return null;
+       }
+       
+       private void launchWorkflow(String experimentId, String workflowGraph, 
NameValue[] inputs,
+                       WorkflowContextHeaderBuilder builder) throws 
AiravataAPIInvocationException {
+               try {
+                       
builder.getWorkflowMonitoringContext().setExperimentId(experimentId);
+                       WorkflowInterpretorStub stub = new 
WorkflowInterpretorStub(getClient().getAiravataManager().getWorkflowInterpreterServiceURL().toString());
+                       stub._getServiceClient().addHeader(
+                                       
AXIOMUtil.stringToOM(XMLUtil.xmlElementToString(builder
+                                                       .getXml())));
+                       stub.launchWorkflow(workflowGraph, experimentId, 
inputs);
+               } catch (AxisFault e) {
+                       e.printStackTrace();
+               } catch (XMLStreamException e) {
+                       e.printStackTrace();
+               } catch (RemoteException e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       private void runPreWorkflowExecutionTasks(String experimentId, String 
user,
+                       String metadata, String experimentName) throws 
AiravataAPIInvocationException {
+               if (user != null) {
+                       
getClient().getProvenanceManager().setExperimentUser(experimentId, user);
+               }
+               if (metadata != null) {
+                       
getClient().getProvenanceManager().setExperimentMetadata(experimentId, 
metadata);
+               }
+               if (experimentName == null) {
+                       experimentName = experimentId;
+               }
+               
getClient().getProvenanceManager().setExperimentName(experimentId, 
experimentName);
+       }
+       
+       @Override
+       public ExperimentAdvanceOptions createExperimentAdvanceOptions()
+                       throws AiravataAPIInvocationException {
+               return new ExperimentAdavanceOptionsImpl(getClient());
+       }
+
 }

Added: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java?rev=1424502&view=auto
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
 (added)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
 Thu Dec 20 14:53:00 2012
@@ -0,0 +1,106 @@
+/*
+ *
+ * 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.client.impl;
+
+import java.util.UUID;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.AiravataAPIInvocationException;
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import 
org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+
+public class ExperimentAdavanceOptionsImpl implements ExperimentAdvanceOptions 
{
+       private String executionUser;
+       private String metadata;
+       private String experimentName;
+       private String customExperimentId;
+       private WorkflowContextHeaderBuilder workflowContext;
+       
+       private AiravataAPI api;
+       
+       public ExperimentAdavanceOptionsImpl(AiravataAPI api) {
+               this.api=api;
+       }
+       
+       @Override
+       public String getExperimentExecutionUser() {
+               return executionUser;
+       }
+
+       @Override
+       public String getExperimentMetadata() {
+               return metadata;
+       }
+
+       @Override
+       public String getExperimentName() {
+               return experimentName;
+       }
+
+       @Override
+       public String getCustomExperimentId() {
+               return customExperimentId;
+       }
+
+       @Override
+       public WorkflowContextHeaderBuilder getCustomWorkflowContext() {
+               return workflowContext;
+       }
+
+       @Override
+       public void setExperimentExecutioUser(String experimentExecutionUser) {
+               this.executionUser=experimentExecutionUser;
+
+       }
+
+       @Override
+       public void setExperimentCustomMetadata(String experimentMetadata) {
+               this.metadata=experimentMetadata;
+       }
+
+       @Override
+       public void setExperimentName(String experimentName) {
+               this.experimentName=experimentName;
+       }
+
+       @Override
+       public void setCustomExperimentId(String customExperimentId) {
+               this.customExperimentId=customExperimentId;
+       }
+
+       @Override
+       public void setCustomWorkflowContext(
+                       WorkflowContextHeaderBuilder workflowContext) {
+               this.workflowContext=workflowContext;
+       }
+
+       @Override
+       public WorkflowContextHeaderBuilder newCustomWorkflowContext() throws 
AiravataAPIInvocationException {
+               return api.getExecutionManager().createWorkflowContextHeader();
+       }
+
+       @Override
+       public String generatExperimentId() {
+               return UUID.randomUUID().toString();
+       }
+
+}

Propchange: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ExperimentAdavanceOptionsImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties?rev=1424502&r1=1424501&r2=1424502&view=diff
==============================================================================
--- 
airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties
 (original)
+++ 
airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/airavata-server.properties
 Thu Dec 20 14:53:00 2012
@@ -67,7 +67,7 @@ system.password=admin
 # Airavata Workflow Interpreter Configurations
 ###########################################################################
 
-runInThread=false
+runInThread=true
 provenance=true
 provenanceWriterThreadPoolSize=20
 gfac.embedded=false


Reply via email to