You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ra...@apache.org on 2014/05/06 16:38:00 UTC

[1/2] git commit: Fixed output population. AIRAVATA-1185

Repository: airavata
Updated Branches:
  refs/heads/master 14c1841ca -> ee79b70b6


Fixed output population. AIRAVATA-1185

Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9be225ac
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9be225ac
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9be225ac

Branch: refs/heads/master
Commit: 9be225ac4013ffea801b7d1b516fc09f830740f4
Parents: 0eabb93
Author: raminder <ra...@apache.org>
Authored: Tue May 6 10:27:16 2014 -0400
Committer: raminder <ra...@apache.org>
Committed: Tue May 6 10:27:16 2014 -0400

----------------------------------------------------------------------
 .../apache/airavata/gfac/utils/OutputUtils.java | 45 ++++++++++++++++
 .../gfac/handler/GSISSHOutputHandler.java       | 54 +++++++++++++-------
 .../airavata/gfac/handler/SSHOutputHandler.java | 28 ++++++----
 3 files changed, 98 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/9be225ac/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/OutputUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/OutputUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/OutputUtils.java
index efcbcd5..fa47745 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/OutputUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/utils/OutputUtils.java
@@ -21,6 +21,7 @@
 package org.apache.airavata.gfac.utils;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -30,6 +31,8 @@ import org.apache.airavata.common.utils.StringUtil;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
 import org.apache.airavata.commons.gfac.type.MappingFactory;
 import org.apache.airavata.gfac.handler.GFacHandlerException;
+import org.apache.airavata.model.workspace.experiment.DataObjectType;
+import org.apache.airavata.schemas.gfac.DataType;
 import org.apache.airavata.schemas.gfac.StdErrParameterType;
 import org.apache.airavata.schemas.gfac.StdOutParameterType;
 
@@ -71,6 +74,48 @@ public class OutputUtils {
 
         return result;
     }
+    
+    public static  void fillOutputFromStdout1(Map<String, Object> output, String stdout, String stderr,List<DataObjectType> outputArray) throws Exception {
+
+        if (stdout == null || stdout.equals("")){
+            throw new GFacHandlerException("Standard output is empty.");
+        }
+
+        Set<String> keys = output.keySet();
+        for (String paramName : keys) {
+        	ActualParameter actual = (ActualParameter) output.get(paramName);
+            // if parameter value is not already set, we let it go
+            
+            if (actual == null) {
+                continue;
+            }
+            if ("StdOut".equals(actual.getType().getType().toString())) {
+                DataObjectType out = new DataObjectType();
+                out.setKey(paramName);
+                out.setType(DataType.STD_OUT.toString());
+                out.setValue(stdout);
+                outputArray.add(out);
+            } else if ("StdErr".equals(actual.getType().getType().toString())) {
+                DataObjectType out = new DataObjectType();
+                out.setKey(paramName);
+                out.setType(DataType.STD_ERR.toString());
+                out.setValue(stderr);
+                outputArray.add(out);
+            }else if("URI".equals(actual.getType().getType().toString())){
+            	continue;
+            } 
+            else {
+                String parseStdout = parseStdout(stdout, paramName);
+                if (parseStdout != null) {
+                    DataObjectType out = new DataObjectType();
+                    out.setKey(paramName);
+                    out.setType(DataType.STRING.toString());
+                    out.setValue(parseStdout);
+                    outputArray.add(out);
+                }
+            }
+        }
+    }
 
     private static String parseStdout(String stdout, String outParam) throws Exception {
         String regex = Pattern.quote(outParam) + regexPattern;

http://git-wip-us.apache.org/repos/asf/airavata/blob/9be225ac/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/handler/GSISSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/handler/GSISSHOutputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/handler/GSISSHOutputHandler.java
index fd80d56..6eff137 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/handler/GSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/handler/GSISSHOutputHandler.java
@@ -20,8 +20,18 @@
 */
 package org.apache.airavata.gfac.handler;
 
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import net.schmizz.sshj.connection.ConnectionException;
 import net.schmizz.sshj.transport.TransportException;
+
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.Constants;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
@@ -35,7 +45,14 @@ import org.apache.airavata.gfac.utils.GFacUtils;
 import org.apache.airavata.gfac.utils.OutputUtils;
 import org.apache.airavata.gsi.ssh.api.Cluster;
 import org.apache.airavata.gsi.ssh.api.job.JobDescriptor;
-import org.apache.airavata.model.workspace.experiment.*;
+import org.apache.airavata.model.workspace.experiment.CorrectiveAction;
+import org.apache.airavata.model.workspace.experiment.DataObjectType;
+import org.apache.airavata.model.workspace.experiment.DataTransferDetails;
+import org.apache.airavata.model.workspace.experiment.ErrorCategory;
+import org.apache.airavata.model.workspace.experiment.JobDetails;
+import org.apache.airavata.model.workspace.experiment.TaskDetails;
+import org.apache.airavata.model.workspace.experiment.TransferState;
+import org.apache.airavata.model.workspace.experiment.TransferStatus;
 import org.apache.airavata.registry.cpi.ChildDataType;
 import org.apache.airavata.registry.cpi.DataType;
 import org.apache.airavata.registry.cpi.RegistryException;
@@ -46,12 +63,8 @@ import org.apache.xmlbeans.XmlException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
 
 public class GSISSHOutputHandler extends AbstractHandler{
     private static final Logger log = LoggerFactory.getLogger(GSISSHOutputHandler.class);
@@ -154,7 +167,7 @@ public class GSISSHOutputHandler extends AbstractHandler{
             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
 
 
-            Map<String, ActualParameter> stringMap = new HashMap<String, ActualParameter>();
+            List<DataObjectType> outputArray = new ArrayList<DataObjectType>();
             Map<String, Object> output = jobExecutionContext.getOutMessageContext().getParameters();
             Set<String> keys = output.keySet();
             for (String paramName : keys) {
@@ -163,31 +176,36 @@ public class GSISSHOutputHandler extends AbstractHandler{
 
                     List<String> outputList = cluster.listDirectory(app.getOutputDataDirectory());
                     if (outputList.size() == 0 || outputList.get(0).isEmpty()) {
-                        stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
+                        OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr, outputArray);
+                        break;
                     } else {
                         String valueList = outputList.get(0);
                         cluster.scpFrom(app.getOutputDataDirectory() + File.separator + valueList, outputDataDir);
                         jobExecutionContext.addOutputFile(outputDataDir + File.separator + valueList);
-                        ((URIParameterType) actualParameter.getType()).setValue(valueList);
-                        stringMap = new HashMap<String, ActualParameter>();
-                        stringMap.put(paramName, actualParameter);
+                        DataObjectType dataObjectType = new DataObjectType();
+                        dataObjectType.setValue(valueList);
+                        dataObjectType.setKey(paramName);
+                        dataObjectType.setType(org.apache.airavata.schemas.gfac.DataType.URI.toString());
+                        outputArray.add(dataObjectType);
                     }
                 } else {
-                    stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
+                    OutputUtils.fillOutputFromStdout1(output, stdOutStr,stdErrStr, outputArray);
+                    break;
                 }
             }
-            if (stringMap == null || stringMap.isEmpty()) {
+            if (outputArray == null || outputArray.isEmpty()) {
                 throw new GFacHandlerException(
                         "Empty Output returned from the Application, Double check the application"
                                 + "and ApplicationDescriptor output Parameter Names");
             }
-            status.setTransferState(TransferState.DOWNLOAD);
-            detail.setTransferStatus(status);
-            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-
             app.setStandardError(localStdErrFile.getAbsolutePath());
             app.setStandardOutput(localStdOutFile.getAbsolutePath());
             app.setOutputDataDirectory(outputDataDir);
+            status.setTransferState(TransferState.DOWNLOAD);
+            detail.setTransferStatus(status);
+            detail.setTransferDescription(outputDataDir);
+            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+            registry.add(ChildDataType.EXPERIMENT_OUTPUT, outputArray, jobExecutionContext.getExperimentID());
         } catch (XmlException e) {
             throw new GFacHandlerException("Cannot read output:" + e.getMessage(), e);
         } catch (ConnectionException e) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9be225ac/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/handler/SSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/handler/SSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/handler/SSHOutputHandler.java
index 42cebba..c70469f 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/handler/SSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/handler/SSHOutputHandler.java
@@ -22,6 +22,7 @@ package org.apache.airavata.gfac.handler;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -150,7 +151,7 @@ public class SSHOutputHandler extends AbstractHandler{
             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
 
 
-            Map<String, ActualParameter> stringMap = new HashMap<String, ActualParameter>();
+            List<DataObjectType> outputArray = new ArrayList<DataObjectType>();
             Map<String, Object> output = jobExecutionContext.getOutMessageContext().getParameters();
             Set<String> keys = output.keySet();
             for (String paramName : keys) {
@@ -159,31 +160,36 @@ public class SSHOutputHandler extends AbstractHandler{
 
                     List<String> outputList = cluster.listDirectory(app.getOutputDataDirectory());
                     if (outputList.size() == 0 || outputList.get(0).isEmpty()) {
-                        stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
+                        OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr,outputArray);
+                        break;
                     } else {
                         String valueList = outputList.get(0);
                         cluster.scpFrom(app.getOutputDataDirectory() + File.separator + valueList, outputDataDir);
                         jobExecutionContext.addOutputFile(outputDataDir + File.separator + valueList);
-                        ((URIParameterType) actualParameter.getType()).setValue(valueList);
-                        stringMap = new HashMap<String, ActualParameter>();
-                        stringMap.put(paramName, actualParameter);
+                        DataObjectType dataObjectType = new DataObjectType();
+                        dataObjectType.setValue(valueList);
+                        dataObjectType.setKey(paramName);
+                        dataObjectType.setType(org.apache.airavata.schemas.gfac.DataType.URI.toString());
+                        outputArray.add(dataObjectType);
                     }
                 } else {
-                    stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
+                    OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr,outputArray);
                 }
             }
-            if (stringMap == null || stringMap.isEmpty()) {
+            if (outputArray == null || outputArray.isEmpty()) {
                 throw new GFacHandlerException(
                         "Empty Output returned from the Application, Double check the application"
                                 + "and ApplicationDescriptor output Parameter Names");
             }
-            status.setTransferState(TransferState.DOWNLOAD);
-            detail.setTransferStatus(status);
-            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-
             app.setStandardError(localStdErrFile.getAbsolutePath());
             app.setStandardOutput(localStdOutFile.getAbsolutePath());
             app.setOutputDataDirectory(outputDataDir);
+            status.setTransferState(TransferState.DOWNLOAD);
+            detail.setTransferStatus(status);
+            detail.setTransferDescription(outputDataDir);
+            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+            registry.add(ChildDataType.EXPERIMENT_OUTPUT, outputArray, jobExecutionContext.getExperimentID());
+            
         } catch (XmlException e) {
             throw new GFacHandlerException("Cannot read output:" + e.getMessage(), e);
         } catch (ConnectionException e) {


[2/2] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/airavata

Posted by ra...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/airavata

Conflicts:
	modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutputUtils.java


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/ee79b70b
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/ee79b70b
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/ee79b70b

Branch: refs/heads/master
Commit: ee79b70b6ddc71ac8999ca6ccea240555ce5b967
Parents: 9be225a 14c1841
Author: raminder <ra...@apache.org>
Authored: Tue May 6 10:37:00 2014 -0400
Committer: raminder <ra...@apache.org>
Committed: Tue May 6 10:37:00 2014 -0400

----------------------------------------------------------------------
 .../client/samples/CreateLaunchExperiment.java  |   3 +-
 .../airavata/common/utils/ServerSettings.java   |   5 +
 .../main/resources/airavata-server.properties   |   4 +-
 .../server/src/main/resources/gfac-config.xml   |  47 +-
 modules/distribution/server/pom.xml             |   5 +
 .../server/src/main/assembly/bin-assembly.xml   |   1 +
 .../gfac/bes/provider/impl/BESProvider.java     | 568 ++++++++++++++
 .../gfac/bes/security/GSISecurityContext.java   | 288 ++++++++
 .../gfac/bes/utils/ApplicationProcessor.java    | 252 +++++++
 .../gfac/bes/utils/DataStagingProcessor.java    | 236 ++++++
 .../gfac/bes/utils/DataTransferrer.java         | 241 ++++++
 .../airavata/gfac/bes/utils/FileDownloader.java | 256 +++++++
 .../gfac/bes/utils/FileTransferBase.java        | 227 ++++++
 .../airavata/gfac/bes/utils/FileUploader.java   | 245 ++++++
 .../airavata/gfac/bes/utils/JSDLGenerator.java  | 103 +++
 .../airavata/gfac/bes/utils/JSDLUtils.java      | 540 ++++++++++++++
 .../apache/airavata/gfac/bes/utils/Mode.java    |  45 ++
 .../airavata/gfac/bes/utils/OSRequirement.java  | 108 +++
 .../apache/airavata/gfac/bes/utils/OSType.java  | 124 ++++
 .../gfac/bes/utils/ProcessorRequirement.java    |  61 ++
 .../airavata/gfac/bes/utils/RangeValueType.java | 274 +++++++
 .../gfac/bes/utils/ResourceProcessor.java       | 152 ++++
 .../airavata/gfac/bes/utils/SPMDProcessor.java  |  33 +
 .../airavata/gfac/bes/utils/SPMDVariations.java |  52 ++
 .../airavata/gfac/bes/utils/StorageCreator.java | 211 ++++++
 .../gfac/bes/utils/UASDataStagingProcessor.java | 225 ++++++
 .../airavata/gfac/bes/utils/URIUtils.java       | 119 +++
 .../context/security/GSISecurityContext.java    | 288 --------
 .../gfac/provider/impl/BESProvider.java         | 567 --------------
 .../gfac/utils/ApplicationProcessor.java        | 252 -------
 .../gfac/utils/DataStagingProcessor.java        | 235 ------
 .../airavata/gfac/utils/DataTransferrer.java    | 241 ------
 .../airavata/gfac/utils/FileDownloader.java     | 256 -------
 .../airavata/gfac/utils/FileTransferBase.java   | 227 ------
 .../airavata/gfac/utils/FileUploader.java       | 245 ------
 .../airavata/gfac/utils/JSDLGenerator.java      | 105 ---
 .../apache/airavata/gfac/utils/JSDLUtils.java   | 540 --------------
 .../org/apache/airavata/gfac/utils/Mode.java    |  45 --
 .../airavata/gfac/utils/OSRequirement.java      | 108 ---
 .../org/apache/airavata/gfac/utils/OSType.java  | 124 ----
 .../gfac/utils/ProcessorRequirement.java        |  61 --
 .../airavata/gfac/utils/RangeValueType.java     | 274 -------
 .../airavata/gfac/utils/ResourceProcessor.java  | 152 ----
 .../airavata/gfac/utils/SPMDProcessor.java      |  33 -
 .../airavata/gfac/utils/SPMDVariations.java     |  52 --
 .../airavata/gfac/utils/StorageCreator.java     | 211 ------
 .../gfac/utils/UASDataStagingProcessor.java     | 225 ------
 .../apache/airavata/gfac/utils/URIUtils.java    | 119 ---
 .../impl/JSDLGeneratorTestWithMyProxyAuth.java  |  32 -
 .../gfac-bes/src/test/resources/gfac-config.xml |  11 +-
 modules/gfac/gfac-core/pom.xml                  |  36 -
 .../org/apache/airavata/gfac/Constants.java     |   2 +
 .../org/apache/airavata/gfac/ExecutionMode.java |  39 +
 .../apache/airavata/gfac/GFacConfiguration.java |  27 +-
 .../airavata/gfac/JobSubmissionFault.java       |   7 +-
 .../org/apache/airavata/gfac/Scheduler.java     |  50 +-
 .../airavata/gfac/context/AbstractContext.java  |  50 --
 .../gfac/context/ApplicationContext.java        |  57 --
 .../gfac/context/JobExecutionContext.java       | 256 -------
 .../airavata/gfac/context/MessageContext.java   |  51 --
 .../gfac/core/context/AbstractContext.java      |  50 ++
 .../gfac/core/context/ApplicationContext.java   |  57 ++
 .../gfac/core/context/JobExecutionContext.java  | 276 +++++++
 .../gfac/core/context/MessageContext.java       |  51 ++
 .../org/apache/airavata/gfac/core/cpi/GFac.java |  42 ++
 .../apache/airavata/gfac/core/cpi/GFacImpl.java | 441 +++++++++++
 .../gfac/core/handler/AbstractHandler.java      |  60 ++
 .../core/handler/AppDescriptorCheckHandler.java |  87 +++
 .../airavata/gfac/core/handler/GFacHandler.java |  33 +
 .../gfac/core/handler/GFacHandlerConfig.java    |  51 ++
 .../gfac/core/handler/GFacHandlerException.java |  49 ++
 .../gfac/core/handler/ThreadedHandler.java      |  31 +
 .../core/monitor/AbstractActivityListener.java  |  27 +
 .../AiravataExperimentStatusUpdator.java        |  80 ++
 .../core/monitor/AiravataJobStatusUpdator.java  | 127 ++++
 .../core/monitor/AiravataTaskStatusUpdator.java | 112 +++
 .../AiravataWorkflowNodeStatusUpdator.java      | 111 +++
 .../gfac/core/monitor/ExperimentIdentity.java   |  36 +
 .../airavata/gfac/core/monitor/JobIdentity.java |  39 +
 .../airavata/gfac/core/monitor/MonitorID.java   | 213 ++++++
 .../gfac/core/monitor/TaskIdentity.java         |  38 +
 .../gfac/core/monitor/WorkflowNodeIdentity.java |  37 +
 .../state/AbstractStateChangeRequest.java       |  27 +
 .../state/ExperimentStatusChangeRequest.java    |  63 ++
 .../monitor/state/JobStatusChangeRequest.java   |  80 ++
 .../core/monitor/state/PublisherMessage.java    |  26 +
 .../monitor/state/TaskStatusChangeRequest.java  |  61 ++
 .../state/WorkflowNodeStatusChangeRequest.java  |  63 ++
 .../gfac/core/notification/GFacNotifier.java    |  42 ++
 .../core/notification/MonitorPublisher.java     |  47 ++
 .../notification/events/ExecutionFailEvent.java |  35 +
 .../events/FinishExecutionEvent.java            |  29 +
 .../events/FinishScheduleEvent.java             |  29 +
 .../core/notification/events/GFacEvent.java     |  39 +
 .../core/notification/events/JobIDEvent.java    |  35 +
 .../events/StartExecutionEvent.java             |  29 +
 .../notification/events/StartScheduleEvent.java |  29 +
 .../notification/events/StatusChangeEvent.java  |  33 +
 .../notification/events/UnicoreJobIDEvent.java  |  35 +
 .../notification/listeners/LoggingListener.java |  57 ++
 .../listeners/WorkflowTrackingListener.java     | 133 ++++
 .../airavata/gfac/core/persistence/JobData.java |  55 ++
 .../core/persistence/JobPersistenceManager.java |  76 ++
 .../gfac/core/provider/AbstractProvider.java    |  65 ++
 .../gfac/core/provider/GFacProvider.java        |  63 ++
 .../gfac/core/provider/GFacProviderConfig.java  |  51 ++
 .../core/provider/GFacProviderException.java    |  50 ++
 .../gfac/core/provider/utils/DataIDType.java    |  95 +++
 .../gfac/core/provider/utils/ProviderUtils.java |  54 ++
 .../provider/utils/ResourceRequirement.java     |  34 +
 .../gfac/core/scheduler/HostScheduler.java      |  35 +
 .../scheduler/impl/SimpleHostScheduler.java     |  33 +
 .../airavata/gfac/core/utils/GFacUtils.java     | 662 +++++++++++++++++
 .../airavata/gfac/core/utils/OutputUtils.java   | 150 ++++
 .../java/org/apache/airavata/gfac/cpi/GFac.java |  49 --
 .../org/apache/airavata/gfac/cpi/GFacImpl.java  | 351 ---------
 .../airavata/gfac/handler/AbstractHandler.java  |  38 -
 .../gfac/handler/AppDescriptorCheckHandler.java |  88 ---
 .../airavata/gfac/handler/GFacHandler.java      |  34 -
 .../gfac/handler/GFacHandlerConfig.java         |  51 --
 .../gfac/handler/GFacHandlerException.java      |  46 --
 .../gfac/monitor/AbstractActivityListener.java  |  27 -
 .../AiravataExperimentStatusUpdator.java        |  81 --
 .../gfac/monitor/AiravataJobStatusUpdator.java  | 145 ----
 .../gfac/monitor/AiravataTaskStatusUpdator.java | 113 ---
 .../AiravataWorkflowNodeStatusUpdator.java      | 112 ---
 .../gfac/monitor/ExperimentIdentity.java        |  36 -
 .../airavata/gfac/monitor/HostMonitorData.java  |  69 --
 .../airavata/gfac/monitor/JobIdentity.java      |  39 -
 .../apache/airavata/gfac/monitor/MonitorID.java | 238 ------
 .../airavata/gfac/monitor/MonitorManager.java   | 347 ---------
 .../airavata/gfac/monitor/TaskIdentity.java     |  38 -
 .../airavata/gfac/monitor/UserMonitorData.java  |  76 --
 .../gfac/monitor/WorkflowNodeIdentity.java      |  37 -
 .../command/ExperimentCancelRequest.java        |  38 -
 .../gfac/monitor/command/TaskCancelRequest.java |  52 --
 .../monitor/core/AiravataAbstractMonitor.java   |  46 --
 .../gfac/monitor/core/MessageParser.java        |  43 --
 .../airavata/gfac/monitor/core/Monitor.java     |  30 -
 .../airavata/gfac/monitor/core/PullMonitor.java |  64 --
 .../airavata/gfac/monitor/core/PushMonitor.java |  60 --
 .../gfac/monitor/event/MonitorPublisher.java    |  47 --
 .../exception/AiravataMonitorException.java     |  37 -
 .../gfac/monitor/impl/LocalJobMonitor.java      |  59 --
 .../monitor/impl/pull/qstat/QstatMonitor.java   | 262 -------
 .../impl/pull/qstat/ResourceConnection.java     | 151 ----
 .../monitor/impl/push/amqp/AMQPMonitor.java     | 263 -------
 .../monitor/impl/push/amqp/BasicConsumer.java   |  86 ---
 .../impl/push/amqp/JSONMessageParser.java       |  78 --
 .../impl/push/amqp/UnRegisterWorker.java        |  68 --
 .../state/AbstractStateChangeRequest.java       |  27 -
 .../state/ExperimentStatusChangeRequest.java    |  63 --
 .../monitor/state/JobStatusChangeRequest.java   |  80 --
 .../gfac/monitor/state/JobStatusInfo.java       |  48 --
 .../gfac/monitor/state/PublisherMessage.java    |  26 -
 .../monitor/state/TaskStatusChangeRequest.java  |  61 --
 .../state/WorkflowNodeStatusChangeRequest.java  |  63 --
 .../monitor/state/impl/AmazonJobStatusInfo.java |  39 -
 .../monitor/state/impl/GridJobStatusInfo.java   |  40 -
 .../gfac/monitor/util/AMQPConnectionUtil.java   |  77 --
 .../airavata/gfac/monitor/util/CommonUtils.java | 172 -----
 .../airavata/gfac/monitor/util/X509Helper.java  | 161 ----
 .../gfac/notification/GFacNotifier.java         |  42 --
 .../notification/events/ExecutionFailEvent.java |  35 -
 .../events/FinishExecutionEvent.java            |  29 -
 .../events/FinishScheduleEvent.java             |  29 -
 .../gfac/notification/events/GFacEvent.java     |  39 -
 .../gfac/notification/events/JobIDEvent.java    |  35 -
 .../events/StartExecutionEvent.java             |  29 -
 .../notification/events/StartScheduleEvent.java |  29 -
 .../notification/events/StatusChangeEvent.java  |  33 -
 .../notification/events/UnicoreJobIDEvent.java  |  35 -
 .../listeners/GSISSHJobSubmissionListener.java  |  55 --
 .../notification/listeners/LoggingListener.java |  57 --
 .../listeners/WorkflowTrackingListener.java     | 133 ----
 .../airavata/gfac/persistence/JobData.java      |  55 --
 .../gfac/persistence/JobPersistenceManager.java |  76 --
 .../airavata/gfac/provider/GFacProvider.java    |  68 --
 .../gfac/provider/GFacProviderConfig.java       |  51 --
 .../gfac/provider/GFacProviderException.java    |  51 --
 .../gfac/provider/impl/AbstractProvider.java    |  92 ---
 .../gfac/provider/utils/DataIDType.java         |  95 ---
 .../gfac/provider/utils/ProviderUtils.java      |  54 --
 .../provider/utils/ResourceRequirement.java     |  34 -
 .../airavata/gfac/scheduler/HostScheduler.java  |  35 -
 .../scheduler/impl/SimpleHostScheduler.java     |  33 -
 .../apache/airavata/gfac/utils/GFacUtils.java   | 737 -------------------
 .../apache/airavata/gfac/utils/OutputUtils.java | 150 ----
 .../apache/airavata/job/AMQPMonitorTest.java    | 175 -----
 .../apache/airavata/job/GFacConfigXmlTest.java  | 113 +++
 .../job/QstatMonitorTestWithMyProxyAuth.java    | 167 -----
 .../apache/airavata/job/TestGlobalHandler.java  |  32 +
 .../org/apache/airavata/job/TestInHandler.java  |  32 +
 .../org/apache/airavata/job/TestOutHandler.java |  32 +
 .../org/apache/airavata/job/TestProvider.java   |  47 ++
 .../airavata/job/TestThreadedHandler.java       |  39 +
 .../src/test/resources/gfac-config.xml          | 101 +--
 modules/gfac/gfac-ec2/pom.xml                   |   4 +-
 .../apache/airavata/gfac/ec2/EC2Provider.java   |  20 +-
 .../airavata/gfac/ec2/EC2ProviderEvent.java     |   2 +-
 .../airavata/gfac/ec2/util/AmazonEC2Util.java   |   2 +-
 .../airavata/gfac/ec2/EC2ProviderTest.java      |   8 +-
 .../gfac-ec2/src/test/resources/gfac-config.xml |  66 +-
 .../context/security/GSISecurityContext.java    | 288 --------
 .../apache/airavata/gfac/external/GridFtp.java  | 558 --------------
 .../airavata/gfac/gram/external/GridFtp.java    | 558 ++++++++++++++
 .../gram/handler/GramDirectorySetupHandler.java | 139 ++++
 .../gfac/gram/handler/GridFTPInputHandler.java  | 207 ++++++
 .../gfac/gram/handler/GridFTPOutputHandler.java | 349 +++++++++
 .../persistence/DBJobPersistenceManager.java    | 225 ++++++
 .../gfac/gram/provider/impl/GramProvider.java   | 527 +++++++++++++
 .../gfac/gram/security/GSISecurityContext.java  | 275 +++++++
 .../gram/util/GramJobSubmissionListener.java    | 141 ++++
 .../gfac/gram/util/GramProviderUtils.java       | 113 +++
 .../gfac/gram/util/GramRSLGenerator.java        | 211 ++++++
 .../gfac/gram/util/GridFTPContactInfo.java      |  61 ++
 .../gfac/handler/GramDirectorySetupHandler.java | 135 ----
 .../gfac/handler/GridFTPInputHandler.java       | 204 -----
 .../gfac/handler/GridFTPOutputHandler.java      | 347 ---------
 .../persistence/DBJobPersistenceManager.java    | 223 ------
 .../gfac/provider/impl/GramProvider.java        | 526 -------------
 .../gfac/util/GramJobSubmissionListener.java    | 141 ----
 .../airavata/gfac/util/GramProviderUtils.java   | 114 ---
 .../airavata/gfac/util/GramRSLGenerator.java    | 211 ------
 .../airavata/gfac/util/GridFTPContactInfo.java  |  61 --
 .../impl/GFacBaseTestWithMyProxyAuth.java       |   2 +-
 .../impl/GramProviderTestWithMyProxyAuth.java   |  14 +-
 .../src/test/resources/gfac-config.xml          |  15 +-
 modules/gfac/gfac-gsissh/pom.xml                |   2 +-
 .../context/security/GSISecurityContext.java    | 288 --------
 .../handler/GSISSHDirectorySetupHandler.java    | 103 +++
 .../gfac/gsissh/handler/GSISSHInputHandler.java | 138 ++++
 .../gsissh/handler/GSISSHOutputHandler.java     | 239 ++++++
 .../gsissh/provider/impl/GSISSHProvider.java    | 138 ++++
 .../gsissh/security/GSISecurityContext.java     | 288 ++++++++
 .../gfac/gsissh/util/GFACGSISSHUtils.java       | 192 +++++
 .../handler/GSISSHDirectorySetupHandler.java    |  98 ---
 .../gfac/handler/GSISSHInputHandler.java        | 137 ----
 .../gfac/handler/GSISSHOutputHandler.java       | 234 ------
 .../gfac/provider/impl/GSISSHProvider.java      | 114 ---
 .../airavata/gfac/util/GFACGSISSHUtils.java     |  98 ---
 .../impl/GSISSHProviderTestWithMyProxyAuth.java |  10 +-
 .../GSISecurityContextTestWithMyProxyAuth.java  |   2 +-
 .../src/test/resources/gfac-config.xml          |   4 +-
 .../hadoop/handler/HDFSDataMovementHandler.java | 103 +++
 .../hadoop/handler/HadoopDeploymentHandler.java | 276 +++++++
 .../hadoop/provider/impl/HadoopProvider.java    | 154 ++++
 .../gfac/hadoop/provider/utils/HadoopUtils.java |  60 ++
 .../gfac/handler/HDFSDataMovementHandler.java   | 102 ---
 .../gfac/handler/HadoopDeploymentHandler.java   | 274 -------
 .../gfac/provider/impl/HadoopProvider.java      | 153 ----
 .../gfac/provider/utils/HadoopUtils.java        |  60 --
 .../src/test/resources/gfac-config.xml          |  68 +-
 .../handler/LocalDirectorySetupHandler.java     |  62 --
 .../handler/LocalDirectorySetupHandler.java     |  63 ++
 .../gfac/local/provider/impl/LocalProvider.java | 249 +++++++
 .../local/utils/InputStreamToFileWriter.java    |  68 ++
 .../airavata/gfac/local/utils/InputUtils.java   |  39 +
 .../gfac/local/utils/LocalProviderUtil.java     |  54 ++
 .../gfac/provider/impl/LocalProvider.java       | 240 ------
 .../gfac/utils/InputStreamToFileWriter.java     |  68 --
 .../apache/airavata/gfac/utils/InputUtils.java  |  39 -
 .../airavata/gfac/utils/LocalProviderUtil.java  |  54 --
 .../gfac/services/impl/LocalProviderTest.java   |  57 +-
 .../src/test/resources/gfac-config.xml          |  69 +-
 modules/gfac/gfac-monitor/pom.xml               | 186 +++++
 .../airavata/gfac/monitor/HPCMonitorID.java     | 248 +++++++
 .../airavata/gfac/monitor/HostMonitorData.java  |  70 ++
 .../airavata/gfac/monitor/UserMonitorData.java  |  76 ++
 .../command/ExperimentCancelRequest.java        |  38 +
 .../gfac/monitor/command/TaskCancelRequest.java |  52 ++
 .../monitor/core/AiravataAbstractMonitor.java   |  46 ++
 .../gfac/monitor/core/MessageParser.java        |  43 ++
 .../airavata/gfac/monitor/core/Monitor.java     |  30 +
 .../airavata/gfac/monitor/core/PullMonitor.java |  64 ++
 .../airavata/gfac/monitor/core/PushMonitor.java |  60 ++
 .../exception/AiravataMonitorException.java     |  37 +
 .../handlers/GridPullMonitorHandler.java        | 101 +++
 .../monitor/impl/pull/qstat/HPCPullMonitor.java | 291 ++++++++
 .../impl/pull/qstat/ResourceConnection.java     | 115 +++
 .../monitor/impl/push/amqp/AMQPMonitor.java     | 263 +++++++
 .../monitor/impl/push/amqp/BasicConsumer.java   |  86 +++
 .../impl/push/amqp/JSONMessageParser.java       |  78 ++
 .../impl/push/amqp/UnRegisterWorker.java        |  68 ++
 .../gfac/monitor/util/AMQPConnectionUtil.java   |  77 ++
 .../airavata/gfac/monitor/util/CommonUtils.java | 205 ++++++
 .../airavata/gfac/monitor/util/X509Helper.java  | 161 ++++
 .../src/main/resources/errors.properties        | 197 +++++
 .../src/main/resources/schema/AccessPolicy.json |  13 +
 .../src/main/resources/schema/Activity.json     |  31 +
 .../src/main/resources/schema/AdminDomain.json  |  51 ++
 .../schema/ApplicationEnvironment.json          |  86 +++
 .../resources/schema/ApplicationHandle.json     |  21 +
 .../src/main/resources/schema/Benchmark.json    |  21 +
 .../resources/schema/ComputingActivity.json     | 165 +++++
 .../resources/schema/ComputingEndpoint.json     |  44 ++
 .../main/resources/schema/ComputingManager.json | 117 +++
 .../main/resources/schema/ComputingService.json |  32 +
 .../main/resources/schema/ComputingShare.json   | 182 +++++
 .../src/main/resources/schema/Contact.json      |  32 +
 .../src/main/resources/schema/DataStore.json    |  30 +
 .../src/main/resources/schema/Domain.json       |  30 +
 .../src/main/resources/schema/Endpoint.json     | 147 ++++
 .../src/main/resources/schema/Entity.json       |  35 +
 .../resources/schema/ExecutionEnvironment.json  | 115 +++
 .../src/main/resources/schema/Glue2.json        | 246 +++++++
 .../src/main/resources/schema/Location.json     |  47 ++
 .../src/main/resources/schema/Manager.json      |  28 +
 .../main/resources/schema/MappingPolicy.json    |  13 +
 .../src/main/resources/schema/Policy.json       |  27 +
 .../src/main/resources/schema/Resource.json     |  27 +
 .../src/main/resources/schema/Service.json      |  75 ++
 .../src/main/resources/schema/Share.json        |  45 ++
 .../resources/schema/StorageAccessProtocol.json |  32 +
 .../main/resources/schema/StorageEndpoint.json  |   8 +
 .../main/resources/schema/StorageManager.json   |   8 +
 .../main/resources/schema/StorageService.json   |  22 +
 .../schema/StorageServiceCapacity.json          |  33 +
 .../src/main/resources/schema/StorageShare.json |  65 ++
 .../resources/schema/StorageShareCapacity.json  |  33 +
 .../resources/schema/ToComputingService.json    |  32 +
 .../main/resources/schema/ToStorageService.json |  25 +
 .../src/main/resources/schema/UserDomain.json   |  58 ++
 .../src/main/resources/service.properties       |  58 ++
 .../apache/airavata/job/AMQPMonitorTest.java    | 178 +++++
 .../job/QstatMonitorTestWithMyProxyAuth.java    | 171 +++++
 .../src/test/resources/PBSTemplate.xslt         |  73 ++
 .../gfac-monitor/src/test/resources/echo.bat    |  22 +
 .../src/test/resources/gfac-config.xml          |  65 ++
 .../src/test/resources/logging.properties       |  42 ++
 .../context/security/SSHSecurityContext.java    | 120 ---
 .../gfac/handler/AdvancedSCPInputHandler.java   | 150 ----
 .../gfac/handler/AdvancedSCPOutputHandler.java  | 126 ----
 .../gfac/handler/SSHDirectorySetupHandler.java  | 102 ---
 .../airavata/gfac/handler/SSHInputHandler.java  | 140 ----
 .../airavata/gfac/handler/SSHOutputHandler.java | 218 ------
 .../gfac/provider/impl/SSHProvider.java         | 309 --------
 .../ssh/handler/AdvancedSCPInputHandler.java    | 152 ++++
 .../ssh/handler/AdvancedSCPOutputHandler.java   | 130 ++++
 .../ssh/handler/SSHDirectorySetupHandler.java   | 107 +++
 .../gfac/ssh/handler/SSHInputHandler.java       | 143 ++++
 .../gfac/ssh/handler/SSHOutputHandler.java      | 226 ++++++
 .../gfac/ssh/provider/impl/SSHProvider.java     | 310 ++++++++
 .../gfac/ssh/security/SSHSecurityContext.java   | 120 +++
 .../airavata/gfac/ssh/util/GFACSSHUtils.java    | 179 +++++
 .../apache/airavata/gfac/util/GFACSSHUtils.java |  88 ---
 .../services/impl/BigRed2TestWithSSHAuth.java   |  11 +-
 .../impl/SSHProviderTestWithSSHAuth.java        |  10 +-
 .../gfac-ssh/src/test/resources/gfac-config.xml |  38 +-
 modules/gfac/pom.xml                            |   1 +
 .../src/test/resources/gfac-config.xml          |  84 ++-
 .../server/OrchestratorServerHandler.java       |  17 -
 .../src/main/resources/gfac-config.xml          |  84 ++-
 .../src/test/resources/gfac-config.xml          |   4 +-
 .../core/context/OrchestratorContext.java       |  11 -
 .../core/impl/EmbeddedGFACJobSubmitter.java     |  17 +-
 .../orchestrator/core/job/JobSubmitter.java     |  11 +-
 .../cpi/impl/SimpleOrchestratorImpl.java        | 171 +----
 .../orchestrator/core/NewOrchestratorTest.java  |   2 +
 .../src/test/resources/gfac-config.xml          |  84 ++-
 360 files changed, 21022 insertions(+), 18335 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/ee79b70b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutputUtils.java
----------------------------------------------------------------------
diff --cc modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutputUtils.java
index 0000000,cff1367..6acddf8
mode 000000,100644..100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutputUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutputUtils.java
@@@ -1,0 -1,105 +1,150 @@@
+ /*
+  *
+  * 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.gfac.core.utils;
+ 
+ import java.util.HashMap;
++import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ 
+ import org.apache.airavata.common.utils.StringUtil;
+ import org.apache.airavata.commons.gfac.type.ActualParameter;
+ import org.apache.airavata.commons.gfac.type.MappingFactory;
++import org.apache.airavata.model.workspace.experiment.DataObjectType;
++import org.apache.airavata.schemas.gfac.DataType;
+ import org.apache.airavata.gfac.core.handler.GFacHandlerException;
+ import org.apache.airavata.schemas.gfac.StdErrParameterType;
+ import org.apache.airavata.schemas.gfac.StdOutParameterType;
+ 
+ public class OutputUtils {
+     private static String regexPattern = "\\s*=\\s*(.*)\\r?\\n";
+ 
+     public static Map<String, ActualParameter> fillOutputFromStdout(Map<String, Object> output, String stdout, String stderr) throws Exception {
+ 
+         if (stdout == null || stdout.equals("")){
+             throw new GFacHandlerException("Standard output is empty.");
+         }
+ 
+         Map<String, ActualParameter> result = new HashMap<String, ActualParameter>();
+         Set<String> keys = output.keySet();
+         for (String paramName : keys) {
+         	ActualParameter actual = (ActualParameter) output.get(paramName);
+             // if parameter value is not already set, we let it go
+             
+             if (actual == null) {
+                 continue;
+             }
+             if ("StdOut".equals(actual.getType().getType().toString())) {
+                 ((StdOutParameterType) actual.getType()).setValue(stdout);
+                 result.put(paramName, actual);
+             } else if ("StdErr".equals(actual.getType().getType().toString())) {
+                 ((StdErrParameterType) actual.getType()).setValue(stderr);
+                 result.put(paramName, actual);
+             }else if("URI".equals(actual.getType().getType().toString())){
+             	continue;
+             } 
+             else {
+                 String parseStdout = parseStdout(stdout, paramName);
+                 if (parseStdout != null) {
+                     MappingFactory.fromString(actual, parseStdout);
+                     result.put(paramName, actual);
+                 }
+             }
+         }
+ 
+         return result;
+     }
++    
++    public static void fillOutputFromStdout1(Map<String, Object> output, String stdout, String stderr,List<DataObjectType> outputArray) throws Exception {
++
++        if (stdout == null || stdout.equals("")){
++            throw new GFacHandlerException("Standard output is empty.");
++        }
++
++        Set<String> keys = output.keySet();
++        for (String paramName : keys) {
++        	ActualParameter actual = (ActualParameter) output.get(paramName);
++            // if parameter value is not already set, we let it go
++            
++            if (actual == null) {
++                continue;
++            }
++            if ("StdOut".equals(actual.getType().getType().toString())) {
++                DataObjectType out = new DataObjectType();
++                out.setKey(paramName);
++                out.setType(DataType.STD_OUT.toString());
++                out.setValue(stdout);
++                outputArray.add(out);
++            } else if ("StdErr".equals(actual.getType().getType().toString())) {
++                DataObjectType out = new DataObjectType();
++                out.setKey(paramName);
++                out.setType(DataType.STD_ERR.toString());
++                out.setValue(stderr);
++                outputArray.add(out);
++            }else if("URI".equals(actual.getType().getType().toString())){
++            	continue;
++            } 
++            else {
++                String parseStdout = parseStdout(stdout, paramName);
++                if (parseStdout != null) {
++                    DataObjectType out = new DataObjectType();
++                    out.setKey(paramName);
++                    out.setType(DataType.STRING.toString());
++                    out.setValue(parseStdout);
++                    outputArray.add(out);
++                }
++            }
++        }
++    }
+ 
+     private static String parseStdout(String stdout, String outParam) throws Exception {
+         String regex = Pattern.quote(outParam) + regexPattern;
+         String match = null;
+         Pattern pattern = Pattern.compile(regex);
+         Matcher matcher = pattern.matcher(stdout);
+         while (matcher.find()) {
+             match = matcher.group(1);
+         }
+         if (match != null) {
+             match = match.trim();
+             return match;
+         } else {
+             throw new Exception("Data for the output parameter '" + outParam + "' was not found");
+         }
+     }
+ 
+     public static String[] parseStdoutArray(String stdout, String outParam) throws Exception {
+         String regex = Pattern.quote(outParam) + regexPattern;
+         StringBuffer match = new StringBuffer();
+         Pattern pattern = Pattern.compile(regex);
+         Matcher matcher = pattern.matcher(stdout);
+         while (matcher.find()) {
+             match.append(matcher.group(1) + StringUtil.DELIMETER);
+         }
+         if (match != null) {
+         	return StringUtil.getElementsFromString(match.toString());
+         } else {
+             throw new Exception("Data for the output parameter '" + outParam + "' was not found");
+         }
+     }
+ }

http://git-wip-us.apache.org/repos/asf/airavata/blob/ee79b70b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
----------------------------------------------------------------------
diff --cc modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
index 0000000,aefa80f..8c53d87
mode 000000,100644..100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
@@@ -1,0 -1,221 +1,239 @@@
+ /*
+  *
+  * 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.gfac.gsissh.handler;
+ 
++import java.io.File;
++import java.io.IOException;
++import java.lang.reflect.Type;
++import java.util.ArrayList;
++import java.util.HashMap;
++import java.util.List;
++import java.util.Map;
++import java.util.Set;
++
+ import net.schmizz.sshj.connection.ConnectionException;
+ import net.schmizz.sshj.transport.TransportException;
++
+ import org.apache.airavata.common.exception.ApplicationSettingsException;
+ import org.apache.airavata.common.utils.Constants;
+ import org.apache.airavata.commons.gfac.type.ActualParameter;
+ import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+ import org.apache.airavata.gfac.GFacException;
+ import org.apache.airavata.gfac.core.context.JobExecutionContext;
+ import org.apache.airavata.gfac.core.handler.AbstractHandler;
+ import org.apache.airavata.gfac.core.handler.GFacHandlerException;
+ import org.apache.airavata.gfac.core.provider.GFacProviderException;
+ import org.apache.airavata.gfac.core.utils.GFacUtils;
+ import org.apache.airavata.gfac.core.utils.OutputUtils;
+ import org.apache.airavata.gfac.gsissh.security.GSISecurityContext;
+ import org.apache.airavata.gfac.gsissh.util.GFACGSISSHUtils;
+ import org.apache.airavata.gsi.ssh.api.Cluster;
+ import org.apache.airavata.gsi.ssh.api.job.JobDescriptor;
 -import org.apache.airavata.model.workspace.experiment.*;
++import org.apache.airavata.model.workspace.experiment.CorrectiveAction;
++import org.apache.airavata.model.workspace.experiment.DataObjectType;
++import org.apache.airavata.model.workspace.experiment.DataTransferDetails;
++import org.apache.airavata.model.workspace.experiment.ErrorCategory;
++import org.apache.airavata.model.workspace.experiment.JobDetails;
++import org.apache.airavata.model.workspace.experiment.TaskDetails;
++import org.apache.airavata.model.workspace.experiment.TransferState;
++import org.apache.airavata.model.workspace.experiment.TransferStatus;
+ import org.apache.airavata.registry.cpi.ChildDataType;
+ import org.apache.airavata.registry.cpi.DataType;
+ import org.apache.airavata.registry.cpi.RegistryException;
+ import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+ import org.apache.airavata.schemas.gfac.GsisshHostType;
+ import org.apache.airavata.schemas.gfac.URIParameterType;
+ import org.apache.xmlbeans.XmlException;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ 
 -import java.io.File;
 -import java.io.IOException;
 -import java.util.HashMap;
 -import java.util.List;
 -import java.util.Map;
 -import java.util.Set;
++import com.google.gson.GsonBuilder;
++import com.google.gson.reflect.TypeToken;
+ 
+ public class GSISSHOutputHandler extends AbstractHandler {
+     private static final Logger log = LoggerFactory.getLogger(GSISSHOutputHandler.class);
+ 
+     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+         if(jobExecutionContext.getApplicationContext().getHostDescription().getType() instanceof GsisshHostType) { // this is because we don't have the right jobexecution context
+             // so attempting to get it from the registry
+             if (Constants.PUSH.equals(((GsisshHostType) jobExecutionContext.getApplicationContext().getHostDescription().getType()).getMonitorMode())) {
+                 log.warn("During the out handler chain jobExecution context came null, so trying to handler");
+                 ApplicationDescription applicationDeploymentDescription = jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription();
+                 TaskDetails taskData = null;
+                 try {
+                     taskData = (TaskDetails) jobExecutionContext.getRegistry().get(DataType.TASK_DETAIL, jobExecutionContext.getTaskData().getTaskID());
+                 } catch (RegistryException e) {
+                     log.error("Error retrieving job details from Registry");
+                     throw new GFacHandlerException("Error retrieving job details from Registry", e);
+                 }
+                 JobDetails jobDetails = taskData.getJobDetailsList().get(0);
+                 String jobDescription = jobDetails.getJobDescription();
+                 if (jobDescription != null) {
+                     JobDescriptor jobDescriptor = null;
+                     try {
+                         jobDescriptor = JobDescriptor.fromXML(jobDescription);
+                     } catch (XmlException e1) {
+                         e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                     }
+                     applicationDeploymentDescription.getType().setScratchWorkingDirectory(
+                             jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getWorkingDirectory());
+                     applicationDeploymentDescription.getType().setInputDataDirectory(jobDescriptor.getInputDirectory());
+                     applicationDeploymentDescription.getType().setOutputDataDirectory(jobDescriptor.getOutputDirectory());
+                     applicationDeploymentDescription.getType().setStandardError(jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getStandardErrorFile());
+                     applicationDeploymentDescription.getType().setStandardOutput(jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getStandardOutFile());
+                 }
+             }
+         }
+         try {
+             if (jobExecutionContext.getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT) == null) {
+ 
+                 GFACGSISSHUtils.addSecurityContext(jobExecutionContext);
+             }
+         } catch (ApplicationSettingsException e) {
+             log.error(e.getMessage());
+             throw new GFacHandlerException("Error while creating SSHSecurityContext", e, e.getLocalizedMessage());
+         } catch (GFacException e) {
+             log.error(e.getMessage());
+             throw new GFacHandlerException("Error while creating SSHSecurityContext", e, e.getLocalizedMessage());
+         }
+         super.invoke(jobExecutionContext);
+         DataTransferDetails detail = new DataTransferDetails();
+         TransferStatus status = new TransferStatus();
+ 
+         ApplicationDeploymentDescriptionType app = jobExecutionContext.getApplicationContext()
+                 .getApplicationDeploymentDescription().getType();
+         try {
+             Cluster cluster = null;
+             if (jobExecutionContext.getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT) != null) {
+                 cluster = ((GSISecurityContext) jobExecutionContext.getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT)).getPbsCluster();
+             } else {
+                 cluster = ((GSISecurityContext) jobExecutionContext.getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT)).getPbsCluster();
+             }
+             if (cluster == null) {
+                 throw new GFacProviderException("Security context is not set properly");
+             } else {
+                 log.info("Successfully retrieved the Security Context");
+             }
+ 
+             // Get the Stdouts and StdErrs
+             String timeStampedServiceName = GFacUtils.createUniqueNameForService(jobExecutionContext.getServiceName());
+ 
+             TaskDetails taskData = jobExecutionContext.getTaskData();
+             String outputDataDir = null;
+             File localStdOutFile;
+             File localStdErrFile;
+ 
+             if (taskData.getAdvancedOutputDataHandling() != null) {
+                 outputDataDir = taskData.getAdvancedOutputDataHandling().getOutputDataDir();
+             }
+             if (outputDataDir == null) {
+                 outputDataDir = File.separator + "tmp";
+             }
+             outputDataDir = outputDataDir + File.separator + jobExecutionContext.getExperimentID() + "-" + jobExecutionContext.getTaskData().getTaskID();
+             (new File(outputDataDir)).mkdirs();
+ 
+ 
+             localStdOutFile = new File(outputDataDir + File.separator + timeStampedServiceName + "stdout");
+             localStdErrFile = new File(outputDataDir + File.separator + timeStampedServiceName + "stderr");
+ //            cluster.makeDirectory(outputDataDir);
+             cluster.scpFrom(app.getStandardOutput(), localStdOutFile.getAbsolutePath());
+             Thread.sleep(1000);
+             cluster.scpFrom(app.getStandardError(), localStdErrFile.getAbsolutePath());
+             Thread.sleep(1000);
+ 
+             String stdOutStr = GFacUtils.readFileToString(localStdOutFile.getAbsolutePath());
+             String stdErrStr = GFacUtils.readFileToString(localStdErrFile.getAbsolutePath());
+             status.setTransferState(TransferState.COMPLETE);
+             detail.setTransferStatus(status);
+             detail.setTransferDescription("STDOUT:" + stdOutStr);
+             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+ 
+             status.setTransferState(TransferState.COMPLETE);
+             detail.setTransferStatus(status);
+             detail.setTransferDescription("STDERR:" + stdErrStr);
+             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+ 
+ 
 -            Map<String, ActualParameter> stringMap = new HashMap<String, ActualParameter>();
++            List<DataObjectType> outputArray = new ArrayList<DataObjectType>();
+             Map<String, Object> output = jobExecutionContext.getOutMessageContext().getParameters();
+             Set<String> keys = output.keySet();
+             for (String paramName : keys) {
+                 ActualParameter actualParameter = (ActualParameter) output.get(paramName);
+                 if ("URI".equals(actualParameter.getType().getType().toString())) {
+ 
+                     List<String> outputList = cluster.listDirectory(app.getOutputDataDirectory());
+                     if (outputList.size() == 0 || outputList.get(0).isEmpty()) {
 -                        stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
++                        OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr, outputArray);
++                        break;
+                     } else {
+                         String valueList = outputList.get(0);
+                         cluster.scpFrom(app.getOutputDataDirectory() + File.separator + valueList, outputDataDir);
+                         jobExecutionContext.addOutputFile(outputDataDir + File.separator + valueList);
 -                        ((URIParameterType) actualParameter.getType()).setValue(valueList);
 -                        stringMap = new HashMap<String, ActualParameter>();
 -                        stringMap.put(paramName, actualParameter);
++                        DataObjectType dataObjectType = new DataObjectType();
++                        dataObjectType.setValue(valueList);
++                        dataObjectType.setKey(paramName);
++                        dataObjectType.setType(org.apache.airavata.schemas.gfac.DataType.URI.toString());
++                        outputArray.add(dataObjectType);
+                     }
+                 } else {
 -                    stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
++                    OutputUtils.fillOutputFromStdout1(output, stdOutStr,stdErrStr, outputArray);
++                    break;
+                 }
+             }
 -            if (stringMap == null || stringMap.isEmpty()) {
++            if (outputArray == null || outputArray.isEmpty()) {
+                 throw new GFacHandlerException(
+                         "Empty Output returned from the Application, Double check the application"
+                                 + "and ApplicationDescriptor output Parameter Names");
+             }
 -            status.setTransferState(TransferState.DOWNLOAD);
 -            detail.setTransferStatus(status);
 -            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
 -
+             app.setStandardError(localStdErrFile.getAbsolutePath());
+             app.setStandardOutput(localStdOutFile.getAbsolutePath());
+             app.setOutputDataDirectory(outputDataDir);
++            status.setTransferState(TransferState.DOWNLOAD);
++            detail.setTransferStatus(status);
++            detail.setTransferDescription(outputDataDir);
++            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
++            registry.add(ChildDataType.EXPERIMENT_OUTPUT, outputArray, jobExecutionContext.getExperimentID());
+         } catch (XmlException e) {
+             throw new GFacHandlerException("Cannot read output:" + e.getMessage(), e);
+         } catch (ConnectionException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (TransportException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (IOException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (Exception e) {
+             try {
+                 status.setTransferState(TransferState.FAILED);
+                 detail.setTransferStatus(status);
+                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+                 GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+             } catch (Exception e1) {
+                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
+             }
+             throw new GFacHandlerException("Error in retrieving results", e);
+         }
+ 
+     }
+ 
+     public void initProperties(Map<String, String> properties) throws GFacHandlerException {
+ 
+     }
+ }

http://git-wip-us.apache.org/repos/asf/airavata/blob/ee79b70b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
----------------------------------------------------------------------
diff --cc modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
index 0000000,902c09f..66296f2
mode 000000,100644..100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
@@@ -1,0 -1,220 +1,226 @@@
+ /*
+  *
+  * 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.gfac.ssh.handler;
+ 
+ import java.io.File;
+ import java.io.IOException;
++import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import net.schmizz.sshj.connection.ConnectionException;
+ import net.schmizz.sshj.transport.TransportException;
+ 
+ import org.apache.airavata.common.exception.ApplicationSettingsException;
+ import org.apache.airavata.common.utils.Constants;
+ import org.apache.airavata.commons.gfac.type.ActualParameter;
+ import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+ import org.apache.airavata.gfac.GFacException;
+ import org.apache.airavata.gfac.core.context.JobExecutionContext;
+ import org.apache.airavata.gfac.core.handler.AbstractHandler;
+ import org.apache.airavata.gfac.core.handler.GFacHandlerException;
+ import org.apache.airavata.gfac.core.provider.GFacProviderException;
+ import org.apache.airavata.gfac.core.utils.GFacUtils;
+ import org.apache.airavata.gfac.core.utils.OutputUtils;
+ import org.apache.airavata.gfac.ssh.security.SSHSecurityContext;
+ import org.apache.airavata.gfac.ssh.util.GFACSSHUtils;
+ import org.apache.airavata.gsi.ssh.api.Cluster;
+ import org.apache.airavata.gsi.ssh.api.job.JobDescriptor;
+ import org.apache.airavata.model.workspace.experiment.*;
+ import org.apache.airavata.registry.cpi.ChildDataType;
+ import org.apache.airavata.registry.cpi.DataType;
+ import org.apache.airavata.registry.cpi.RegistryException;
+ import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+ import org.apache.airavata.schemas.gfac.GsisshHostType;
+ import org.apache.airavata.schemas.gfac.URIParameterType;
+ import org.apache.xmlbeans.XmlException;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ 
+ public class SSHOutputHandler extends AbstractHandler {
+     private static final Logger log = LoggerFactory.getLogger(SSHOutputHandler.class);
+ 
+     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+         if (jobExecutionContext.getApplicationContext().getHostDescription().getType() instanceof GsisshHostType) { // this is because we don't have the right jobexecution context
+             // so attempting to get it from the registry
+             if (Constants.PUSH.equals(((GsisshHostType) jobExecutionContext.getApplicationContext().getHostDescription().getType()).getMonitorMode())) { // this is because we don't have the right jobexecution context
+                 // so attempting to get it from the registry
+                 log.warn("During the out handler chain jobExecution context came null, so trying to handler");
+                 ApplicationDescription applicationDeploymentDescription = jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription();
+                 TaskDetails taskData = null;
+                 try {
+                     taskData = (TaskDetails) registry.get(DataType.TASK_DETAIL, jobExecutionContext.getTaskData().getTaskID());
+                 } catch (RegistryException e) {
+                     log.error("Error retrieving job details from Registry");
+                     throw new GFacHandlerException("Error retrieving job details from Registry", e);
+                 }
+                 JobDetails jobDetails = taskData.getJobDetailsList().get(0);
+                 String jobDescription = jobDetails.getJobDescription();
+                 if (jobDescription != null) {
+                     JobDescriptor jobDescriptor = null;
+                     try {
+                         jobDescriptor = JobDescriptor.fromXML(jobDescription);
+                     } catch (XmlException e1) {
+                         e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                     }
+                     applicationDeploymentDescription.getType().setScratchWorkingDirectory(
+                             jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getWorkingDirectory());
+                     applicationDeploymentDescription.getType().setInputDataDirectory(jobDescriptor.getInputDirectory());
+                     applicationDeploymentDescription.getType().setOutputDataDirectory(jobDescriptor.getOutputDirectory());
+                     applicationDeploymentDescription.getType().setStandardError(jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getStandardErrorFile());
+                     applicationDeploymentDescription.getType().setStandardOutput(jobDescriptor.getJobDescriptorDocument().getJobDescriptor().getStandardOutFile());
+                 }
+             }
+         }
+ 
+         try {
+             if (jobExecutionContext.getSecurityContext(SSHSecurityContext.SSH_SECURITY_CONTEXT) == null) {
+ 
+                 GFACSSHUtils.addSecurityContext(jobExecutionContext);
+             }
+         } catch (ApplicationSettingsException e) {
+             log.error(e.getMessage());
+             throw new GFacHandlerException("Error while creating SSHSecurityContext", e, e.getLocalizedMessage());
+         } catch (GFacException e1) {
+             log.error(e1.getMessage());
+             throw new GFacHandlerException("Error while creating SSHSecurityContext", e1, e1.getLocalizedMessage());
+         }
+ 
+         super.invoke(jobExecutionContext);
+         DataTransferDetails detail = new DataTransferDetails();
+         TransferStatus status = new TransferStatus();
+ 
+         ApplicationDeploymentDescriptionType app = jobExecutionContext.getApplicationContext()
+                 .getApplicationDeploymentDescription().getType();
+         try {
+             Cluster cluster = ((SSHSecurityContext) jobExecutionContext.getSecurityContext(SSHSecurityContext.SSH_SECURITY_CONTEXT)).getPbsCluster();
+             if (cluster == null) {
+                 throw new GFacProviderException("Security context is not set properly");
+             } else {
+                 log.info("Successfully retrieved the Security Context");
+             }
+ 
+             // Get the Stdouts and StdErrs
+             String timeStampedServiceName = GFacUtils.createUniqueNameForService(jobExecutionContext.getServiceName());
+ 
+             TaskDetails taskData = jobExecutionContext.getTaskData();
+             String outputDataDir = null;
+             File localStdOutFile;
+             File localStdErrFile;
+ 
+             if (taskData.getAdvancedOutputDataHandling() != null) {
+                 outputDataDir = taskData.getAdvancedOutputDataHandling().getOutputDataDir();
+             }
+             if (outputDataDir == null) {
+                 outputDataDir = File.separator + "tmp";
+             }
+             outputDataDir = outputDataDir + File.separator + jobExecutionContext.getExperimentID() + "-" + jobExecutionContext.getTaskData().getTaskID();
+             (new File(outputDataDir)).mkdirs();
+ 
+ 
+             localStdOutFile = new File(outputDataDir + File.separator + timeStampedServiceName + "stdout");
+             localStdErrFile = new File(outputDataDir + File.separator + timeStampedServiceName + "stderr");
+ //            cluster.makeDirectory(outputDataDir);
+             cluster.scpFrom(app.getStandardOutput(), localStdOutFile.getAbsolutePath());
+             Thread.sleep(1000);
+             cluster.scpFrom(app.getStandardError(), localStdErrFile.getAbsolutePath());
+             Thread.sleep(1000);
+ 
+             String stdOutStr = GFacUtils.readFileToString(localStdOutFile.getAbsolutePath());
+             String stdErrStr = GFacUtils.readFileToString(localStdErrFile.getAbsolutePath());
+             status.setTransferState(TransferState.COMPLETE);
+             detail.setTransferStatus(status);
+             detail.setTransferDescription("STDOUT:" + stdOutStr);
+             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+ 
+             status.setTransferState(TransferState.COMPLETE);
+             detail.setTransferStatus(status);
+             detail.setTransferDescription("STDERR:" + stdErrStr);
+             registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+ 
+ 
 -            Map<String, ActualParameter> stringMap = new HashMap<String, ActualParameter>();
++            List<DataObjectType> outputArray = new ArrayList<DataObjectType>();
+             Map<String, Object> output = jobExecutionContext.getOutMessageContext().getParameters();
+             Set<String> keys = output.keySet();
+             for (String paramName : keys) {
+                 ActualParameter actualParameter = (ActualParameter) output.get(paramName);
+                 if ("URI".equals(actualParameter.getType().getType().toString())) {
+ 
+                     List<String> outputList = cluster.listDirectory(app.getOutputDataDirectory());
+                     if (outputList.size() == 0 || outputList.get(0).isEmpty()) {
 -                        stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
++                        OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr,outputArray);
++                        break;
+                     } else {
+                         String valueList = outputList.get(0);
+                         cluster.scpFrom(app.getOutputDataDirectory() + File.separator + valueList, outputDataDir);
+                         jobExecutionContext.addOutputFile(outputDataDir + File.separator + valueList);
 -                        ((URIParameterType) actualParameter.getType()).setValue(valueList);
 -                        stringMap = new HashMap<String, ActualParameter>();
 -                        stringMap.put(paramName, actualParameter);
++                        DataObjectType dataObjectType = new DataObjectType();
++                        dataObjectType.setValue(valueList);
++                        dataObjectType.setKey(paramName);
++                        dataObjectType.setType(org.apache.airavata.schemas.gfac.DataType.URI.toString());
++                        outputArray.add(dataObjectType);
+                     }
+                 } else {
 -                    stringMap = OutputUtils.fillOutputFromStdout(output, stdOutStr, stdErrStr);
++                    OutputUtils.fillOutputFromStdout1(output, stdOutStr, stdErrStr,outputArray);
+                 }
+             }
 -            if (stringMap == null || stringMap.isEmpty()) {
++            if (outputArray == null || outputArray.isEmpty()) {
+                 throw new GFacHandlerException(
+                         "Empty Output returned from the Application, Double check the application"
+                                 + "and ApplicationDescriptor output Parameter Names");
+             }
 -            status.setTransferState(TransferState.DOWNLOAD);
 -            detail.setTransferStatus(status);
 -            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
 -
+             app.setStandardError(localStdErrFile.getAbsolutePath());
+             app.setStandardOutput(localStdOutFile.getAbsolutePath());
+             app.setOutputDataDirectory(outputDataDir);
++            status.setTransferState(TransferState.DOWNLOAD);
++            detail.setTransferStatus(status);
++            detail.setTransferDescription(outputDataDir);
++            registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
++            registry.add(ChildDataType.EXPERIMENT_OUTPUT, outputArray, jobExecutionContext.getExperimentID());
++            
+         } catch (XmlException e) {
+             throw new GFacHandlerException("Cannot read output:" + e.getMessage(), e);
+         } catch (ConnectionException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (TransportException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (IOException e) {
+             throw new GFacHandlerException(e.getMessage(), e);
+         } catch (Exception e) {
+             try {
+                 status.setTransferState(TransferState.FAILED);
+                 detail.setTransferStatus(status);
+                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
+                 GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+             } catch (Exception e1) {
+                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
+             }
+             throw new GFacHandlerException("Error in retrieving results", e);
+         }
+ 
+     }
+ 
+     public void initProperties(Map<String, String> properties) throws GFacHandlerException {
+ 
+     }
+ }