You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2012/11/30 13:32:13 UTC
svn commit: r1415596 - in /airavata/sandbox/grid-tools/bes-client: ./ src/
src/main/ src/main/assembly/ src/main/java/ src/main/java/org/
src/main/java/org/apache/ src/main/java/org/apache/airavata/
src/main/java/org/apache/airavata/sample/ src/main/ja...
Author: smarru
Date: Fri Nov 30 12:32:11 2012
New Revision: 1415596
URL: http://svn.apache.org/viewvc?rev=1415596&view=rev
Log:
accepting contributin from shahbaz for AIRAVATA-657
Added:
airavata/sandbox/grid-tools/bes-client/pom.xml
airavata/sandbox/grid-tools/bes-client/src/
airavata/sandbox/grid-tools/bes-client/src/main/
airavata/sandbox/grid-tools/bes-client/src/main/assembly/
airavata/sandbox/grid-tools/bes-client/src/main/assembly/dep.xml
airavata/sandbox/grid-tools/bes-client/src/main/java/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/BESJob.java
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/CreateActivityTask.java
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/HPCPUtils.java
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/RunBESJob.java
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/UsernamePassword.java
airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/XmlBeansUtils.java
airavata/sandbox/grid-tools/bes-client/src/main/resources/
airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/
airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/
airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/de.fzj.unicore.ucc.ProvidedCommands
airavata/sandbox/grid-tools/bes-client/src/test/
airavata/sandbox/grid-tools/bes-client/src/test/java/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/
airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/TestInterop.java
airavata/sandbox/grid-tools/bes-client/src/test/resources/
airavata/sandbox/grid-tools/bes-client/src/test/resources/date-hpcbp.xml
airavata/sandbox/grid-tools/bes-client/src/test/resources/date.xml
Added: airavata/sandbox/grid-tools/bes-client/pom.xml
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/pom.xml?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/pom.xml (added)
+++ airavata/sandbox/grid-tools/bes-client/pom.xml Fri Nov 30 12:32:11 2012
@@ -0,0 +1,70 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.airavata.sample.bes</groupId>
+ <artifactId>bes-simple-client</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0.0-SNAPSHOT</version>
+ <name>BES Interop Implementation</name>
+ <url>http://unicore.sourceforge.net/</url>
+ <repositories>
+ <repository>
+ <id>unicore.eu</id>
+ <name>UNICORE repository</name>
+ <url>http://unicore-dev.zam.kfa-juelich.de/maven</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>eu.unicore</groupId>
+ <artifactId>ogsabes-client</artifactId>
+ <version>1.5.1-rc3</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/dep.xml</descriptor>
+ </descriptors>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ </build>
+
+
+
+</project>
Added: airavata/sandbox/grid-tools/bes-client/src/main/assembly/dep.xml
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/assembly/dep.xml?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/assembly/dep.xml (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/assembly/dep.xml Fri Nov 30 12:32:11 2012
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<assembly>
+ <id>all</id>
+ <formats>
+ <format>zip</format>
+ <format>tar.gz</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <includes>
+ <include>*.xml</include>
+ <include>*.conf</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>src</directory>
+ <outputDirectory>/src</outputDirectory>
+ </fileSet>
+ <fileSet>
+ <directory>target/endorsed</directory>
+ <outputDirectory>/lib/endorsed</outputDirectory>
+ </fileSet>
+ </fileSets>
+ <dependencySets>
+ <dependencySet>
+ <useStrictFiltering>true</useStrictFiltering>
+ <outputDirectory>lib</outputDirectory>
+ <unpack>false</unpack>
+ <scope>runtime</scope>
+ <excludes>
+ <!-- exclude things not needed by pure clients
+ <exclude>org.mortbay.jetty:jetty</exclude>
+ -->
+ </excludes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/BESJob.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/BESJob.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/BESJob.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/BESJob.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,34 @@
+package org.apache.airavata.sample.bes;
+
+
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
+
+public class BESJob {
+
+ private String factoryUrl;
+
+ private JobDefinitionDocument jobDoc;
+
+
+ public BESJob() {
+
+ }
+
+
+ public String getFactoryUrl() {
+ return factoryUrl;
+ }
+
+ public void setFactory(String factoryUrl) {
+ this.factoryUrl = factoryUrl;
+ }
+
+ public JobDefinitionDocument getJobDoc() {
+ return jobDoc;
+ }
+
+ public void setJobDoc(JobDefinitionDocument jobDoc) {
+ this.jobDoc = jobDoc;
+ }
+
+}
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/CreateActivityTask.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/CreateActivityTask.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/CreateActivityTask.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/CreateActivityTask.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,80 @@
+package org.apache.airavata.sample.bes;
+
+import java.util.Calendar;
+
+import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration;
+import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityDocument;
+import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityResponseDocument;
+import org.w3.x2005.x08.addressing.EndpointReferenceType;
+
+import de.fzj.unicore.bes.client.FactoryClient;
+import de.fzj.unicore.wsrflite.xmlbeans.WSUtilities;
+import eu.unicore.security.util.client.IClientProperties;
+
+public class CreateActivityTask {
+
+ private BESJob job;
+
+ private IClientProperties sec;
+ private String jobId;
+
+
+ public CreateActivityTask(BESJob job, IClientProperties sec) {
+ this.job = job;
+ this.sec = sec;
+
+ }
+
+ public void startJob() throws Exception {
+ String factoryUrl = job.getFactoryUrl();
+ EndpointReferenceType eprt = EndpointReferenceType.Factory
+ .newInstance();
+ eprt.addNewAddress().setStringValue(factoryUrl);
+ System.out.println("========================================");
+ System.out.println(String.format("Job Submitted to %s.\n", factoryUrl));
+ FactoryClient factory = new FactoryClient(eprt, sec);
+ CreateActivityDocument cad = CreateActivityDocument.Factory
+ .newInstance();
+ cad.addNewCreateActivity().addNewActivityDocument()
+ .setJobDefinition(job.getJobDoc().getJobDefinition());
+ CreateActivityResponseDocument response = factory.createActivity(cad);
+ EndpointReferenceType activityEpr = response
+ .getCreateActivityResponse().getActivityIdentifier();
+// factory.waitWhileActivityIsDone(activityEpr, 1000);
+ jobId = WSUtilities.extractResourceID(activityEpr);
+ if (jobId == null) {
+ jobId = new Long(Calendar.getInstance().getTimeInMillis())
+ .toString();
+ }
+ ActivityStateEnumeration.Enum state = factory.getActivityStatus(activityEpr);
+
+ String status;
+
+ status = String.format("Job %s is %s.\n", activityEpr.getAddress()
+ .getStringValue(), factory.getActivityStatus(activityEpr)
+ .toString()).toString();
+
+
+ while ((factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED) &&
+ (factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FAILED)){
+ status = String.format("Job %s is %s.\n", activityEpr.getAddress()
+ .getStringValue(), factory.getActivityStatus(activityEpr)
+ .toString()).toString();
+ Thread.sleep(1500);
+ continue;
+ }
+
+ status = String.format("Job %s is %s.\n", activityEpr.getAddress()
+ .getStringValue(), factory.getActivityStatus(activityEpr)
+ .toString()).toString();
+
+ System.out.println(status);
+
+ if (!(factory.getActivityStatus(activityEpr) == ActivityStateEnumeration.FINISHED)) {
+ throw new Exception("Job "+activityEpr.getAddress().getStringValue()+" "+state.toString());
+ }
+ }
+
+
+
+}
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/HPCPUtils.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/HPCPUtils.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/HPCPUtils.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/HPCPUtils.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,116 @@
+package org.apache.airavata.sample.bes;
+
+
+import javax.xml.namespace.QName;
+
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlCursor.TokenType;
+import org.apache.xmlbeans.XmlObject;
+import eu.unicore.security.util.Log;
+
+/**
+ * Helper for dealing with the HPC file staging profile (see GFD.135)
+ * (activity credentials)
+ *
+ * @author schuller
+ */
+public class HPCPUtils {
+
+ private HPCPUtils(){}
+
+ public final static QName AC_QNAME=new QName("http://schemas.ogf.org/hpcp/2007/11/ac","Credential");
+ public final static QName AC_USERNAME=new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Username");
+ public final static QName AC_PASSWD=new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Password");
+ public final static QName AC_QNAME_2=new QName("http://schemas.ogf.org/hpcp/2007/01/fs","Credential");
+ /**
+ * Extracts username and password from the security credentials as defined in the HPC file staging profile (GFD.135)
+ * <br/><br/>
+ <Credential xmlns="http://schemas.ogf.org/hpcp/2007/01/ac"><br/>
+ <UsernameToken xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">><br/>
+ <Username>sc07demo </Username><br/>
+ <Password>hpcpsc07 </Password><br/>
+ </UsernameToken><br/>
+ </Credential><br/>
+ * <br/>
+ * The first HPCP Activity Credential found in the given source document is used
+ *
+ * @param source - an XML document
+ * @return {@link UsernamePassword} containing the username and password found in the XML
+ */
+ public static UsernamePassword extractUsernamePassword(XmlObject source){
+ String user=null;
+ String passwd=null;
+ try{
+ XmlObject copy=source.copy();
+ XmlObject credential=XmlBeansUtils.extractFirstAnyElement(copy, AC_QNAME);
+ if(credential==null){
+ //try namespace defined by GFD.135 (but not used in the example)
+ credential=XmlBeansUtils.extractFirstAnyElement(copy, AC_QNAME_2);
+ }
+ if(credential!=null){
+ user=getUserName(credential);
+ passwd=getPassword(credential);
+ }
+ }catch(Exception ex){
+ Log.logException("Problem extracting data staging credentials.", ex);
+ }
+ return new UsernamePassword(user, passwd);
+ }
+
+ /**
+ * extract the username token
+ * @param credentials
+ * @return username or null if not found
+ */
+ private static String getUserName(XmlObject credentials){
+ XmlCursor c=credentials.newCursor();
+ try{
+ int t;
+ while(true){
+ t=c.toNextToken().intValue();
+ if(t==TokenType.INT_ENDDOC)return null;
+ if(t==TokenType.INT_START){
+ if(AC_USERNAME.equals(c.getName())){
+ while(c.toNextToken().intValue()!=TokenType.INT_TEXT);
+ String res=c.getChars().trim();
+ c.dispose();
+ return res;
+ }
+ }
+ }
+ }catch(Exception e){ }
+ finally{
+ if(c!=null)c.dispose();
+ }
+ return null;
+ }
+
+ /**
+ * extract the password token
+ * @param credentials
+ * @return password or null if not found
+ */
+ private static String getPassword(XmlObject credentials){
+ XmlCursor c=credentials.newCursor();
+ try{
+ int t;
+ while(true){
+ t=c.toNextToken().intValue();
+ if(t==TokenType.INT_ENDDOC)return null;
+ if(t==TokenType.INT_START){
+ if(AC_PASSWD.equals(c.getName())){
+ while(c.toNextToken().intValue()!=TokenType.INT_TEXT);
+ String res=c.getChars().trim();
+ c.dispose();
+ return res;
+ }
+ }
+ }
+ }catch(Exception e){ }
+ finally{
+ if(c!=null)c.dispose();
+ }
+ return null;
+ }
+
+}
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/RunBESJob.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/RunBESJob.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/RunBESJob.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/RunBESJob.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,64 @@
+package org.apache.airavata.sample.bes;
+
+import java.io.File;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
+import de.fzj.unicore.uas.security.ClientProperties;
+import eu.unicore.security.util.client.IClientProperties;
+
+public class RunBESJob {
+
+ protected IClientProperties securityProperties;
+
+ static final String factoryUrl = "https://zam1161v01.zam.kfa-juelich.de:8002/INTEROP1/services/BESFactory?res=default_bes_factory";
+
+ static final String jsdlPath = "src/test/resources/date.xml";
+
+ public RunBESJob() {
+ securityProperties = initSecurityProperties();
+ }
+
+ public void runJob() {
+
+ JobDefinitionDocument jobDoc = null;
+ try {
+ jobDoc = JobDefinitionDocument.Factory.parse(new File(jsdlPath));
+ } catch (Exception e) {
+ System.err.println("Error parsing JSDL instance. " + e);
+ }
+
+ BESJob job = new BESJob();
+ job.setFactory(factoryUrl);
+ job.setJobDoc(jobDoc);
+
+ CreateActivityTask th = new CreateActivityTask(job, securityProperties);
+ try {
+ th.startJob();
+ } catch (Exception e) {
+
+ System.err.println("Couldn't run job: " + e);
+ }
+
+ }
+
+ protected ClientProperties initSecurityProperties() {
+
+ ClientProperties sp = new ClientProperties();
+
+ sp.setSslEnabled(true);
+ sp.setSignMessage(true);
+
+ sp.setKeystore("src/test/resources/demo-keystore.jks");
+ sp.setKeystorePassword("654321");
+ sp.setKeystoreAlias("demouser-new");
+ sp.setKeystoreType("JKS");
+
+// sp.setTruststore("src/test/resources/demo-keystore.jks");
+// sp.setTruststorePassword("654321");
+// sp.setKeystoreType("JKS");
+
+ return sp;
+
+ }
+
+
+}
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/UsernamePassword.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/UsernamePassword.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/UsernamePassword.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/UsernamePassword.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,36 @@
+package org.apache.airavata.sample.bes;
+import java.io.Serializable;
+
+
+
+/**
+ * holds username and password for some types of data staging,
+ * as found in the job description
+ *
+ * @author schuller
+ */
+public class UsernamePassword implements Serializable {
+
+ private static final long serialVersionUID=1L;
+
+ private final String user;
+
+ private final String password;
+
+ public UsernamePassword(String user, String password){
+ this.user=user;
+ this.password=password;
+ }
+
+ public String getUser() {
+ return user;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String toString(){
+ return "UsernamePassword["+user+" "+password+"]";
+ }
+}
Added: airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/XmlBeansUtils.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/XmlBeansUtils.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/XmlBeansUtils.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/java/org/apache/airavata/sample/bes/XmlBeansUtils.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,289 @@
+package org.apache.airavata.sample.bes;
+
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlCursor.TokenType;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class XmlBeansUtils {
+
+ /**
+ * appends a XmlObject into another, immediately before the end tag<br>
+ * @param what
+ * @param toWhere
+ */
+ public static void append(XmlObject what, XmlObject toWhere){
+ XmlCursor sourceCurs=what.newCursor();
+ sourceCurs.toNextToken();
+ XmlCursor targetCurs = toWhere.newCursor();
+ targetCurs.toEndDoc();
+ targetCurs.toPrevToken();
+ sourceCurs.copyXml(targetCurs);
+ sourceCurs.dispose();
+ targetCurs.dispose();
+ }
+
+ /**
+ * returns the QName for the "root element" of the Argument
+ * @param o
+ * @return
+ */
+ public static QName getQNameFor(XmlObject o){
+ XmlCursor c=o.newCursor();
+ try{
+ c.toFirstChild();
+ return c.getName();
+ }finally{
+ c.dispose();
+ }
+ }
+ /**
+ * extract xsd:any elements using DOM
+ *
+ * @param source - the xml fragment
+ * @param q - QName of elements to extract. If null, all children will be returned
+ * @return XmlObject[]
+ * @throws XmlException
+ */
+ public static XmlObject[] extractAnyElements(XmlObject source, QName q)throws XmlException{
+ NodeList nodes=source.getDomNode().getChildNodes();
+ List<XmlObject>results=new ArrayList<XmlObject>();
+ for(int i=0;i<nodes.getLength();i++){
+ Node n=nodes.item(i);
+ if(q!=null){
+ if(q.getNamespaceURI().equals(n.getNamespaceURI())
+ && q.getLocalPart().equals(n.getLocalName())){
+ XmlObject o=XmlObject.Factory.parse(n);
+ results.add(o);
+ }
+ }else{
+ XmlObject o=XmlObject.Factory.parse(n);
+ results.add(o);
+ }
+ }
+ return results.toArray(new XmlObject[results.size()]);
+ }
+
+ public static XmlObject extractFirstAnyElement(XmlObject source, QName q)throws XmlException,IOException{
+ XmlCursor c=source.newCursor();
+ if(skipToElement(c, q)){
+ XmlObject res=XmlObject.Factory.parse(c.newInputStream());
+ c.dispose();
+ return res;
+ }else{
+ return null;
+ }
+ }
+
+ public static XmlObject extractFirstAnyElement(XmlObject source, QName[] q)throws XmlException,IOException{
+ XmlCursor c=source.newCursor();
+ if(skipToElement(c, q)){
+ XmlObject res=XmlObject.Factory.parse(c.newInputStream());
+ c.dispose();
+ return res;
+ }else{
+ return null;
+ }
+ }
+
+ public static Map<String,String>extractAttributes(XmlObject source){
+ Map<String,String>result=new HashMap<String,String>();
+ XmlCursor curs=source.newCursor();
+ while(curs.hasNextToken()){
+ TokenType type=curs.toNextToken();
+ if(TokenType.END.equals(type))break;
+ if(TokenType.ATTR.equals(type)){
+ QName q=curs.getName();
+ String val=curs.getTextValue();
+ result.put(q.getLocalPart(),val);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * extract the text content of an XML element
+ *
+ * @param source the xml element
+ *
+ * @return the text content, or "" if element has no content
+ */
+ public static String extractElementTextAsString(XmlObject source){
+ XmlCursor c=null;
+ try{
+ c=source.newCursor();
+ while(c.hasNextToken()){
+ if(c.toNextToken().equals(TokenType.TEXT)){
+ return c.getChars();
+ }
+ }
+ return "";
+ }finally{
+ try{
+ c.dispose();
+ }catch(Exception e){}
+ }
+ }
+
+ /**
+ * fast-forward the cursor up to the element with the given QName
+ *
+ * @param cursor
+ * @param name
+ * @return false if element does not exist
+ */
+ public static boolean skipToElement(XmlCursor cursor, QName name){
+ // walk through element tree in prefix order (root first, then children from left to right)
+ if(name.equals(cursor.getName())) return true;
+ boolean hasMoreChildren=true;
+ int i=0;
+ while(hasMoreChildren){
+ hasMoreChildren = cursor.toChild(i++);
+ if(hasMoreChildren){
+ boolean foundInChild = skipToElement(cursor, name);
+ if(foundInChild) return true;
+ cursor.toParent();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * fast-forward the cursor up to the element with one of the given QNames
+ *
+ * @param cursor
+ * @param names - list of acceptable qnames
+ * @return false if element does not exist
+ */
+ public static boolean skipToElement(XmlCursor cursor, QName[] names){
+ // walk through element tree in prefix order (root first, then children from left to right)
+ for(QName name: names){
+ if(name.equals(cursor.getName())) return true;
+ }
+ boolean hasMoreChildren=true;
+ int i=0;
+ while(hasMoreChildren){
+ hasMoreChildren = cursor.toChild(i++);
+ if(hasMoreChildren){
+ boolean foundInChild = skipToElement(cursor, names);
+ if(foundInChild) return true;
+ cursor.toParent();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * extract the text of a certain element from an xml document
+ * @param source
+ * @param names
+ * @return text or null if undefined
+ */
+ public static String getElementText(XmlObject source, QName[] names){
+ try{
+ XmlObject o=extractFirstAnyElement(source, names);
+ return extractElementTextAsString(o);
+ }
+ catch(Exception ex){
+ return null;
+ }
+ }
+
+
+ /**
+ * extract the text of the specified element
+ * @param source - the source XML document
+ * @param name - the qname of the desired element
+ * @return
+ */
+ public static String getElementText(XmlObject source, QName name){
+ try{
+ XmlObject o=extractFirstAnyElement(source, name);
+ if(o==null)return null;
+ return extractElementTextAsString(o);
+ }
+ catch(Exception ex){
+ return null;
+ }
+ }
+
+ public static String getAttributeText(XmlObject source, QName elementName, QName attributeName){
+ try{
+ XmlObject o=extractFirstAnyElement(source, elementName);
+ if(o==null)return null;
+ return getAttributeText(o, attributeName);
+ }
+ catch(Exception ex){
+ }
+ return null;
+ }
+
+ public static String getAttributeText(XmlObject source, QName attributeName){
+ XmlCursor c=source.newCursor();
+ try{
+ TokenType t=null;
+ do{
+ t=c.toNextToken();
+ if(t.isAttr()){
+ if(attributeName.equals(c.getName())){
+ return c.getTextValue();
+ }
+ }
+ }while(!TokenType.END.equals(t));
+ return null;
+ }finally{
+ c.dispose();
+ }
+ }
+
+ /**
+ * extract an array of XML elements identified by their qname from an XML source
+ * document.
+ *
+ * @param source - the xml fragment
+ * @param q - QName of elements to extract
+ * @param asClass - the XMLbeans class of the elements to extract
+ * @return List<T> - a list of XMLBeans objects with the correct runtime type
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> List<T>extractAnyElements(XmlObject source, QName q, Class<? extends XmlObject>asClass){
+ List<T>results=new ArrayList<T>();
+ XmlCursor cursor=null;
+ try{
+ if(source != null){
+ cursor = source.newCursor();
+ skipToElement(cursor, q);
+ String ns=q.getNamespaceURI();
+ boolean hasMore =true;
+ while(hasMore){
+ XmlObject next = XmlObject.Factory.parse(cursor.newXMLStreamReader());
+ QName name = cursor.getName();
+ if( (name!=null && (ns.equals(name.getNamespaceURI()) || "*".equals(ns)))
+ && q.getLocalPart().equals(name.getLocalPart())){
+ results.add((T)next);
+ }
+ hasMore = cursor.toNextSibling();
+ }
+ }
+ }
+ catch(XmlException xe){
+ //what?
+ }
+ finally{
+ if(cursor!=null)cursor.dispose();
+ }
+ return results;
+ }
+}
+
Added: airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/de.fzj.unicore.ucc.ProvidedCommands
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/de.fzj.unicore.ucc.ProvidedCommands?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/de.fzj.unicore.ucc.ProvidedCommands (added)
+++ airavata/sandbox/grid-tools/bes-client/src/main/resources/META-INF/services/de.fzj.unicore.ucc.ProvidedCommands Fri Nov 30 12:32:11 2012
@@ -0,0 +1,4 @@
+#
+# commands provided by the UCC workflow module
+#
+eu.unicore.interop.bes.BESInteropCommands
\ No newline at end of file
Added: airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/TestInterop.java
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/TestInterop.java?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/TestInterop.java (added)
+++ airavata/sandbox/grid-tools/bes-client/src/test/java/org/apache/airavata/sample/bes/TestInterop.java Fri Nov 30 12:32:11 2012
@@ -0,0 +1,17 @@
+package org.apache.airavata.sample.bes;
+
+import org.apache.airavata.sample.bes.RunBESJob;
+import org.junit.Test;
+
+
+
+public class TestInterop {
+
+ @Test
+ public void testRunJob(){
+ RunBESJob besJob = new RunBESJob();
+ besJob.runJob();
+ }
+
+
+}
Added: airavata/sandbox/grid-tools/bes-client/src/test/resources/date-hpcbp.xml
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/test/resources/date-hpcbp.xml?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/test/resources/date-hpcbp.xml (added)
+++ airavata/sandbox/grid-tools/bes-client/src/test/resources/date-hpcbp.xml Fri Nov 30 12:32:11 2012
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jsdl:JobDefinition xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl"
+ xmlns:jsdl-hpcpa="http://schemas.ggf.org/jsdl/2006/07/jsdl-hpcpa"
+ xmlns:cred="http://schemas.ogf.org/hpcp/2007/11/ac"
+ xmlns:token="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
+ <jsdl:JobDescription>
+ <jsdl:JobIdentification>
+ <jsdl:JobName>Date-Job</jsdl:JobName>
+ <jsdl:JobProject>SG-ExampleJob</jsdl:JobProject>
+ </jsdl:JobIdentification>
+ <jsdl:Resources>
+ <jsdl:TotalCPUCount>
+ <jsdl:Exact>1</jsdl:Exact>
+ </jsdl:TotalCPUCount>
+ <jsdl:IndividualCPUTime>
+ <jsdl:Exact>3600</jsdl:Exact>
+ </jsdl:IndividualCPUTime>
+ </jsdl:Resources>
+ <jsdl:Application>
+ <jsdl-hpcpa:HPCProfileApplication>
+ <jsdl-hpcpa:Executable>/bin/date</jsdl-hpcpa:Executable>
+ <jsdl-hpcpa:Output>stdout.txt</jsdl-hpcpa:Output>
+ </jsdl-hpcpa:HPCProfileApplication>
+ </jsdl:Application>
+ </jsdl:JobDescription>
+</jsdl:JobDefinition>
+
Added: airavata/sandbox/grid-tools/bes-client/src/test/resources/date.xml
URL: http://svn.apache.org/viewvc/airavata/sandbox/grid-tools/bes-client/src/test/resources/date.xml?rev=1415596&view=auto
==============================================================================
--- airavata/sandbox/grid-tools/bes-client/src/test/resources/date.xml (added)
+++ airavata/sandbox/grid-tools/bes-client/src/test/resources/date.xml Fri Nov 30 12:32:11 2012
@@ -0,0 +1,9 @@
+<jsdl:JobDefinition xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:app="http://schemas.ggf.org/jsdl/2006/07/jsdl-hpcpa" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" xmlns:bes="http://schemas.ggf.org/bes/2006/08/bes-factory" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://schemas.ggf.org/jsdl/2005/11/jsdl-posix">
+ <jsdl:JobDescription>
+ <jsdl:Application>
+ <POSIXApplication>
+ <Executable>/bin/date</Executable>
+ </POSIXApplication>
+ </jsdl:Application>
+ </jsdl:JobDescription>
+</jsdl:JobDefinition>
\ No newline at end of file