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 2013/12/13 17:19:36 UTC

svn commit: r1550760 [1/3] - in /airavata/trunk: ./ modules/airavata-client/ modules/commons/ modules/commons/json/ modules/credential-store/ modules/distribution/airavata-server/ modules/distribution/airavata-server/src/main/assembly/ modules/distribu...

Author: raminder
Date: Fri Dec 13 16:19:35 2013
New Revision: 1550760

URL: http://svn.apache.org/r1550760
Log:
updated to fix AIRAVATA-965

Modified:
    airavata/trunk/   (props changed)
    airavata/trunk/modules/airavata-client/   (props changed)
    airavata/trunk/modules/commons/   (props changed)
    airavata/trunk/modules/commons/json/   (props changed)
    airavata/trunk/modules/credential-store/   (props changed)
    airavata/trunk/modules/distribution/airavata-server/pom.xml
    airavata/trunk/modules/distribution/airavata-server/src/main/assembly/bin-assembly.xml
    airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/gfac-config.xml
    airavata/trunk/modules/gfac/gfac-core/pom.xml
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/GFacAPI.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/GFacProvider.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ApplicationProcessor.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/DataStagingProcessor.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceProcessor.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/SPMDProcessor.java
    airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/SPMDVariations.java
    airavata/trunk/modules/gfac/gfac-core/src/test/java/org/apache/airavata/core/gfac/services/impl/AbstractBESTest.java
    airavata/trunk/modules/gfac/gfac-core/src/test/java/org/apache/airavata/core/gfac/services/impl/GSISSHProviderTest.java
    airavata/trunk/modules/gfac/gfac-core/src/test/java/org/apache/airavata/core/gfac/services/impl/JSDLGeneratorTest.java
    airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java
    airavata/trunk/modules/test-suite/pom.xml
    airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
    airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDeploymentDialog.java
    airavata/trunk/pom.xml
    airavata/trunk/tools/gsissh/pom.xml

Propchange: airavata/trunk/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Dec 13 16:19:35 2013
@@ -1,2 +1,3 @@
 .project
 target
+.settings

Propchange: airavata/trunk/modules/airavata-client/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Dec 13 16:19:35 2013
@@ -0,0 +1 @@
+target

Propchange: airavata/trunk/modules/commons/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Dec 13 16:19:35 2013
@@ -1 +1,2 @@
 target
+.settings

Propchange: airavata/trunk/modules/commons/json/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Dec 13 16:19:35 2013
@@ -0,0 +1,2 @@
+.settings
+target

Propchange: airavata/trunk/modules/credential-store/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Dec 13 16:19:35 2013
@@ -0,0 +1,2 @@
+.settings
+target

Modified: airavata/trunk/modules/distribution/airavata-server/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/pom.xml?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/distribution/airavata-server/pom.xml (original)
+++ airavata/trunk/modules/distribution/airavata-server/pom.xml Fri Dec 13 16:19:35 2013
@@ -421,10 +421,8 @@
         </dependency>
         <dependency>
             <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk16</artifactId>
+            <artifactId>bcprov-jdk15on</artifactId>
         </dependency>
-        <!--dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcmail-jdk15</artifactId> <version>1.45</version> 
-            </dependency -->
         <dependency>
             <groupId>org.apache.openjpa</groupId>
             <artifactId>openjpa-all</artifactId>
@@ -632,6 +630,23 @@
             <artifactId>libthrift</artifactId>
             <version>0.9.1</version>
         </dependency>
+        
+        <!-- Unicore dependencies -->
+          <dependency>
+			<groupId>eu.unicore</groupId>
+			<artifactId>ogsabes-client</artifactId>
+			<version>1.7.0-rc</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.santuario</groupId>
+					<artifactId>xmlsec</artifactId>
+				</exclusion>
+			    <exclusion>
+                    <groupId>org.bouncycastle</groupId>
+                    <artifactId>bcprov-jdk16</artifactId>
+                </exclusion>
+            </exclusions>
+		</dependency>
     </dependencies>
 
 

Modified: airavata/trunk/modules/distribution/airavata-server/src/main/assembly/bin-assembly.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/src/main/assembly/bin-assembly.xml?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/distribution/airavata-server/src/main/assembly/bin-assembly.xml (original)
+++ airavata/trunk/modules/distribution/airavata-server/src/main/assembly/bin-assembly.xml Fri Dec 13 16:19:35 2013
@@ -253,8 +253,7 @@
                 <include>org.apache.openjpa:openjpa-all:jar</include>
                 <include>com.sun.jersey:jersey-client:jar</include>
                 <include>com.sun.jersey:jersey-core:jar</include>
-                <include>org.bouncycastle:bcprov-jdk16</include>
-                <include>org.bouncycastle:bcmail-jdk16</include>
+                <include>org.bouncycastle:bcprov-jdk15on</include>
                 <include>org.apache.tomcat:tomcat-jasper</include>
                 <include>org.apache.tomcat:tomcat-jasper-el</include>
                 <include>org.apache.tomcat:tomcat-jsp-api</include>
@@ -293,6 +292,48 @@
    	 			<include>org.ogce:bcgss</include>	
 				<include>org.apache.xmlbeans:xmlbeans</include>
 				<include>org.apache.thrift:libthrift:jar:0.9.1</include>
+                  <!-- unicore start -->
+                <include>eu.unicore:ogsabes-client</include>
+				<include>eu.unicore:ogsabes-types</include>
+				<include>de.fzj.unicore:jsdl-xmlbeans</include>
+				<include>eu.unicore:cis-u6-infoprovider-types</include>
+				<include>eu.unicore.services:use-wsrftypes</include>
+				<include>eu.unicore:uas-types</include>
+				<include>eu.unicore:uas-client</include>
+				<include>eu.unicore.services:use-wsrfclient</include>
+				<include>org.apache.xmlbeans:xmlbeans-xpath</include>
+				<include>net.sf.saxon:saxon</include>
+				<include>net.sf.saxon:saxon-dom</include>
+				<include>net.sf.saxon:saxon-xpath</include>
+				<include>eu.unicore.security:secutils-cxf</include>
+				<include>eu.unicore.security:securityLibrary</include>
+				<include>log4j:apache-log4j-extras</include>
+				<include>eu.eu-emi.security:canl</include>
+				<include>org.bouncycastle:bcpkix-jdk15on</include>
+				<include>pl.edu.icm.saml:samly2</include>
+				<include>eu.unicore.security:SAMLtypes</include>
+				<include>org.apache.ws.security:wss4j</include>
+				<include>org.json:json</include>
+				<include>org.apache.cxf:cxf-rt-databinding-xmlbeans</include>
+				<include>org.apache.cxf:cxf-api</include>
+				<include>org.codehaus.woodstox:woodstox-core-asl</include>
+				<include>org.codehaus.woodstox:stax2-api</include>
+				<include>org.apache.ws.xmlschema:xmlschema-core</include>
+				<include>org.apache.cxf:cxf-rt-core</include>
+				<include>com.sun.xml.bind:jaxb-impl</include>
+				<include>org.apache.cxf:cxf-rt-frontend-jaxws</include>
+				<include>xml-resolver:xml-resolver</include>
+				<include>asm:asm</include>
+				<include>org.apache.cxf:cxf-rt-bindings-soap</include>
+				<include>org.apache.cxf:cxf-rt-databinding-jaxb</include>
+				<include>org.apache.cxf:cxf-rt-bindings-xml</include>
+				<include>org.apache.cxf:cxf-rt-frontend-simple</include>
+				<include>org.apache.cxf:cxf-rt-ws-addr</include>
+				<include>org.apache.cxf:cxf-rt-ws-policy</include>
+				<include>org.apache.cxf:cxf-rt-transports-http</include>
+				<include>org.apache.cxf:cxf-rt-features-clustering</include>
+				<include>eu.unicore:uftp-core</include>
+				<!-- unicore end-->
             </includes>
         </dependencySet>
         <dependencySet>

Modified: airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/gfac-config.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/gfac-config.xml?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/gfac-config.xml (original)
+++ airavata/trunk/modules/distribution/airavata-server/src/main/resources/conf/gfac-config.xml Fri Dec 13 16:19:35 2013
@@ -36,14 +36,7 @@
             <Handler class="org.apache.airavata.gfac.handler.GridFTPOutputHandler"/>
         </OutHandlers>
     </Provider>
-      <Provider class="org.apache.airavata.gfac.provider.impl.BESProvider" host="org.apache.airavata.schemas.gfac.impl.UnicoreHostTypeImpl">
-        <InHandlers>
-        	<Handler class="org.apache.airavata.gfac.handler.GramDirectorySetupHandler"/>
-            <Handler class="org.apache.airavata.gfac.handler.GridFTPInputHandler"/>
-        </InHandlers>
-        <OutHandlers>
-            <Handler class="org.apache.airavata.gfac.handler.GridFTPOutputHandler"/>
-        </OutHandlers>
+    <Provider class="org.apache.airavata.gfac.provider.impl.BESProvider" host="org.apache.airavata.schemas.gfac.impl.UnicoreHostTypeImpl">
     </Provider>
 
     <Provider class="org.apache.airavata.gfac.ec2.EC2Provider" host="org.apache.airavata.schemas.gfac.impl.Ec2HostTypeImpl">

Modified: airavata/trunk/modules/gfac/gfac-core/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/pom.xml?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/pom.xml (original)
+++ airavata/trunk/modules/gfac/gfac-core/pom.xml Fri Dec 13 16:19:35 2013
@@ -33,6 +33,16 @@
             <groupId>org.jglobus</groupId>
             <artifactId>gram</artifactId>
             <version>${jglobus.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.bouncycastle</groupId>
+                    <artifactId>bcprov-jdk16</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
         </dependency>
         <dependency>
             <groupId>org.jglobus</groupId>
@@ -135,13 +145,23 @@
             <artifactId>slf4j-log4j12</artifactId>
             <scope>test</scope>
         </dependency>
-
         <!-- Unicore dependencies -->
-        <dependency>
-            <groupId>eu.unicore</groupId>
-            <artifactId>ogsabes-client</artifactId>
-            <version>1.6.0</version>
-        </dependency>
+          <dependency>
+			<groupId>eu.unicore</groupId>
+			<artifactId>ogsabes-client</artifactId>
+			<version>1.7.0-rc</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.santuario</groupId>
+					<artifactId>xmlsec</artifactId>
+				</exclusion>
+			    <exclusion>
+                    <groupId>org.bouncycastle</groupId>
+                    <artifactId>bcprov-jdk16</artifactId>
+                </exclusion>
+            </exclusions>
+		</dependency>
+ 
 
         <!-- Hadoop provider related dependencies -->
         <dependency>

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/GFacAPI.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/GFacAPI.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/GFacAPI.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/GFacAPI.java Fri Dec 13 16:19:35 2013
@@ -72,23 +72,12 @@ public class GFacAPI {
                 executeProvider(provider, jobExecutionContext);
                 disposeProvider(provider, jobExecutionContext);
             }
-
+            invokeOutFlowHandlers(jobExecutionContext);
         }catch (Exception e){
             jobExecutionContext.setProperty(ERROR_SENT,"true");
             jobExecutionContext.getNotifier().publish(new ExecutionFailEvent(e.getCause()));
             throw new GFacException(e.getMessage(),e);
         }
-        finally {
-            try{
-            invokeOutFlowHandlers(jobExecutionContext);
-            }catch(GFacException e){
-                // This will avoid getting two error notification messages if there's already an error in provider
-                if(!Boolean.getBoolean((String)jobExecutionContext.getProperty(ERROR_SENT))){
-                  jobExecutionContext.getNotifier().publish(new ExecutionFailEvent(e.getCause()));
-            }
-               throw e;
-            }
-        }
     }
 
     private void initProvider(GFacProvider provider, JobExecutionContext jobExecutionContext) throws GFacException {

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/GFacProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/GFacProvider.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/GFacProvider.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/GFacProvider.java Fri Dec 13 16:19:35 2013
@@ -58,7 +58,7 @@ public interface GFacProvider {
      * @param jobExecutionContext The job execution context, contains runtime information.
      * @throws GFacException If an error occurred while cancelling the job.
      */
-    public void cancelJob(String jobId, JobExecutionContext jobExecutionContext) throws GFacException;
+    public void cancelJob(String jobId, JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException;
 
 
 }

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java Fri Dec 13 16:19:35 2013
@@ -20,29 +20,49 @@
 */
 package org.apache.airavata.gfac.provider.impl;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.PrivateKey;
+import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
+import java.util.Random;
 import java.util.Set;
 
+import javax.security.auth.x500.X500Principal;
+
+import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.context.security.GSISecurityContext;
+import org.apache.airavata.gfac.notification.events.StatusChangeEvent;
+import org.apache.airavata.gfac.notification.events.UnicoreJobIDEvent;
 import org.apache.airavata.gfac.provider.GFacProvider;
 import org.apache.airavata.gfac.provider.GFacProviderException;
+import org.apache.airavata.gfac.provider.utils.DataTransferrer;
+import org.apache.airavata.gfac.provider.utils.JSDLGenerator;
+import org.apache.airavata.gfac.provider.utils.StorageCreator;
 import org.apache.airavata.gfac.utils.GFacUtils;
 import org.apache.airavata.registry.api.workflow.ApplicationJob;
 import org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
 import org.apache.airavata.schemas.gfac.UnicoreHostType;
 import org.apache.xmlbeans.XmlCursor;
+import org.bouncycastle.asn1.ASN1InputStream;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.asn1.x500.style.BCStyle;
+import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration.Enum;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStatusType;
@@ -50,20 +70,25 @@ import org.ggf.schemas.bes.x2006.x08.bes
 import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityResponseDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesResponseDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
 import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
-import org.globus.gsi.gssapi.GlobusGSSCredentialImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3.x2005.x08.addressing.EndpointReferenceType;
 
 import de.fzj.unicore.bes.client.FactoryClient;
 import de.fzj.unicore.bes.faults.UnknownActivityIdentifierFault;
+import de.fzj.unicore.uas.client.StorageClient;
 import de.fzj.unicore.wsrflite.xmlbeans.WSUtilities;
+import eu.emi.security.authn.x509.helpers.CertificateHelpers;
+import eu.emi.security.authn.x509.helpers.proxy.X509v3CertificateBuilder;
+import eu.emi.security.authn.x509.impl.CertificateUtils;
 import eu.emi.security.authn.x509.impl.CertificateUtils.Encoding;
 import eu.emi.security.authn.x509.impl.DirectoryCertChainValidator;
-import eu.emi.security.authn.x509.impl.PEMCredential;
+import eu.emi.security.authn.x509.impl.KeyAndCertCredential;
+import eu.emi.security.authn.x509.impl.X500NameUtils;
 import eu.unicore.util.httpclient.DefaultClientConfiguration;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
 
 
 public class BESProvider implements GFacProvider {
@@ -77,262 +102,457 @@ public class BESProvider implements GFac
         
 	public void initialize(JobExecutionContext jobExecutionContext)
 			throws GFacProviderException, GFacException {
-		
-    	log.info("Initializing UNICORE Provider");
+		log.info("Initializing UNICORE Provider");
     	initSecurityProperties(jobExecutionContext);
     	log.debug("initialized security properties");
-
-	}
+    }
 
 
 	public void execute(JobExecutionContext jobExecutionContext)
 			throws GFacProviderException {
-		UnicoreHostType host = (UnicoreHostType) jobExecutionContext.getApplicationContext().getHostDescription().getType();
-        
+        UnicoreHostType host = (UnicoreHostType) jobExecutionContext.getApplicationContext().getHostDescription()
+                .getType();
+
         String factoryUrl = host.getUnicoreBESEndPointArray()[0];
 
         EndpointReferenceType eprt = EndpointReferenceType.Factory.newInstance();
         eprt.addNewAddress().setStringValue(factoryUrl);
 
-        CreateActivityDocument cad = CreateActivityDocument.Factory
-                .newInstance();
-        
-		JobDefinitionType jobDefinition = null;
-        try {
-            //FIXME: Replace by a native client
-//			jobDefinition = JSDLGenerator.buildJSDLInstance(jobExecutionContext).getJobDefinition();
-//			cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition);
-			System.out.println("REMOVE ME");
-		} catch (Exception e1) {
-			throw new GFacProviderException("Cannot generate JSDL instance from the JobExecutionContext.",e1);
-		}
-        
-        FactoryClient factory = null;
-        try {
-            factory = new FactoryClient(eprt, secProperties);
-        } catch (Exception e) {
-            throw new GFacProviderException("");
+        String userDN = getUserName(jobExecutionContext);
+
+        if (userDN == null || userDN.equalsIgnoreCase("admin")) {
+            userDN = "CN=zdv575, O=Ultrascan Gateway, C=DE";
         }
-        CreateActivityResponseDocument response = null;
+
+        String xlogin = getCNFromUserDN(userDN);
+        // create storage
+        StorageCreator storageCreator = new StorageCreator(secProperties, factoryUrl, 5, xlogin);
+
+        StorageClient sc = null;
         try {
-            log.info(String.format("Activity Submitting to %s ... \n", factoryUrl));
-            response = factory.createActivity(cad);
-            log.info(String.format("Activity Submitted to %s \n", factoryUrl));
-        } catch (Exception e) {
-        	e.printStackTrace();
-            throw new GFacProviderException("Cannot create activity.", e);
-        } 
-        EndpointReferenceType activityEpr = response
-                .getCreateActivityResponse().getActivityIdentifier();
-        
-        log.debug("Activity EPR: "+activityEpr);
-        
-        log.info("Activity: "+activityEpr.getAddress().getStringValue()+  " Submitted.");
-        
-        //factory.waitWhileActivityIsDone(activityEpr, 1000);
-        jobId = WSUtilities.extractResourceID(activityEpr);
-        if (jobId == null) {
-            jobId = new Long(Calendar.getInstance().getTimeInMillis())
-                    .toString();
-        }
-		saveApplicationJob(jobExecutionContext, jobDefinition);
-        log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), factory.getActivityStatus(activityEpr)
-                .toString()));
-        
-        
-        //TODO publish the status messages to the message bus
-        while ((factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED) &&
-                (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FAILED)){
-        	
+            try {
+                sc = storageCreator.createStorage();
+            } catch (Exception e2) {
+                log.error("Cannot create storage..");
+                throw new GFacProviderException("Cannot create storage..", e2);
+            }
+
+            CreateActivityDocument cad = CreateActivityDocument.Factory.newInstance();
+            JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory.newInstance();
+
+            JobDefinitionType jobDefinition = jobDefDoc.addNewJobDefinition();
+            try {
+                jobDefinition = JSDLGenerator.buildJSDLInstance(jobExecutionContext, sc.getUrl()).getJobDefinition();
+                cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition);
+
+                log.info("JSDL" + jobDefDoc.toString());
+            } catch (Exception e1) {
+                throw new GFacProviderException("Cannot generate JSDL instance from the JobExecutionContext.", e1);
+            }
+
+            // upload files if any
+            DataTransferrer dt = new DataTransferrer(jobExecutionContext, sc);
+            dt.uploadLocalFiles();
+
+            FactoryClient factory = null;
+            try {
+                factory = new FactoryClient(eprt, secProperties);
+            } catch (Exception e) {
+                throw new GFacProviderException(e.getLocalizedMessage(), e);
+            }
+
+            CreateActivityResponseDocument response = null;
+            try {
+                log.info(String.format("Activity Submitting to %s ... \n", factoryUrl));
+                response = factory.createActivity(cad);
+                log.info(String.format("Activity Submitted to %s \n", factoryUrl));
+            } catch (Exception e) {
+                throw new GFacProviderException("Cannot create activity.", e);
+            }
+            EndpointReferenceType activityEpr = response.getCreateActivityResponse().getActivityIdentifier();
+
+            log.info("Activity : " + activityEpr.getAddress().getStringValue() + " Submitted.");
+
+            // factory.waitWhileActivityIsDone(activityEpr, 1000);
+            jobId = WSUtilities.extractResourceID(activityEpr);
+            if (jobId == null) {
+                jobId = new Long(Calendar.getInstance().getTimeInMillis()).toString();
+            }
+            log.info("JobID: " + jobId);
+            jobExecutionContext.getNotifier().publish(new UnicoreJobIDEvent(jobId));
+            saveApplicationJob(jobExecutionContext, jobDefinition, activityEpr.toString());
+
+            factory.getActivityStatus(activityEpr);
+            log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(),
+                    factory.getActivityStatus(activityEpr).toString()));
+
+            // TODO publish the status messages to the message bus
+            while ((factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED)
+                    && (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FAILED)
+                    && (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.CANCELLED)) {
+
+                ActivityStatusType activityStatus = null;
+                try {
+                    activityStatus = getStatus(factory, activityEpr);
+                    ApplicationJobStatus applicationJobStatus = getApplicationJobStatus(activityStatus);
+                    String jobStatusMessage = "Status of job " + jobId + "is " + applicationJobStatus;
+                    jobExecutionContext.getNotifier().publish(new StatusChangeEvent(jobStatusMessage));
+                    GFacUtils.updateApplicationJobStatus(jobExecutionContext, jobId, applicationJobStatus);
+                } catch (UnknownActivityIdentifierFault e) {
+                    throw new GFacProviderException(e.getMessage(), e.getCause());
+                }
+
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e) {
+                }
+                continue;
+            }
+
             ActivityStatusType activityStatus = null;
-    		try {
-    			activityStatus = getStatus(factory, activityEpr);
-    			GFacUtils.updateApplicationJobStatus(jobExecutionContext, jobId, getApplicationJobStatus(activityStatus));
-    			log.info (subStatusAsString(activityStatus));
-    		} catch (UnknownActivityIdentifierFault e) {
-    			throw new GFacProviderException(e.getMessage(), e.getCause());
-    		}
-	
             try {
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                activityStatus = getStatus(factory, activityEpr);
+            } catch (UnknownActivityIdentifierFault e) {
+                throw new GFacProviderException(e.getMessage(), e.getCause());
+            }
+
+            log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), activityStatus.getState()
+                    .toString()));
+
+            if ((activityStatus.getState() == ActivityStateEnumeration.FAILED)) {
+                String error = activityStatus.getFault().getFaultcode().getLocalPart() + "\n"
+                        + activityStatus.getFault().getFaultstring() + "\n EXITCODE: " + activityStatus.getExitCode();
+                log.info(error);
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e) {
+                }
+                dt.downloadStdOuts();
+            } else if (activityStatus.getState() == ActivityStateEnumeration.CANCELLED) {
+                String experimentID = (String) jobExecutionContext.getProperty(Constants.PROP_TOPIC);
+                ApplicationJobStatus applicationJobStatus = ApplicationJobStatus.CANCELED;
+                String jobStatusMessage = "Status of job " + jobId + "is " + applicationJobStatus;
+                jobExecutionContext.getNotifier().publish(new StatusChangeEvent(jobStatusMessage));
+                GFacUtils.updateApplicationJobStatus(jobExecutionContext, jobId, applicationJobStatus);
+                throw new GFacProviderException(experimentID + "Job Canceled");
+            }
+
+            else if (activityStatus.getState() == ActivityStateEnumeration.FINISHED) {
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e) {
+                }
+                if (activityStatus.getExitCode() == 0) {
+                    dt.downloadRemoteFiles();
+                } else {
+                    dt.downloadStdOuts();
+                }
+            }
+
+        } catch (UnknownActivityIdentifierFault e1) {
+            throw new GFacProviderException(e1.getLocalizedMessage(), e1);
+        } finally {
+            // destroy sms instance
+            try {
+                if (sc != null) {
+                    sc.destroy();
+                }
+            } catch (Exception e) {
+                log.warn("Cannot destroy temporary SMS instance:" + sc.getUrl(), e);
             }
-            continue;
         }
-        
-        ActivityStatusType activityStatus = null;
-		try {
-			activityStatus = getStatus(factory, activityEpr);
-		} catch (UnknownActivityIdentifierFault e) {
-			throw new GFacProviderException(e.getMessage(), e.getCause());
-		}
-        
-        log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), activityStatus.getState().toString()));
-        
-		if ((activityStatus.getState() == ActivityStateEnumeration.FAILED)) {
-				log.info(activityStatus.getFault().getFaultcode().getLocalPart()
-						+ "\n" + activityStatus.getFault().getFaultstring());
-				log.info("EXITCODE: "+activityStatus.getExitCode());
-		} 
-	}
+    }
 
 	private ApplicationJobStatus getApplicationJobStatus(ActivityStatusType activityStatus){
-		if (activityStatus==null){
-			return ApplicationJobStatus.UNKNOWN;
-		}
-		Enum state = activityStatus.getState();
-		if (ActivityStateEnumeration.PENDING.equals(state)){
-			return ApplicationJobStatus.PENDING;
-		} else if (ActivityStateEnumeration.CANCELLED.equals(state)){
-			return ApplicationJobStatus.CANCELLED;
-		} else if (ActivityStateEnumeration.FAILED.equals(state)){
-			return ApplicationJobStatus.FAILED;
-		} else if (ActivityStateEnumeration.FINISHED.equals(state)){
-			return ApplicationJobStatus.FINISHED;
-		} else if (ActivityStateEnumeration.RUNNING.equals(state)){
-			return ApplicationJobStatus.EXECUTING;
-		}
-		return ApplicationJobStatus.UNKNOWN;
-	}
-	
-	private void saveApplicationJob(JobExecutionContext jobExecutionContext,
-			JobDefinitionType jobDefinition) {
-		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
+        if (activityStatus == null) {
+            return ApplicationJobStatus.UNKNOWN;
+        }
+        Enum state = activityStatus.getState();
+        String status = null;
+        XmlCursor acursor = activityStatus.newCursor();
+        try {
+            if (acursor.toFirstChild()) {
+                if (acursor.getName().getNamespaceURI().equals("http://schemas.ogf.org/hpcp/2007/01/fs")) {
+                    status = acursor.getName().getLocalPart();
+                }
+            }
+            if (status != null) {
+                if (status.equalsIgnoreCase("Queued") || status.equalsIgnoreCase("Starting")
+                        || status.equalsIgnoreCase("Ready")) {
+                    return ApplicationJobStatus.PENDING;
+                } else if (status.equalsIgnoreCase("Staging-In")) {
+                    return ApplicationJobStatus.STAGING;
+                } else if (status.equalsIgnoreCase("Staging-Out") || status.equalsIgnoreCase("FINISHED")) {
+                    return ApplicationJobStatus.FINISHED;
+                } else if (status.equalsIgnoreCase("Executing")) {
+                    return ApplicationJobStatus.ACTIVE;
+                } else if (status.equalsIgnoreCase("FAILED")) {
+                    return ApplicationJobStatus.FAILED;
+                } else if (status.equalsIgnoreCase("CANCELLED")) {
+                    return ApplicationJobStatus.CANCELED;
+                }
+            } else {
+                if (ActivityStateEnumeration.CANCELLED.equals(state)) {
+                    return ApplicationJobStatus.CANCELED;
+                } else if (ActivityStateEnumeration.FAILED.equals(state)) {
+                    return ApplicationJobStatus.FAILED;
+                } else if (ActivityStateEnumeration.FINISHED.equals(state)) {
+                    return ApplicationJobStatus.FINISHED;
+                } else if (ActivityStateEnumeration.RUNNING.equals(state)) {
+                    return ApplicationJobStatus.ACTIVE;
+                }
+            }
+        } finally {
+            if (acursor != null)
+                acursor.dispose();
+        }
+        return ApplicationJobStatus.UNKNOWN;
+    }
+
+    private void saveApplicationJob(JobExecutionContext jobExecutionContext, JobDefinitionType jobDefinition,
+                                    String metadata) {
+        ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
         appJob.setJobId(jobId);
         appJob.setJobData(jobDefinition.toString());
         appJob.setSubmittedTime(Calendar.getInstance().getTime());
         appJob.setStatus(ApplicationJobStatus.SUBMITTED);
         appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+        appJob.setMetadata(metadata);
         GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
-	}
+    }
 
-	public void dispose(JobExecutionContext jobExecutionContext)
-			throws GFacProviderException {
-		secProperties = null;
-	}
+    public void dispose(JobExecutionContext jobExecutionContext) throws GFacProviderException {
+        secProperties = null;
+    }
+
+    /**
+     * EndpointReference need to be saved to make cancel work.
+     *
+     * @param activityEpr
+     * @param jobExecutionContext
+     * @throws GFacProviderException
+     */
+    public void cancelJob(String activityEpr, JobExecutionContext jobExecutionContext) throws GFacProviderException {
+        try {
+            initSecurityProperties(jobExecutionContext);
+            EndpointReferenceType eprt = EndpointReferenceType.Factory.parse(activityEpr);
+            UnicoreHostType host = (UnicoreHostType) jobExecutionContext.getApplicationContext().getHostDescription()
+                    .getType();
+
+            String factoryUrl = host.getUnicoreBESEndPointArray()[0];
+            EndpointReferenceType epr = EndpointReferenceType.Factory.newInstance();
+            epr.addNewAddress().setStringValue(factoryUrl);
+
+            FactoryClient factory = new FactoryClient(epr, secProperties);
+            factory.terminateActivity(eprt);
+        } catch (Exception e) {
+            throw new GFacProviderException(e.getLocalizedMessage(),e);
+        }
+
+    }
+
+    protected void downloadOffline(String smsEpr, JobExecutionContext jobExecutionContext) throws GFacProviderException {
+        try {
+            initSecurityProperties(jobExecutionContext);
+            EndpointReferenceType eprt = EndpointReferenceType.Factory.parse(smsEpr);
+            StorageClient sms = new StorageClient(eprt, secProperties);
+            DataTransferrer dt = new DataTransferrer(jobExecutionContext, sms);
+            // there must be output files there
+            // this is also possible if client is re-connected, the jobs are
+            // still
+            // running and no output is produced
+            dt.downloadRemoteFiles();
+
+            // may be use the below method before downloading for checking
+            // the number of entries
+            // sms.listDirectory(".");
+
+        } catch (Exception e) {
+            throw new GFacProviderException(e.getLocalizedMessage(), e);
+        }
+    }
+
+    protected void initSecurityProperties(JobExecutionContext jobExecutionContext) throws GFacProviderException,
+            GFacException {
+
+        if (secProperties != null)
+            return;
+
+        GSISecurityContext gssContext = (GSISecurityContext) jobExecutionContext
+                .getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT);
+
+        try {
+            String certLocation = gssContext.getTrustedCertificatePath();
+            List<String> trustedCert = new ArrayList<String>();
+            trustedCert.add(certLocation + "/*.0");
+            trustedCert.add(certLocation + "/*.pem");
+
+            DirectoryCertChainValidator dcValidator = new DirectoryCertChainValidator(trustedCert, Encoding.PEM, -1,
+                    60000, null);
+
+            String userID = getUserName(jobExecutionContext);
+
+            if ( userID == null || "".equals(userID) || userID.equalsIgnoreCase("admin") ) {
+                userID = "CN=zdv575, O=Ultrascan Gateway, C=DE";
+            }
+
+            String userDN = userID.replaceAll("^\"|\"$", "");
+
+            // TODO: should be changed to default airavata server locations
+            KeyAndCertCredential cred = generateShortLivedCertificate(userDN, certLocation
+                    + "/cacert.pem", certLocation
+                    + "/cakey.pem", "ultrascan3");
+            secProperties = new DefaultClientConfiguration(dcValidator, cred);
+
+            // secProperties.doSSLAuthn();
+            secProperties.getETDSettings().setExtendTrustDelegation(true);
+
+            secProperties.setDoSignMessage(true);
+
+            String[] outHandlers = secProperties.getOutHandlerClassNames();
+
+            Set<String> outHandlerLst = null;
+
+            // timeout in milliseconds
+            Properties p = secProperties.getExtraSettings();
+            p.setProperty("http.connection.timeout", "300000");
+            p.setProperty("http.socket.timeout", "300000");
+
+            if (outHandlers == null) {
+                outHandlerLst = new HashSet<String>();
+            } else {
+                outHandlerLst = new HashSet<String>(Arrays.asList(outHandlers));
+            }
+
+            outHandlerLst.add("de.fzj.unicore.uas.security.ProxyCertOutHandler");
+
+            secProperties.setOutHandlerClassNames(outHandlerLst.toArray(new String[outHandlerLst.size()]));
+
+        } catch (Exception e) {
+            throw new GFacProviderException(e.getMessage(), e);
+        }
+    }
+
+    private String getUserName(JobExecutionContext context) {
+        if (context.getContextHeader() != null) {
+            return context.getContextHeader().getUserIdentifier();
+        } else {
+            return "";
+        }
+
+    }
+
+    protected ActivityStatusType getStatus(FactoryClient fc, EndpointReferenceType activityEpr)
+            throws UnknownActivityIdentifierFault {
+
+        GetActivityStatusesDocument stats = GetActivityStatusesDocument.Factory.newInstance();
+
+        stats.addNewGetActivityStatuses().setActivityIdentifierArray(new EndpointReferenceType[] { activityEpr });
+
+        GetActivityStatusesResponseDocument resDoc = fc.getActivityStatuses(stats);
+
+        ActivityStatusType activityStatus = resDoc.getGetActivityStatusesResponse().getResponseArray()[0]
+                .getActivityStatus();
+        return activityStatus;
+    }
+
+    protected String formatStatusMessage(String activityUrl, String status) {
+        return String.format("Activity %s is %s.\n", activityUrl, status);
+    }
+
+    protected String subStatusAsString(ActivityStatusType statusType) {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append(statusType.getState().toString());
+
+        XmlCursor acursor = statusType.newCursor();
+        if (acursor.toFirstChild()) {
+            do {
+                if (acursor.getName().getNamespaceURI().equals("http://schemas.ogf.org/hpcp/2007/01/fs")) {
+                    sb.append(":");
+                    sb.append(acursor.getName().getLocalPart());
+                }
+            } while (acursor.toNextSibling());
+            acursor.dispose();
+            return sb.toString();
+        } else {
+            acursor.dispose();
+            return sb.toString();
+        }
+
+    }
 
-    @Override
-    public void cancelJob(String jobId, JobExecutionContext jobExecutionContext) throws GFacException {
-        throw new NotImplementedException();
-    }
-
-    protected void initSecurityProperties(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException{
-		
-		if (secProperties != null) return;
-		
-
-		
-		GSISecurityContext gssContext = (GSISecurityContext)jobExecutionContext.
-                getSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT);
-
-		GlobusGSSCredentialImpl gss = (GlobusGSSCredentialImpl) gssContext.getGssCredentials();
-		
-		ByteArrayOutputStream bos = new ByteArrayOutputStream();
-		
-		BufferedOutputStream bufos = new BufferedOutputStream(bos);
-		
-		ByteArrayInputStream bis = null;
-		BufferedInputStream bufis = null;
-		try{
-
-            // TODO verify whether this is correct
-			gss.getX509Credential().save(bufos);
-			bufos.flush();
-			
-			
-			
-			//TODO: to be supported by airavata gsscredential class
-			List<String> trustedCert = new ArrayList<String>();
-			trustedCert.add(GSISecurityContext.getTrustedCertificatePath() + "/*.0");
-			trustedCert.add(GSISecurityContext.getTrustedCertificatePath() + "/*.pem");
-			
-			char[] c = null;
-			
-			DirectoryCertChainValidator dcValidator = new DirectoryCertChainValidator(trustedCert, Encoding.PEM, -1, 60000, null);
-			bis = new ByteArrayInputStream(bos.toByteArray());
-			bufis = new BufferedInputStream(bis);
-			PEMCredential pem = new PEMCredential(bufis, c);
-			
-			secProperties = new DefaultClientConfiguration(dcValidator, pem);
-			secProperties.doSSLAuthn();
-			
-			String[] outHandlers = secProperties.getOutHandlerClassNames();
-			
-			Set<String> outHandlerLst = null; 
-			
-	        if(outHandlers == null) {
-	        	outHandlerLst = new HashSet<String>();
-	        }
-	        else  {
-	        	outHandlerLst = new HashSet<String>(Arrays.asList(outHandlers));
-	        }
-	        
-	        outHandlerLst.add("de.fzj.unicore.uas.security.ProxyCertOutHandler");
-	        
-	        secProperties.setOutHandlerClassNames(outHandlerLst.toArray(new String[outHandlerLst.size()]));
-	        
-	        
-		}
-		catch (Exception e) {
-			throw new GFacProviderException(e.getMessage(), e); 
-		} 
-		finally{
-			try {
-				if(bos!=null)bos.close();
-				if(bufos!=null)bufos.close();
-				if(bis!=null)bis.close();
-				if(bufis!=null)bufis.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	protected ActivityStatusType getStatus(FactoryClient fc, EndpointReferenceType activityEpr) throws UnknownActivityIdentifierFault{
-		
-    	GetActivityStatusesDocument stats = GetActivityStatusesDocument.Factory.newInstance();
-    	
-    	stats.addNewGetActivityStatuses().setActivityIdentifierArray(new EndpointReferenceType[] {activityEpr});
-    	
-		GetActivityStatusesResponseDocument resDoc = fc.getActivityStatuses(stats);
-		
-		ActivityStatusType activityStatus = resDoc
-				.getGetActivityStatusesResponse()
-				.getResponseArray()[0].getActivityStatus();
-		return activityStatus;
-	}
-	
-	
-	protected String formatStatusMessage(String activityUrl, String status){
-		return String.format("Activity %s is %s.\n", activityUrl, status);
-	}
-	
-	protected String subStatusAsString(ActivityStatusType statusType) {
-		
-		
-		StringBuffer sb = new StringBuffer();
-		
-		sb.append(statusType.getState().toString());
-		
-		XmlCursor acursor = statusType.newCursor();
-		if (acursor.toFirstChild()) {
-			do {
-				if(acursor.getName().getNamespaceURI().equals("http://schemas.ogf.org/hpcp/2007/01/fs")) {
-					sb.append(":");
-					sb.append(acursor.getName().getLocalPart());
-				}
-			} while (acursor.toNextSibling());
-			acursor.dispose();
-			return sb.toString();
-		} else {
-			acursor.dispose();                               
-			return sb.toString();
-		}
-		
-	}
     public void initProperties(Map<String, String> properties) throws GFacProviderException, GFacException {
 
     }
 
+    protected KeyAndCertCredential generateShortLivedCertificate(String userDN, String caCertPath, String caKeyPath,
+                                                                 String caPwd) throws Exception {
+        final long CredentialGoodFromOffset = 1000L * 60L * 15L; // 15 minutes
+        // ago
+
+        final long startTime = System.currentTimeMillis() - CredentialGoodFromOffset;
+        final long endTime = startTime + 30 * 3600 * 1000;
+
+        String keyLengthProp = "1024";
+        int keyLength = Integer.parseInt(keyLengthProp);
+        String signatureAlgorithm = "SHA1withRSA";
+
+        KeyAndCertCredential caCred = getCACredential(caCertPath, caKeyPath, caPwd);
+
+        KeyPairGenerator kpg = KeyPairGenerator.getInstance(caCred.getKey().getAlgorithm());
+        kpg.initialize(keyLength);
+        KeyPair pair = kpg.generateKeyPair();
+
+        X500Principal subjectDN = new X500Principal(userDN);
+        Random rand = new Random();
+
+        SubjectPublicKeyInfo publicKeyInfo;
+        try {
+            publicKeyInfo = SubjectPublicKeyInfo.getInstance(new ASN1InputStream(pair.getPublic().getEncoded())
+                    .readObject());
+        } catch (IOException e) {
+            throw new InvalidKeyException("Can not parse the public key"
+                    + "being included in the short lived certificate", e);
+        }
+
+        X500Name issuerX500Name = CertificateHelpers.toX500Name(caCred.getCertificate().getSubjectX500Principal());
+
+        X500Name subjectX500Name = CertificateHelpers.toX500Name(subjectDN);
+
+        X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuerX500Name, new BigInteger(20, rand),
+                new Date(startTime), new Date(endTime), subjectX500Name, publicKeyInfo);
+
+        AlgorithmIdentifier sigAlgId = X509v3CertificateBuilder.extractAlgorithmId(caCred.getCertificate());
+
+        X509Certificate certificate = certBuilder.build(caCred.getKey(), sigAlgId, signatureAlgorithm, null, null);
+
+        certificate.checkValidity(new Date());
+        certificate.verify(caCred.getCertificate().getPublicKey());
+        KeyAndCertCredential result = new KeyAndCertCredential(pair.getPrivate(), new X509Certificate[] { certificate,
+                caCred.getCertificate() });
+
+        return result;
+    }
+
+    private KeyAndCertCredential getCACredential(String caCertPath, String caKeyPath, String password) throws Exception {
+        InputStream isKey = new FileInputStream(caKeyPath);
+        PrivateKey pk = CertificateUtils.loadPrivateKey(isKey, Encoding.PEM, password.toCharArray());
+
+        InputStream isCert = new FileInputStream(caCertPath);
+        X509Certificate caCert = CertificateUtils.loadCertificate(isCert, Encoding.PEM);
+
+        if (isKey != null)
+            isKey.close();
+        if (isCert != null)
+            isCert.close();
+
+        return new KeyAndCertCredential(pk, new X509Certificate[] { caCert });
+    }
+
+    private String getCNFromUserDN(String userDN) {
+        return X500NameUtils.getAttributeValues(userDN, BCStyle.CN)[0];
+
+    }
 }

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java Fri Dec 13 16:19:35 2013
@@ -179,7 +179,7 @@ public class GramProvider implements GFa
                  * batch.
                 * The third boolean is to specify to use the full proxy and not delegate a limited proxy.
                 */
-                job.request(true, gateKeeper, false, false);
+                job.request(gateKeeper, false, false);
 
                 // Single boolean to track all authentication failures, therefore we need to re-initialize
                 // this here
@@ -245,7 +245,7 @@ public class GramProvider implements GFa
             */
             try {
 
-                job.request(true, gateKeeper, false, false);
+                job.request(gateKeeper, false, false);
                 renewCredentialsAttempt = false;
 
             } catch (GramException e) {

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ApplicationProcessor.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ApplicationProcessor.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ApplicationProcessor.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ApplicationProcessor.java Fri Dec 13 16:19:35 2013
@@ -1,223 +1,230 @@
-/*
- *
- * 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.provider.utils;
 
-import java.io.File;
-
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.schemas.gfac.ExtendedKeyValueType;
 import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
 import org.apache.airavata.schemas.gfac.JobTypeType;
 import org.apache.airavata.schemas.gfac.NameValuePairType;
-import org.ogf.schemas.jsdl.ApplicationType;
-import org.ogf.schemas.jsdl.JobDefinitionType;
-import org.ogf.schemas.jsdl.posix.EnvironmentType;
-import org.ogf.schemas.jsdl.posix.FileNameType;
-import org.ogf.schemas.jsdl.spmd.NumberOfProcessesType;
-import org.ogf.schemas.jsdl.spmd.ProcessesPerHostType;
-import org.ogf.schemas.jsdl.spmd.ThreadsPerProcessType;
-
-public class ApplicationProcessor {
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ApplicationType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.EnvironmentType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.FileNameType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.UserNameType;
+import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.NumberOfProcessesType;
+import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.ProcessesPerHostType;
+import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.ThreadsPerProcessType;
 
-    public static void generateJobSpecificAppElements(JobDefinitionType value, JobExecutionContext context) {
-
-        HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context.getApplicationContext()
-                .getApplicationDeploymentDescription().getType();
-
-        createGenericApplication(value, appDepType);
+import java.io.File;
 
-        if (appDepType.getApplicationEnvironmentArray().length > 0) {
-            createApplicationEnvironment(value, appDepType.getApplicationEnvironmentArray(), appDepType);
-        }
-
-        if (appDepType.getExecutableLocation() != null) {
-            FileNameType fNameType = FileNameType.Factory.newInstance();
-            fNameType.setStringValue(appDepType.getExecutableLocation());
-            if (isParallelJob(appDepType)) {
-                JSDLUtils.getOrCreateSPMDApplication(value).setExecutable(fNameType);
-                JSDLUtils.getSPMDApplication(value).setSPMDVariation(getSPMDVariation(appDepType));
-
-                if (getValueFromMap(appDepType, JSDLUtils.NUMBEROFPROCESSES) != null) {
-                    NumberOfProcessesType num = NumberOfProcessesType.Factory.newInstance();
-                    num.setStringValue(getValueFromMap(appDepType, JSDLUtils.NUMBEROFPROCESSES));
-                    JSDLUtils.getSPMDApplication(value).setNumberOfProcesses(num);
-                }
-
-                if (getValueFromMap(appDepType, JSDLUtils.PROCESSESPERHOST) != null) {
-                    ProcessesPerHostType pph = ProcessesPerHostType.Factory.newInstance();
-                    pph.setStringValue(getValueFromMap(appDepType, JSDLUtils.PROCESSESPERHOST));
-                    JSDLUtils.getSPMDApplication(value).setProcessesPerHost(pph);
-                }
-
-                if (getValueFromMap(appDepType, JSDLUtils.THREADSPERHOST) != null) {
-                    ThreadsPerProcessType tpp = ThreadsPerProcessType.Factory.newInstance();
-                    tpp.setStringValue(getValueFromMap(appDepType, JSDLUtils.THREADSPERHOST));
-                    JSDLUtils.getSPMDApplication(value).setThreadsPerProcess(tpp);
-                }
-            } else
-                JSDLUtils.getOrCreatePOSIXApplication(value).setExecutable(fNameType);
-        }
-
-        if (appDepType.getStandardOutput() != null) {
-            String stdout = new File(appDepType.getStandardOutput()).getName();
-            ApplicationProcessor.setApplicationStdOut(value, appDepType, stdout);
-        }
-
-        if (appDepType.getStandardError() != null) {
-            String stderr = new File(appDepType.getStandardError()).getName();
-            ApplicationProcessor.setApplicationStdErr(value, appDepType, stderr);
-        }
-
-    }
-
-    public static boolean isParallelJob(HpcApplicationDeploymentType appDepType) {
-
-        boolean isParallel = false;
-
-        if (appDepType.getJobType() != null) {
-            // TODO set data output directory
-            int status = appDepType.getJobType().intValue();
-
-            switch (status) {
-            // TODO: this check should be done outside this class
-            case JobTypeType.INT_MPI:
-            case JobTypeType.INT_OPEN_MP:
-                isParallel = true;
-                break;
-
-            case JobTypeType.INT_SERIAL:
-            case JobTypeType.INT_SINGLE:
-                isParallel = false;
-                break;
-
-            default:
-                isParallel = false;
-                break;
-            }
-        }
-        return isParallel;
-    }
-
-    public static void createApplicationEnvironment(JobDefinitionType value, NameValuePairType[] nameValuePairs,
-            HpcApplicationDeploymentType appDepType) {
-
-        if (isParallelJob(appDepType)) {
-            for (NameValuePairType nv : nameValuePairs) {
-                EnvironmentType envType = JSDLUtils.getOrCreateSPMDApplication(value).addNewEnvironment();
-                envType.setName(nv.getName());
-                envType.setStringValue(nv.getValue());
-            }
-        } else {
-            for (NameValuePairType nv : nameValuePairs) {
-                EnvironmentType envType = JSDLUtils.getOrCreatePOSIXApplication(value).addNewEnvironment();
-                envType.setName(nv.getName());
-                envType.setStringValue(nv.getValue());
-            }
-        }
-
-    }
-
-    public static String getSPMDVariation(HpcApplicationDeploymentType appDepType) {
-
-        String variation = null;
-
-        if (appDepType.getJobType() != null) {
-            // TODO set data output directory
-            int status = appDepType.getJobType().intValue();
-
-            switch (status) {
-            // TODO: this check should be done outside this class
-            case JobTypeType.INT_MPI:
-                variation = SPMDVariations.MPI.value();
-                break;
-
-            case JobTypeType.INT_OPEN_MP:
-                variation = SPMDVariations.OpenMPI.value();
-                break;
-
-            }
-        }
-        return variation;
-    }
-
-    public static void addApplicationArgument(JobDefinitionType value, HpcApplicationDeploymentType appDepType,
-            String stringPrm) {
-        if (isParallelJob(appDepType))
-            JSDLUtils.getOrCreateSPMDApplication(value).addNewArgument().setStringValue(stringPrm);
-        else
-            JSDLUtils.getOrCreatePOSIXApplication(value).addNewArgument().setStringValue(stringPrm);
-
-    }
-
-    public static void setApplicationStdErr(JobDefinitionType value, HpcApplicationDeploymentType appDepType,
-            String stderr) {
-        FileNameType fName = FileNameType.Factory.newInstance();
-        fName.setStringValue(stderr);
-        if (isParallelJob(appDepType))
-            JSDLUtils.getOrCreateSPMDApplication(value).setError(fName);
-        else
-            JSDLUtils.getOrCreatePOSIXApplication(value).setError(fName);
-    }
-
-    public static void setApplicationStdOut(JobDefinitionType value, HpcApplicationDeploymentType appDepType,
-            String stderr) {
-        FileNameType fName = FileNameType.Factory.newInstance();
-        fName.setStringValue(stderr);
-        if (isParallelJob(appDepType))
-            JSDLUtils.getOrCreateSPMDApplication(value).setOutput(fName);
-        else
-            JSDLUtils.getOrCreatePOSIXApplication(value).setOutput(fName);
-    }
-
-    public static String getApplicationStdOut(JobDefinitionType value, HpcApplicationDeploymentType appDepType) {
-        if (isParallelJob(appDepType))
-            return JSDLUtils.getOrCreateSPMDApplication(value).getOutput().getStringValue();
-        else
-            return JSDLUtils.getOrCreatePOSIXApplication(value).getOutput().getStringValue();
-    }
-
-    public static String getApplicationStdErr(JobDefinitionType value, HpcApplicationDeploymentType appDepType) {
-        if (isParallelJob(appDepType))
-            return JSDLUtils.getOrCreateSPMDApplication(value).getError().getStringValue();
-        else
-            return JSDLUtils.getOrCreatePOSIXApplication(value).getError().getStringValue();
-    }
-
-    public static void createGenericApplication(JobDefinitionType value, HpcApplicationDeploymentType appDepType) {
-        if (appDepType.getApplicationName() != null) {
-            ApplicationType appType = JSDLUtils.getOrCreateApplication(value);
-            String appName = appDepType.getApplicationName().getStringValue();
-            appType.setApplicationName(appName);
-            JSDLUtils.getOrCreateJobIdentification(value).setJobName(appName);
-        }
-    }
-
-    public static String getValueFromMap(HpcApplicationDeploymentType appDepType, String name) {
-        ExtendedKeyValueType[] extended = appDepType.getKeyValuePairsArray();
-        for (ExtendedKeyValueType e : extended) {
-            if (e.getName().equalsIgnoreCase(name)) {
-                return e.getStringValue();
-            }
-        }
-        return null;
-    }
 
+public class ApplicationProcessor {
+	
+	public static void generateJobSpecificAppElements(JobDefinitionType value, JobExecutionContext context){
+		
+		String userName = getUserNameFromContext(context);
+		if (userName.equalsIgnoreCase("admin")){
+			userName = "CN=zdv575, O=Ultrascan Gateway, C=DE";
+		}
+		
+		HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context
+				.getApplicationContext().getApplicationDeploymentDescription()
+				.getType();
+		
+		createGenericApplication(value, appDepType);
+		
+		if (appDepType.getApplicationEnvironmentArray().length > 0) {
+			createApplicationEnvironment(value,
+					appDepType.getApplicationEnvironmentArray(), appDepType);
+		}
+
+		
+		if (appDepType.getExecutableLocation() != null) {
+			FileNameType fNameType = FileNameType.Factory.newInstance();
+			fNameType.setStringValue(appDepType.getExecutableLocation());
+			if(isParallelJob(appDepType)) {
+				JSDLUtils.getOrCreateSPMDApplication(value).setExecutable(fNameType);
+				JSDLUtils.getSPMDApplication(value).setSPMDVariation(getSPMDVariation(appDepType));
+				
+				if(getValueFromMap(appDepType, JSDLUtils.NUMBEROFPROCESSES)!=null){
+					NumberOfProcessesType num = NumberOfProcessesType.Factory.newInstance();
+					num.setStringValue(getValueFromMap(appDepType, JSDLUtils.NUMBEROFPROCESSES));
+					JSDLUtils.getSPMDApplication(value).setNumberOfProcesses(num);
+				}
+							
+				if(getValueFromMap(appDepType, JSDLUtils.PROCESSESPERHOST)!=null){
+					ProcessesPerHostType pph = ProcessesPerHostType.Factory.newInstance();
+					pph.setStringValue(getValueFromMap(appDepType, JSDLUtils.PROCESSESPERHOST));
+					JSDLUtils.getSPMDApplication(value).setProcessesPerHost(pph);
+				}
+				
+				if(getValueFromMap(appDepType, JSDLUtils.THREADSPERHOST)!=null){
+					ThreadsPerProcessType tpp = ThreadsPerProcessType.Factory.newInstance();
+					tpp.setStringValue(getValueFromMap(appDepType, JSDLUtils.THREADSPERHOST));
+					JSDLUtils.getSPMDApplication(value).setThreadsPerProcess(tpp);
+					
+				}
+				
+				if(userName != null) {
+					UserNameType userNameType = UserNameType.Factory.newInstance();
+					userNameType.setStringValue(userName);
+					JSDLUtils.getSPMDApplication(value).setUserName(userNameType);
+				}
+			}
+			else {
+				JSDLUtils.getOrCreatePOSIXApplication(value).setExecutable(fNameType);
+				if(userName != null) {
+					UserNameType userNameType = UserNameType.Factory.newInstance();
+					userNameType.setStringValue(userName);
+					JSDLUtils.getOrCreatePOSIXApplication(value).setUserName(userNameType);
+				}
+			}
+		}
+		
+
+		String stdout = (appDepType.getStandardOutput() != null) ? new File(appDepType.getStandardOutput()).getName(): "stdout"; 
+		ApplicationProcessor.setApplicationStdOut(value, appDepType, stdout);
+		
+	
+		String stderr = (appDepType.getStandardError() != null) ? new File(appDepType.getStandardError()).getName() : "stderr"; 
+		ApplicationProcessor.setApplicationStdErr(value, appDepType, stderr);
+	
+	}
+	
+	public static String getUserNameFromContext(JobExecutionContext jobContext) {
+		if(jobContext.getContextHeader() == null)
+			return null;
+		return jobContext.getContextHeader().getUserIdentifier();
+	}
+	public static boolean isParallelJob(HpcApplicationDeploymentType appDepType) {
+		
+		boolean isParallel = false;
+		
+		if (appDepType.getJobType() != null) {
+			// TODO set data output directory
+			int status = appDepType.getJobType().intValue();
+
+			switch (status) {
+			// TODO: this check should be done outside this class
+			case JobTypeType.INT_MPI:
+			case JobTypeType.INT_OPEN_MP:
+				isParallel = true;
+				break;
+				
+			case JobTypeType.INT_SERIAL:
+			case JobTypeType.INT_SINGLE:
+				isParallel = false;
+				break;
+
+			default:
+				isParallel = false;
+				break;
+			}
+		}
+		return isParallel;
+	}
+
+	
+	public static void createApplicationEnvironment(JobDefinitionType value, NameValuePairType[] nameValuePairs, HpcApplicationDeploymentType appDepType) {
+		
+		if(isParallelJob(appDepType)) {
+			for (NameValuePairType nv : nameValuePairs) {
+				EnvironmentType envType = JSDLUtils.getOrCreateSPMDApplication(value).addNewEnvironment();
+				envType.setName(nv.getName());
+				envType.setStringValue(nv.getValue());
+			}
+		}
+		else {
+			for (NameValuePairType nv : nameValuePairs) {
+				EnvironmentType envType = JSDLUtils.getOrCreatePOSIXApplication(value).addNewEnvironment();
+				envType.setName(nv.getName());
+				envType.setStringValue(nv.getValue());
+			}
+		}
+
+	}
+	
+	
+	public static String getSPMDVariation (HpcApplicationDeploymentType appDepType) {
+		
+		String variation = null;
+		
+		if (appDepType.getJobType() != null) {
+			// TODO set data output directory
+			int status = appDepType.getJobType().intValue();
+
+			switch (status) {
+			// TODO: this check should be done outside this class
+			case JobTypeType.INT_MPI:
+				variation = SPMDVariations.MPI.value();				
+				break;
+				
+			case JobTypeType.INT_OPEN_MP:
+				variation = SPMDVariations.OpenMPI.value();
+				break;
+				
+			}
+		}
+		return variation;
+	}
+	
+	
+	public static void addApplicationArgument(JobDefinitionType value, HpcApplicationDeploymentType appDepType, String stringPrm) {
+		if(isParallelJob(appDepType)) 		
+			JSDLUtils.getOrCreateSPMDApplication(value)
+			.addNewArgument().setStringValue(stringPrm);
+		else 
+		    JSDLUtils.getOrCreatePOSIXApplication(value)
+				.addNewArgument().setStringValue(stringPrm);
+
+	}
+	
+	public static void setApplicationStdErr(JobDefinitionType value, HpcApplicationDeploymentType appDepType, String stderr) {
+		FileNameType fName = FileNameType.Factory.newInstance();
+		fName.setStringValue(stderr);
+		if (isParallelJob(appDepType)) 
+			JSDLUtils.getOrCreateSPMDApplication(value).setError(fName);
+		else 
+			JSDLUtils.getOrCreatePOSIXApplication(value).setError(fName);
+	}
+	
+	public static void setApplicationStdOut(JobDefinitionType value, HpcApplicationDeploymentType appDepType, String stderr) {
+		FileNameType fName = FileNameType.Factory.newInstance();
+		fName.setStringValue(stderr);
+		if (isParallelJob(appDepType)) 
+			JSDLUtils.getOrCreateSPMDApplication(value).setOutput(fName);
+		else 
+			JSDLUtils.getOrCreatePOSIXApplication(value).setOutput(fName);
+	}
+	
+	public static String getApplicationStdOut(JobDefinitionType value, HpcApplicationDeploymentType appDepType) throws RuntimeException {
+		if (isParallelJob(appDepType)) return JSDLUtils.getOrCreateSPMDApplication(value).getOutput().getStringValue();
+		else return JSDLUtils.getOrCreatePOSIXApplication(value).getOutput().getStringValue();
+	}
+	
+	public static String getApplicationStdErr(JobDefinitionType value, HpcApplicationDeploymentType appDepType) throws RuntimeException {
+		if (isParallelJob(appDepType)) return JSDLUtils.getOrCreateSPMDApplication(value).getError().getStringValue();
+		else return JSDLUtils.getOrCreatePOSIXApplication(value).getError().getStringValue();
+	}
+	
+	public static void createGenericApplication(JobDefinitionType value, HpcApplicationDeploymentType appDepType) {
+		if (appDepType.getApplicationName() != null) {
+			ApplicationType appType = JSDLUtils.getOrCreateApplication(value);
+			String appName = appDepType.getApplicationName()
+					.getStringValue();
+			appType.setApplicationName(appName);
+			JSDLUtils.getOrCreateJobIdentification(value).setJobName(appName);
+		}
+	}
+	
+	
+	public static String getValueFromMap(HpcApplicationDeploymentType appDepType, String name) {
+		ExtendedKeyValueType[] extended = appDepType.getKeyValuePairsArray();
+		for(ExtendedKeyValueType e: extended) {
+			if(e.getName().equalsIgnoreCase(name)) {
+				return e.getStringValue();
+			}
+		}
+		return null;
+	}
+	
 }

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/DataStagingProcessor.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/DataStagingProcessor.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/DataStagingProcessor.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/DataStagingProcessor.java Fri Dec 13 16:19:35 2013
@@ -1,24 +1,3 @@
-/*
- *
- * 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.provider.utils;
 
 import java.io.File;
@@ -34,7 +13,7 @@ import org.apache.airavata.schemas.gfac.
 import org.apache.airavata.schemas.gfac.URIArrayType;
 import org.apache.airavata.schemas.gfac.URIParameterType;
 import org.apache.airavata.schemas.gfac.UnicoreHostType;
-import org.ogf.schemas.jsdl.JobDefinitionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
 
 public class DataStagingProcessor {
 	
@@ -122,6 +101,9 @@ public class DataStagingProcessor {
 	private static void createOutStringElements(JobDefinitionType value,
 			HpcApplicationDeploymentType appDeptype, String endpoint, String prmValue) throws Exception {
 		
+		if(prmValue == null || "".equals(prmValue)) return;
+		
+		
 		String outputUri = GFacUtils.createGsiftpURIAsString(endpoint, appDeptype.getOutputDataDirectory());
 		
 		URI finalOutputUri = GFacUtils.createGsiftpURI(outputUri, prmValue);
@@ -166,6 +148,7 @@ public class DataStagingProcessor {
 				String[] uriArray = ((URIArrayType) outParam.getType())
 						.getValueArray();
 				for (String u : uriArray) {
+					
 					createOutURIElement(value, u);
 				}
 
@@ -217,7 +200,7 @@ public class DataStagingProcessor {
 			else if ("String".equals(paramDataType)) {
 				String stringPrm = ((StringParameterType) inParam.getType())
 						.getValue();
-                ApplicationProcessor.addApplicationArgument(value, appDepType, stringPrm);
+				ApplicationProcessor.addApplicationArgument(value, appDepType, stringPrm);
 			}
 		}
 		

Modified: airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java?rev=1550760&r1=1550759&r2=1550760&view=diff
==============================================================================
--- airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java (original)
+++ airavata/trunk/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java Fri Dec 13 16:19:35 2013
@@ -20,53 +20,84 @@
  */
 package org.apache.airavata.gfac.provider.utils;
 
+
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
-import org.ogf.schemas.jsdl.JobDefinitionDocument;
-import org.ogf.schemas.jsdl.JobDefinitionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * 
  * Utility class generates a JSDL instance from JobExecutionContext instance
+ * @author shahbaz memon
  * 
  * */
 
 public class JSDLGenerator {
-
-    protected final Logger log = LoggerFactory.getLogger(this.getClass());
-
-    public synchronized static JobDefinitionDocument buildJSDLInstance(JobExecutionContext context) throws Exception {
-
-        JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory.newInstance();
-        JobDefinitionType value = jobDefDoc.addNewJobDefinition();
-
-        HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context.getApplicationContext()
-                .getApplicationDeploymentDescription().getType();
-
-        // build Identification
-        createJobIdentification(value, appDepType);
-
-        ResourceProcessor.generateResourceElements(value, context);
-
-        ApplicationProcessor.generateJobSpecificAppElements(value, context);
-
-        DataStagingProcessor.generateDataStagingElements(value, context);
-
-        return jobDefDoc;
-    }
-
-    private static void createJobIdentification(JobDefinitionType value, HpcApplicationDeploymentType appDepType) {
-        if (appDepType.getProjectAccount() != null) {
-
-            if (appDepType.getProjectAccount().getProjectAccountNumber() != null)
-                JSDLUtils.addProjectName(value, appDepType.getProjectAccount().getProjectAccountNumber());
-
-            if (appDepType.getProjectAccount().getProjectAccountDescription() != null)
-                JSDLUtils.getOrCreateJobIdentification(value).setDescription(
-                        appDepType.getProjectAccount().getProjectAccountDescription());
-        }
-    }
-
+	
+	protected final Logger log = LoggerFactory.getLogger(this.getClass());
+	
+	
+	public synchronized static JobDefinitionDocument buildJSDLInstance(JobExecutionContext context) throws Exception {
+
+		JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory
+				.newInstance();
+		JobDefinitionType value = jobDefDoc.addNewJobDefinition();
+
+		HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context
+				.getApplicationContext().getApplicationDeploymentDescription()
+				.getType();
+
+		// build Identification
+		createJobIdentification(value, appDepType);
+		
+		ResourceProcessor.generateResourceElements(value, context);
+		
+		ApplicationProcessor.generateJobSpecificAppElements(value, context);
+		
+		DataStagingProcessor.generateDataStagingElements(value, context);
+		
+		
+		return jobDefDoc;
+	}
+
+
+	public synchronized static JobDefinitionDocument buildJSDLInstance(JobExecutionContext context, String smsUrl) throws Exception {
+
+		JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory
+				.newInstance();
+		JobDefinitionType value = jobDefDoc.addNewJobDefinition();
+
+		HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context
+				.getApplicationContext().getApplicationDeploymentDescription()
+				.getType();
+
+		// build Identification
+		createJobIdentification(value, appDepType);
+		
+		ResourceProcessor.generateResourceElements(value, context);
+		
+		ApplicationProcessor.generateJobSpecificAppElements(value, context);
+		
+		UASDataStagingProcessor.generateDataStagingElements(value, context, smsUrl);
+		
+		return jobDefDoc;
+	}
+
+	private static void createJobIdentification(JobDefinitionType value, HpcApplicationDeploymentType appDepType){
+		if( appDepType.getProjectAccount() != null ){
+			
+			if (appDepType.getProjectAccount().getProjectAccountNumber() != null)
+				JSDLUtils.addProjectName(value, appDepType.getProjectAccount()
+						.getProjectAccountNumber());
+
+			if (appDepType.getProjectAccount().getProjectAccountDescription() != null)
+				JSDLUtils.getOrCreateJobIdentification(value).setDescription(
+						appDepType.getProjectAccount()
+								.getProjectAccountDescription());
+		}
+	}
+	
 }