You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2011/10/20 21:06:25 UTC

svn commit: r1186993 - in /incubator/airavata/trunk/modules/commons/workflow-execution-context: ./ schemas/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apaceh/ src/main/java/org/apaceh/airavata/ src/main/java/org/apaceh/airavata/...

Author: lahiru
Date: Thu Oct 20 19:06:24 2011
New Revision: 1186993

URL: http://svn.apache.org/viewvc?rev=1186993&view=rev
Log:
adding new wrapper for workflow-execution.

Added:
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/WorkflowContextHeaderBuilder.java
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/
    incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/workflow_execution_context.xsd
      - copied, changed from r1186844, incubator/airavata/trunk/modules/commons/workflow-execution-context/schemas/workflow_execution_context.xsd
Removed:
    incubator/airavata/trunk/modules/commons/workflow-execution-context/schemas/workflow_execution_context.xsd
Modified:
    incubator/airavata/trunk/modules/commons/workflow-execution-context/pom.xml

Modified: incubator/airavata/trunk/modules/commons/workflow-execution-context/pom.xml
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/workflow-execution-context/pom.xml?rev=1186993&r1=1186992&r2=1186993&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/commons/workflow-execution-context/pom.xml (original)
+++ incubator/airavata/trunk/modules/commons/workflow-execution-context/pom.xml Thu Oct 20 19:06:24 2011
@@ -26,13 +26,23 @@
 	<name>Airavata Workflow Execution Context</name>
 	<url>http://incubator.apache.org/airavata/</url>
 
-	<dependencies>	
-		<dependency>
-			<groupId>org.apache.xmlbeans</groupId>
-			<artifactId>xmlbeans</artifactId>
-			<version>2.4.0</version>
-		</dependency>
-	</dependencies>
+	<dependencies>
+        <dependency>
+            <groupId>org.apache.xmlbeans</groupId>
+            <artifactId>xmlbeans</artifactId>
+            <version>2.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>xpp3</groupId>
+            <artifactId>xpp3</artifactId>
+            <version>1.1.4c</version>
+        </dependency>
+        <dependency>
+            <groupId>airavata</groupId>
+            <artifactId>airavata-common-utils</artifactId>
+            <version>${airavata.version}</version>
+        </dependency>
+    </dependencies>
 	<build>
 		<pluginManagement>
 			<plugins>

Added: incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/WorkflowContextHeaderBuilder.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/WorkflowContextHeaderBuilder.java?rev=1186993&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/WorkflowContextHeaderBuilder.java (added)
+++ incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/java/org/apaceh/airavata/common/workflow/execution/context/WorkflowContextHeaderBuilder.java Thu Oct 20 19:06:24 2011
@@ -0,0 +1,258 @@
+/*
+ *
+ * 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.apaceh.airavata.common.workflow.execution.context;
+
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.schemas.wec.*;
+import org.xmlpull.v1.builder.XmlElement;
+
+public class WorkflowContextHeaderBuilder {
+
+    private WorkflowMonitoringContextDocument.WorkflowMonitoringContext workflowMonitoringContext = null;
+
+    private SecurityContextDocument.SecurityContext securityContext = null;
+
+    private SoaServiceEprsDocument.SoaServiceEprs soaServiceEprs = null;
+
+    private String userIdentifier = null;
+
+    private WorkflowOutputDataHandlingDocument.WorkflowOutputDataHandling workflowOutputDataHandling = null;
+
+    private ContextHeaderDocument.ContextHeader contextHeader = null;
+
+    private WorkflowSchedulingContextDocument.WorkflowSchedulingContext workflowSchedulingContext = null;
+
+
+    public WorkflowContextHeaderBuilder(String brokerUrl, String gfacUrl, String registryUrl, String experimentId, String workflowId) {
+        this.contextHeader = ContextHeaderDocument.ContextHeader.Factory.newInstance();
+
+        this.soaServiceEprs = SoaServiceEprsDocument.SoaServiceEprs.Factory.newInstance();
+        this.soaServiceEprs.setGfacUrl(gfacUrl);
+        this.soaServiceEprs.setRegistryUrl(registryUrl);
+
+        this.workflowMonitoringContext = WorkflowMonitoringContextDocument.WorkflowMonitoringContext.Factory.newInstance();
+        this.workflowMonitoringContext.setEventPublishEpr(brokerUrl);
+        this.workflowMonitoringContext.setWorkflowInstanceId(workflowId);
+        this.workflowMonitoringContext.setExperimentId(experimentId);
+
+        this.contextHeader.setWorkflowMonitoringContext(this.workflowMonitoringContext);
+        this.contextHeader.setSoaServiceEprs(this.soaServiceEprs);
+
+        this.contextHeader.setSecurityContext(SecurityContextDocument.SecurityContext.Factory.newInstance());
+        this.contextHeader.setWorkflowSchedulingContext(WorkflowSchedulingContextDocument.WorkflowSchedulingContext.Factory.newInstance());
+    }
+
+    public WorkflowContextHeaderBuilder setWorkflowMonitoringContext(WorkflowMonitoringContextDocument.WorkflowMonitoringContext workflowMonitoringContext) {
+        this.workflowMonitoringContext = workflowMonitoringContext;
+        return this;
+    }
+
+
+    public WorkflowContextHeaderBuilder setSecurityContext(SecurityContextDocument.SecurityContext securityContext) {
+        this.securityContext = securityContext;
+        return this;
+    }
+
+
+    public WorkflowContextHeaderBuilder setWorkflowOutputDataHandling(WorkflowOutputDataHandlingDocument.WorkflowOutputDataHandling workflowOutputDataHandling) {
+        this.workflowOutputDataHandling = workflowOutputDataHandling;
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setUserIdentifier(String userIdentifier) {
+        this.userIdentifier = userIdentifier;
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setContextHeader(ContextHeaderDocument.ContextHeader contextHeader) {
+        this.contextHeader = contextHeader;
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setWorkflowSchedulingContext(WorkflowSchedulingContextDocument.WorkflowSchedulingContext workflowSchedulingContext) {
+        this.workflowSchedulingContext = workflowSchedulingContext;
+        return this;
+    }
+
+    public ContextHeaderDocument.ContextHeader getContextHeader() {
+        return contextHeader;
+    }
+
+    public WorkflowSchedulingContextDocument.WorkflowSchedulingContext getWorkflowSchedulingContext() {
+        return workflowSchedulingContext;
+    }
+
+    public SecurityContextDocument.SecurityContext getSecurityContext() {
+        return securityContext;
+    }
+
+    public WorkflowOutputDataHandlingDocument.WorkflowOutputDataHandling getWorkflowOutputDataHandling() {
+        return workflowOutputDataHandling;
+    }
+
+    public SoaServiceEprsDocument.SoaServiceEprs getSoaServiceEprs() {
+        return soaServiceEprs;
+    }
+
+    public String getUserIdentifier() {
+        return userIdentifier;
+    }
+
+
+    public WorkflowMonitoringContextDocument.WorkflowMonitoringContext getWorkflowMonitoringContext() {
+        return workflowMonitoringContext;
+    }
+
+    public XmlElement getXml() {
+        this.contextHeader.setWorkflowMonitoringContext(this.workflowMonitoringContext);
+        this.contextHeader.setSoaServiceEprs(this.soaServiceEprs);
+        this.contextHeader.setSecurityContext(this.securityContext);
+        this.contextHeader.setWorkflowSchedulingContext(this.workflowSchedulingContext);
+        this.contextHeader.setUserIdentifier(this.userIdentifier);
+        this.contextHeader.setWorkflowOutputDataHandling(this.workflowOutputDataHandling);
+        return XMLUtil.stringToXmlElement3(this.contextHeader.toString());
+    }
+
+    public WorkflowContextHeaderBuilder setResourceSchedularUrl(String resourceSchedular) {
+        this.soaServiceEprs.setResourceSchedulerUrl(resourceSchedular);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setWorkflowTemplateId(String template) {
+        this.workflowMonitoringContext.setWorkflowTemplateId(template);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setWorkflowNodeId(String node) {
+        this.workflowMonitoringContext.setWorkflowNodeId(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setWorkflowTimeStep(int timestep) {
+        this.workflowMonitoringContext.setWorkflowTimeStep(timestep);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setServiceInstanceId(String node) {
+        this.workflowMonitoringContext.setServiceInstanceId(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setServiceReplicaId(String node) {
+        this.workflowMonitoringContext.setServiceReplicaId(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setEventPublishEpr(String node) {
+        this.workflowMonitoringContext.setEventPublishEpr(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setErrorPublishEpr(String node) {
+        this.workflowMonitoringContext.setErrorPublishEpr(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setNotificationTopic(String node) {
+        this.workflowMonitoringContext.setNotificationTopic(node);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setGridProxy(byte[] gridProxy) {
+        if (this.securityContext == null) {
+            this.securityContext = SecurityContextDocument.SecurityContext.Factory.newInstance();
+        }
+        this.securityContext.setGridProxy(gridProxy);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setGridMyProxyRepository(String myProxyServer, String userName, String password, int lifeTimeInHours) {
+        if (this.securityContext == null) {
+            this.securityContext = SecurityContextDocument.SecurityContext.Factory.newInstance();
+        }
+        SecurityContextDocument.SecurityContext.GridMyproxyRepository gridMyproxyRepository = this.securityContext.addNewGridMyproxyRepository();
+        gridMyproxyRepository.setMyproxyServer(myProxyServer);
+        gridMyproxyRepository.setUsername(userName);
+        gridMyproxyRepository.setPassword(password);
+        gridMyproxyRepository.setLifeTimeInhours(lifeTimeInHours);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setSSHAuthentication(String accessKeyId, String secretKeyId) {
+        if (this.securityContext == null) {
+            this.securityContext = SecurityContextDocument.SecurityContext.Factory.newInstance();
+        }
+        SecurityContextDocument.SecurityContext.SshAuthentication sshAuthentication = this.securityContext.addNewSshAuthentication();
+        sshAuthentication.setAccessKeyId(accessKeyId);
+        sshAuthentication.setSecretAccessKey(secretKeyId);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setCredentialManagementService(String scmUrl, String securitySessionId) {
+        if (this.securityContext == null) {
+            this.securityContext = SecurityContextDocument.SecurityContext.Factory.newInstance();
+        }
+        SecurityContextDocument.SecurityContext.CredentialManagementService credentialManagementService = this.securityContext.addNewCredentialManagementService();
+        credentialManagementService.setScmsUrl(scmUrl);
+        credentialManagementService.setExecutionSessionId(securitySessionId);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder setAmazonWebServices(String accessKeyId, String secretAccesKey) {
+        if (this.securityContext == null) {
+            this.securityContext = SecurityContextDocument.SecurityContext.Factory.newInstance();
+        }
+        SecurityContextDocument.SecurityContext.AmazonWebservices amazonWebservices = this.securityContext.addNewAmazonWebservices();
+        amazonWebservices.setSecretAccessKey(accessKeyId);
+        amazonWebservices.setSecretAccessKey(secretAccesKey);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder addApplicationOutputDataHandling(String outputDir, String outputDataRegistry, boolean dataPersistence) {
+        if (this.workflowOutputDataHandling == null) {
+            this.workflowOutputDataHandling = WorkflowOutputDataHandlingDocument.WorkflowOutputDataHandling.Factory.newInstance();
+        }
+        ApplicationOutputDataHandlingDocument.ApplicationOutputDataHandling applicationOutputDataHandling = this.workflowOutputDataHandling.addNewApplicationOutputDataHandling();
+        applicationOutputDataHandling.setOutputDataDirectory(outputDir);
+        applicationOutputDataHandling.setDataRegistryUrl(outputDataRegistry);
+        applicationOutputDataHandling.setDataPersistance(dataPersistence);
+        return this;
+    }
+
+    public WorkflowContextHeaderBuilder addApplicationSchedulingContext
+            (String workflowNodeId, String serviceId, String hostName, boolean wsGramPreffered, String gateKeepersEpr, String jobManager, int cpuCount, int nodeCount, String qName, int maxWalTime) {
+        if (this.workflowSchedulingContext == null) {
+            this.workflowSchedulingContext = WorkflowSchedulingContextDocument.WorkflowSchedulingContext.Factory.newInstance();
+        }
+        ApplicationSchedulingContextDocument.ApplicationSchedulingContext applicationSchedulingContext = this.workflowSchedulingContext.addNewApplicationSchedulingContext();
+        applicationSchedulingContext.setWorkflowNodeId(workflowNodeId);
+        applicationSchedulingContext.setCpuCount(cpuCount);
+        applicationSchedulingContext.setGatekeeperEpr(gateKeepersEpr);
+        applicationSchedulingContext.setHostName(hostName);
+        applicationSchedulingContext.setJobManager(jobManager);
+        applicationSchedulingContext.setMaxWallTime(maxWalTime);
+        applicationSchedulingContext.setServiceId(serviceId);
+        applicationSchedulingContext.setNodeCount(nodeCount);
+        applicationSchedulingContext.setQueueName(qName);
+        applicationSchedulingContext.setWsgramPreferred(wsGramPreffered);
+        return this;
+    }
+}

Copied: incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/workflow_execution_context.xsd (from r1186844, incubator/airavata/trunk/modules/commons/workflow-execution-context/schemas/workflow_execution_context.xsd)
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/workflow_execution_context.xsd?p2=incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/workflow_execution_context.xsd&p1=incubator/airavata/trunk/modules/commons/workflow-execution-context/schemas/workflow_execution_context.xsd&r1=1186844&r2=1186993&rev=1186993&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/commons/workflow-execution-context/schemas/workflow_execution_context.xsd (original)
+++ incubator/airavata/trunk/modules/commons/workflow-execution-context/src/main/resources/workflow_execution_context.xsd Thu Oct 20 19:06:24 2011
@@ -1,516 +1,505 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <schema targetNamespace="http://schemas.airavata.apache.org/workflow-execution-context"
-	xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wec="http://schemas.airavata.apache.org/workflow-execution-context"
-	attributeFormDefault="qualified" elementFormDefault="qualified">
+        xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:wec="http://schemas.airavata.apache.org/workflow-execution-context">
 
-	<element name='context-header'>
-		<annotation>
-			<documentation xml:lang='en'>
-				Element that contains Airavata
-				specific context information sent as a SOAP
-				header in a SOAP message.
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element minOccurs='0' maxOccurs='1' ref='wec:user-identifier' />
-				<element minOccurs='1' maxOccurs='1' ref='wec:soa-service-eprs' />
-				<element minOccurs='1' maxOccurs='1'
-					ref='wec:workflow-monitoring-context' />
-				<element minOccurs='0' maxOccurs='1'
-					ref='wec:workflow-scheduling-context' />
-				<element minOccurs='0' maxOccurs='1'
-					ref='wec:workflow-output-data-handling' />
-				<element minOccurs='0' maxOccurs='1' ref='wec:security-context' />
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="user-identifier" type="string">
-		<annotation>
-			<documentation xml:lang="en"> User that the workflow is
-				executed on behalf of,
-				user id is used to catalog data and for
-				monitoring purposes
-			</documentation>
-		</annotation>
-	</element>
-
-	<element name="soa-service-eprs">
-		<annotation>
-			<documentation xml:lang="en">
-				Element that contains
-				persistant service end points within the system.
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element name="gfac-url" type="anyURI" minOccurs='1'
-					maxOccurs='1'>
-					<annotation>
-						<documentation xml:lang="en"> Location of GFac factory
-							service to use. (optional)
-						</documentation>
-					</annotation>
-				</element>
-				<element name="registry-url" type="anyURI" minOccurs='1'
-					maxOccurs='1'>
-					<annotation>
-						<documentation xml:lang="en"> Location of Registry
-							service
-							to use. (optional)
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="resource-scheduler-url" type="string"
-					minOccurs='0' maxOccurs='1'>
-					<annotation>
-						<documentation xml:lang="en"> Resource Scheduler to use
-						</documentation>
-					</annotation>
-				</element>
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="workflow-monitoring-context">
-		<annotation>
-			<documentation xml:lang="en">Workflow context for execution
-				of a instance used to
-				relate the specific activity in the context of
-				workflow and used for
-				monitoring
-				and illustarting the workflow
-				progress.
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element name="experiment-id" type="string" minOccurs="1"
-					maxOccurs="1">
-					<annotation>
-						<documentation xml:lang="en"> Experiment ID (REQUIRED in
-							context), Defines
-							the context of the workflow.
-						</documentation>
-					</annotation>
-				</element>
-				<element name="workflow-instance-id" type="anyURI"
-					minOccurs="1" maxOccurs="1">
-					<annotation>
-						<documentation xml:lang="en"> URI that identifies
-							workflow instance that
-							originated the message. (optional)
-						</documentation>
-					</annotation>
-				</element>
-				<element name="workflow-template-id" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en"> URI that identifies
-							workflow template that was
-							used to create the workflow instance.
-							(optional)
-						</documentation>
-					</annotation>
-				</element>
-				<element name="workflow-node-id" type="string">
-					<annotation>
-						<documentation xml:lang="en"> String that identifies
-							uniqueley a node in
-							workflow graph that originated that message.
-							(optional)
-						</documentation>
-					</annotation>
-				</element>
-				<element name="workflow-time-step" type="int">
-					<annotation>
-						<documentation xml:lang="en"> Increasing integer
-							representing time in the
-							workflow execution when the message
-							originated. (optional)
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="service-instance-id" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en"> URI that identifies service
-							instance that
-							originated that message. (optional)
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="service-replica-id" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en"> URI that identifies the
-							replica of service
-							instance that originated that message, primarly
-							used by Fault Tolerance
-							service to overprovision. (optional)
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="event-publish-epr" type="anyURI" minOccurs="1"
-					maxOccurs="1">
-					<annotation>
-						<documentation xml:lang="en"> EPR for WS-Eventing sink
-							where to send event. (optional)
-							NOTE: currently any XML is
-							accepted as there are many versions of
-							WS-Addressing.
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="notification-topic" type="string" minOccurs="0"
-					maxOccurs="1">
-					<annotation>
-						<documentation xml:lang="en"> A Unique String to set as
-							the topic for
-							events sent on an experiment. The topic may be
-							embedded with the
-							event-publish-epr. An experiment id being unique
-							may be chosen as
-							topic.
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="error-publish-epr" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en"> EPR for WS-Eventing sink
-							where to send errors (optional)
-							NOTE: designed good for debugging
-							and system level warnings, errors,
-							etc
-						</documentation>
-					</annotation>
-				</element>
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="workflow-scheduling-context">
-		<annotation>
-			<documentation xml:lang="en">
-				Element that contains service
-				specific resource scheduling information sent
-				inside workflow
-				context. The purpose of this context is to schedule
-				individual
-				activities on a different resource.
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element minOccurs="1" maxOccurs="unbounded"
-					ref="wec:application-scheduling-context" />
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="application-scheduling-context">
-		<complexType>
-			<simpleContent>
-				<extension base="string">
-					<annotation>
-						<documentation xml:lang="en">
-							Element text contains host
-							name for the resource.
-						</documentation>
-					</annotation>
-
-					<attribute name="workflow-node-id" type="string">
-						<annotation>
-							<documentation xml:lang="en">
-								This is workflow node ID
-								that is mapped to a resource.
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="service-id" type="anyURI" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								This is service ID.
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="host-name" type="anyURI" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								head node of the resource
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="wsgram-preferred" type="boolean" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								If true then wsgram will be
-								used, false pre-wsgram will be used.
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="gatekeeper-epr" type="anyURI" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								GRAM EPR of the resource
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="job-manager" type="string">
-						<annotation>
-							<documentation xml:lang="en">
-								LRM job manager on the
-								resource, ex: PBS, LSF.
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="cpu-count" type="int" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								number of CPU's allocated
-								on the compute cluster
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="node-count" type="int" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								number of nodes allocated
-								on the compute cluster
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="queue-name" type="string">
-						<annotation>
-							<documentation xml:lang="en">
-								Job queue name if any.
-							</documentation>
-						</annotation>
-					</attribute>
-
-					<attribute name="max-wall-time" type="int" use="optional">
-						<annotation>
-							<documentation xml:lang="en">
-								number of CPU's allocated
-								on the compute cluster
-							</documentation>
-						</annotation>
-					</attribute>
-				</extension>
-			</simpleContent>
-		</complexType>
-	</element>
-
-	<element name="workflow-output-data-handling">
-		<annotation>
-			<documentation xml:lang="en">
-				Element that contains
-				application specific resource scheduling information sent
-				inside
-				workflow context. The purpose of this context is to handle
-				individual
-				activities with different needs like intermediate data
-				need not be persisted.
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element minOccurs="1" maxOccurs="unbounded"
-					ref="wec:application-output-data-handling" />
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="application-output-data-handling">
-		<complexType>
-			<sequence>
-				<element name="data-registry-url" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en"> (Optional) If a seperate
-							Data
-							Registry is used for catlogging data, the associated location
-							of the
-							Data registry
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="output-data-directory" type="anyURI">
-					<annotation>
-						<documentation xml:lang="en">(Optional) If the workflow
-							outputs are to be staged to a pre-specified location, then the
-							output data staging directory should be provided.
-						</documentation>
-					</annotation>
-				</element>
-
-				<element name="data-persistance" type="boolean">
-					<annotation>
-						<documentation xml:lang="en">(Optional) If the
-							intermediate workflow
-							outputs are to be discarded after execution,
-							this flag should be set to
-							false. By defualt this flag should be
-							true assuming all data will
-							be persisted.
-						</documentation>
-					</annotation>
-				</element>
-
-			</sequence>
-		</complexType>
-	</element>
-
-	<element name="security-context">
-		<annotation>
-			<documentation xml:lang="en"> Security context for execution
-				of the workflow
-			</documentation>
-		</annotation>
-		<complexType>
-			<sequence>
-				<element name="grid-proxy" type="base64Binary">
-					<annotation>
-						<documentation xml:lang="en"> Security context for Grid
-							Security
-							Infrastructure X509 Proxy with trusted chain.
-						</documentation>
-					</annotation>
-				</element>
-				<element name="grid-myproxy-repository">
-					<annotation>
-						<documentation xml:lang="en"> Security context for Grid
-							Security MyProxy
-							Service
-						</documentation>
-					</annotation>
-					<complexType>
-						<sequence>
-							<element name="myproxy-server" type="string">
-								<annotation>
-									<documentation xml:lang="en"> MyProxy Server.
-									</documentation>
-								</annotation>
-							</element>
-							<element name="username" type="string">
-								<annotation>
-									<documentation xml:lang="en"> MyProxy User Name.
-									</documentation>
-								</annotation>
-							</element>
-							<element name="password" type="string">
-								<annotation>
-									<documentation xml:lang="en"> MyProxy Password.
-									</documentation>
-								</annotation>
-							</element>
-							<element name="life-time-inhours" type="int">
-								<annotation>
-									<documentation xml:lang="en"> MyProxy Proxy Life time.
-									</documentation>
-								</annotation>
-							</element>
-						</sequence>
-					</complexType>
-				</element>
-				<element name="ssh-authentication">
-					<annotation>
-						<documentation xml:lang="en"> Security context for
-							execution of the workflow
-							on SSH accessed resources.
-						</documentation>
-					</annotation>
-					<complexType>
-						<sequence>
-							<element name="access-key-id" type="string">
-								<annotation>
-									<documentation xml:lang="en"> Amazon Web Services
-										Public Access
-										Key ID used to contact the AWS API's.
-									</documentation>
-								</annotation>
-							</element>
-							<element name="secret-access-key" type="string">
-								<annotation>
-									<documentation xml:lang="en"> Amazon Web Services AWS
-										Private
-										Secret Access Key.
-									</documentation>
-								</annotation>
-							</element>
-						</sequence>
-					</complexType>
-				</element>
-				<element name="credential-management-service">
-					<annotation>
-						<documentation xml:lang="en"> Security context for
-							execution of the workflow
-						</documentation>
-					</annotation>
-					<complexType>
-						<sequence>
-							<element name="scms-url" type="anyURI">
-								<annotation>
-									<documentation xml:lang="en"> Location of the SCMS
-										(Session
-										Credential Management Service).
-									</documentation>
-								</annotation>
-							</element>
-							<element name="execution-session-id" type="string">
-								<annotation>
-									<documentation xml:lang="en"> The ID of the session
-										credential
-										to be used for executing grid operations as needed
-										by the
-										workflow.
-									</documentation>
-								</annotation>
-							</element>
-						</sequence>
-					</complexType>
-				</element>
-				<element name="amazon-webservices">
-					<annotation>
-						<documentation xml:lang="en"> Security context for
-							execution of the workflow
-						</documentation>
-					</annotation>
-					<complexType>
-						<sequence>
-							<element name="access-key-id" type="string">
-								<annotation>
-									<documentation xml:lang="en"> Amazon Web Services
-										Public Access
-										Key ID used to contact the AWS API's.
-									</documentation>
-								</annotation>
-							</element>
-							<element name="secret-access-key" type="string">
-								<annotation>
-									<documentation xml:lang="en"> Amazon Web Services AWS
-										Private
-										Secret Access Key.
-									</documentation>
-								</annotation>
-							</element>
-						</sequence>
-					</complexType>
-				</element>
-			</sequence>
-		</complexType>
-	</element>
+    <element name='context-header'>
+        <annotation>
+            <documentation xml:lang='en'>
+                Element that contains Airavata
+                specific context information sent as a SOAP
+                header in a SOAP message.
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element minOccurs='0' maxOccurs='1' ref='wec:user-identifier'/>
+                <element minOccurs='1' maxOccurs='1' ref='wec:soa-service-eprs'/>
+                <element minOccurs='1' maxOccurs='1' ref='wec:workflow-monitoring-context'/>
+                <element minOccurs='0' maxOccurs='1' ref='wec:workflow-scheduling-context'/>
+                <element minOccurs='0' maxOccurs='1' ref='wec:workflow-output-data-handling'/>
+                <element minOccurs='0' maxOccurs='1' ref='wec:security-context'/>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="user-identifier" type="string">
+        <annotation>
+            <documentation xml:lang="en">User that the workflow is
+                executed on behalf of,
+                user id is used to catalog data and for
+                monitoring purposes
+            </documentation>
+        </annotation>
+    </element>
+
+    <element name="soa-service-eprs">
+        <annotation>
+            <documentation xml:lang="en">
+                Element that contains
+                persistant service end points within the system.
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element name="gfac-url" type="anyURI" minOccurs='1'
+                         maxOccurs='1'>
+                    <annotation>
+                        <documentation xml:lang="en">Location of GFac factory
+                            service to use. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="registry-url" type="anyURI" minOccurs='1'
+                         maxOccurs='1'>
+                    <annotation>
+                        <documentation xml:lang="en">Location of Registry
+                            service
+                            to use. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="resource-scheduler-url" type="string"
+                         minOccurs='0' maxOccurs='1'>
+                    <annotation>
+                        <documentation xml:lang="en">Resource Scheduler to use
+                        </documentation>
+                    </annotation>
+                </element>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="workflow-monitoring-context">
+        <annotation>
+            <documentation xml:lang="en">Workflow context for execution
+                of a instance used to
+                relate the specific activity in the context of
+                workflow and used for
+                monitoring
+                and illustarting the workflow
+                progress.
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element name="experiment-id" type="string" minOccurs="1"
+                         maxOccurs="1">
+                    <annotation>
+                        <documentation xml:lang="en">Experiment ID (REQUIRED in
+                            context), Defines
+                            the context of the workflow.
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="workflow-instance-id" type="anyURI"
+                         minOccurs="1" maxOccurs="1">
+                    <annotation>
+                        <documentation xml:lang="en">URI that identifies
+                            workflow instance that
+                            originated the message. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="workflow-template-id" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">URI that identifies
+                            workflow template that was
+                            used to create the workflow instance.
+                            (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="workflow-node-id" type="string">
+                    <annotation>
+                        <documentation xml:lang="en">String that identifies
+                            uniqueley a node in
+                            workflow graph that originated that message.
+                            (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="workflow-time-step" type="int">
+                    <annotation>
+                        <documentation xml:lang="en">Increasing integer
+                            representing time in the
+                            workflow execution when the message
+                            originated. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="service-instance-id" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">URI that identifies service
+                            instance that
+                            originated that message. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="service-replica-id" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">URI that identifies the
+                            replica of service
+                            instance that originated that message, primarly
+                            used by Fault Tolerance
+                            service to overprovision. (optional)
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="event-publish-epr" type="anyURI" minOccurs="1"
+                         maxOccurs="1">
+                    <annotation>
+                        <documentation xml:lang="en">EPR for WS-Eventing sink
+                            where to send event. (optional)
+                            NOTE: currently any XML is
+                            accepted as there are many versions of
+                            WS-Addressing.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="notification-topic" type="string" minOccurs="0"
+                         maxOccurs="1">
+                    <annotation>
+                        <documentation xml:lang="en">A Unique String to set as
+                            the topic for
+                            events sent on an experiment. The topic may be
+                            embedded with the
+                            event-publish-epr. An experiment id being unique
+                            may be chosen as
+                            topic.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="error-publish-epr" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">EPR for WS-Eventing sink
+                            where to send errors (optional)
+                            NOTE: designed good for debugging
+                            and system level warnings, errors,
+                            etc
+                        </documentation>
+                    </annotation>
+                </element>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="workflow-scheduling-context">
+        <annotation>
+            <documentation xml:lang="en">
+                Element that contains service
+                specific resource scheduling information sent
+                inside workflow
+                context. The purpose of this context is to schedule
+                individual
+                activities on a different resource.
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element minOccurs="1" maxOccurs="unbounded"
+                         ref="wec:application-scheduling-context"/>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="application-scheduling-context">
+        <complexType>
+            <sequence>
+
+                <element name="workflow-node-id" type="string" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            This is workflow node ID
+                            that is mapped to a resource.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="service-id" type="anyURI" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            This is service ID.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="host-name" type="anyURI" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            head node of the resource
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="wsgram-preferred" type="boolean" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            If true then wsgram will be
+                            used, false pre-wsgram will be used.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="gatekeeper-epr" type="anyURI" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            GRAM EPR of the resource
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="job-manager" type="string" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            LRM job manager on the
+                            resource, ex: PBS, LSF.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="cpu-count" type="int" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            number of CPU's allocated
+                            on the compute cluster
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="node-count" type="int" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            number of nodes allocated
+                            on the compute cluster
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="queue-name" type="string" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            Job queue name if any.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="max-wall-time" type="int" minOccurs="0">
+                    <annotation>
+                        <documentation xml:lang="en">
+                            number of CPU's allocated
+                            on the compute cluster
+                        </documentation>
+                    </annotation>
+                </element>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="workflow-output-data-handling">
+        <annotation>
+            <documentation xml:lang="en">
+                Element that contains
+                application specific resource scheduling information sent
+                inside
+                workflow context. The purpose of this context is to handle
+                individual
+                activities with different needs like intermediate data
+                need not be persisted.
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element minOccurs="1" maxOccurs="unbounded"
+                         ref="wec:application-output-data-handling"/>
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="application-output-data-handling">
+        <complexType>
+            <sequence>
+                <element name="data-registry-url" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">(Optional) If a seperate
+                            Data
+                            Registry is used for catlogging data, the associated location
+                            of the
+                            Data registry
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="output-data-directory" type="anyURI">
+                    <annotation>
+                        <documentation xml:lang="en">(Optional) If the workflow
+                            outputs are to be staged to a pre-specified location, then the
+                            output data staging directory should be provided.
+                        </documentation>
+                    </annotation>
+                </element>
+
+                <element name="data-persistance" type="boolean">
+                    <annotation>
+                        <documentation xml:lang="en">(Optional) If the
+                            intermediate workflow
+                            outputs are to be discarded after execution,
+                            this flag should be set to
+                            false. By defualt this flag should be
+                            true assuming all data will
+                            be persisted.
+                        </documentation>
+                    </annotation>
+                </element>
+
+            </sequence>
+        </complexType>
+    </element>
+
+    <element name="security-context">
+        <annotation>
+            <documentation xml:lang="en">Security context for execution
+                of the workflow
+            </documentation>
+        </annotation>
+        <complexType>
+            <sequence>
+                <element name="grid-proxy" type="base64Binary">
+                    <annotation>
+                        <documentation xml:lang="en">Security context for Grid
+                            Security
+                            Infrastructure X509 Proxy with trusted chain.
+                        </documentation>
+                    </annotation>
+                </element>
+                <element name="grid-myproxy-repository">
+                    <annotation>
+                        <documentation xml:lang="en">Security context for Grid
+                            Security MyProxy
+                            Service
+                        </documentation>
+                    </annotation>
+                    <complexType>
+                        <sequence>
+                            <element name="myproxy-server" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">MyProxy Server.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="username" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">MyProxy User Name.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="password" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">MyProxy Password.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="life-time-inhours" type="int">
+                                <annotation>
+                                    <documentation xml:lang="en">MyProxy Proxy Life time.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                        </sequence>
+                    </complexType>
+                </element>
+                <element name="ssh-authentication">
+                    <annotation>
+                        <documentation xml:lang="en">Security context for
+                            execution of the workflow
+                            on SSH accessed resources.
+                        </documentation>
+                    </annotation>
+                    <complexType>
+                        <sequence>
+                            <element name="access-key-id" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">Amazon Web Services
+                                        Public Access
+                                        Key ID used to contact the AWS API's.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="secret-access-key" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">Amazon Web Services AWS
+                                        Private
+                                        Secret Access Key.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                        </sequence>
+                    </complexType>
+                </element>
+                <element name="credential-management-service">
+                    <annotation>
+                        <documentation xml:lang="en">Security context for
+                            execution of the workflow
+                        </documentation>
+                    </annotation>
+                    <complexType>
+                        <sequence>
+                            <element name="scms-url" type="anyURI">
+                                <annotation>
+                                    <documentation xml:lang="en">Location of the SCMS
+                                        (Session
+                                        Credential Management Service).
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="execution-session-id" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">The ID of the session
+                                        credential
+                                        to be used for executing grid operations as needed
+                                        by the
+                                        workflow.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                        </sequence>
+                    </complexType>
+                </element>
+                <element name="amazon-webservices">
+                    <annotation>
+                        <documentation xml:lang="en">Security context for
+                            execution of the workflow
+                        </documentation>
+                    </annotation>
+                    <complexType>
+                        <sequence>
+                            <element name="access-key-id" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">Amazon Web Services
+                                        Public Access
+                                        Key ID used to contact the AWS API's.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                            <element name="secret-access-key" type="string">
+                                <annotation>
+                                    <documentation xml:lang="en">Amazon Web Services AWS
+                                        Private
+                                        Secret Access Key.
+                                    </documentation>
+                                </annotation>
+                            </element>
+                        </sequence>
+                    </complexType>
+                </element>
+            </sequence>
+        </complexType>
+    </element>
 
 </schema>