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());
+ }
+ }
+
}