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/>
+          &lt;Credential 
xmlns="http://schemas.ogf.org/hpcp/2007/01/ac"&gt;<br/>
+         &lt;UsernameToken 
xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";>&gt;<br/>
+          &lt;Username>sc07demo &lt;/Username&gt;<br/>
+          &lt;Password>hpcpsc07 &lt;/Password&gt;<br/>
+           &lt;/UsernameToken&gt;<br/>
+       &lt;/Credential&gt;<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


Reply via email to