You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ra...@apache.org on 2014/01/21 21:58:48 UTC

svn commit: r1560181 - in /airavata/trunk: modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/ samples/ samples/gateway-developer-guide/ samples/gateway-developer-guide/src/ samples/gateway-developer-guide/src/ma...

Author: raminder
Date: Tue Jan 21 20:58:48 2014
New Revision: 1560181

URL: http://svn.apache.org/r1560181
Log:
applying AIRAVATA-985 patch

Added:
    airavata/trunk/samples/gateway-developer-guide/
    airavata/trunk/samples/gateway-developer-guide/README.txt
    airavata/trunk/samples/gateway-developer-guide/pom.xml
    airavata/trunk/samples/gateway-developer-guide/src/
    airavata/trunk/samples/gateway-developer-guide/src/main/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/MonitorListener.java
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/PasswordCallbackImpl.java
    airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/SimpleGateway.java
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/EchoWorkflow.xwf
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/SimpleEcho.xwf
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/airavata-client.properties
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/gateway.properties
    airavata/trunk/samples/gateway-developer-guide/src/main/resources/log4j.properties
Modified:
    airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/AbstractOrchestratorTest.java
    airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/SimpleOrchestratorTest.java
    airavata/trunk/samples/pom.xml

Modified: airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/AbstractOrchestratorTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/AbstractOrchestratorTest.java?rev=1560181&r1=1560180&r2=1560181&view=diff
==============================================================================
--- airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/AbstractOrchestratorTest.java (original)
+++ airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/AbstractOrchestratorTest.java Tue Jan 21 20:58:48 2014
@@ -23,7 +23,6 @@ package org.apache.airavata.orchestrator
 import junit.framework.TestCase;
 
 import org.apache.airavata.orchestrator.core.util.Initialize;
-import org.apache.airavata.persistance.registry.jpa.Resource;
 import org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.resources.*;

Modified: airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/SimpleOrchestratorTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/SimpleOrchestratorTest.java?rev=1560181&r1=1560180&r2=1560181&view=diff
==============================================================================
--- airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/SimpleOrchestratorTest.java (original)
+++ airavata/trunk/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/SimpleOrchestratorTest.java Tue Jan 21 20:58:48 2014
@@ -20,25 +20,30 @@
 */
 package org.apache.airavata.orchestrator.core;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.UUID;
+
 import junit.framework.Assert;
+
 import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
 import org.apache.airavata.commons.gfac.type.ApplicationDescription;
 import org.apache.airavata.commons.gfac.type.HostDescription;
 import org.apache.airavata.commons.gfac.type.ServiceDescription;
 import org.apache.airavata.registry.api.JobRequest;
-import org.apache.airavata.schemas.gfac.*;
-import org.apache.tools.ant.taskdefs.Echo;
+import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+import org.apache.airavata.schemas.gfac.DataType;
+import org.apache.airavata.schemas.gfac.InputParameterType;
+import org.apache.airavata.schemas.gfac.OutputParameterType;
+import org.apache.airavata.schemas.gfac.ParameterType;
+import org.apache.airavata.schemas.gfac.StringParameterType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
-
 public class SimpleOrchestratorTest extends AbstractOrchestratorTest {
     private static final Logger log = LoggerFactory.getLogger(SimpleOrchestratorTest.class);
 

Added: airavata/trunk/samples/gateway-developer-guide/README.txt
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/README.txt?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/README.txt (added)
+++ airavata/trunk/samples/gateway-developer-guide/README.txt Tue Jan 21 20:58:48 2014
@@ -0,0 +1,7 @@
+Gateway Developer guide
+=================================
+
+This module contains code used in the Gateway Developer guide in the Apache Airavata Wiki [1]
+
+
+1. https://cwiki.apache.org/confluence/display/AIRAVATA/Simple+Gateway+Developer+Guide
\ No newline at end of file

Added: airavata/trunk/samples/gateway-developer-guide/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/pom.xml?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/pom.xml (added)
+++ airavata/trunk/samples/gateway-developer-guide/pom.xml Tue Jan 21 20:58:48 2014
@@ -0,0 +1,86 @@
+<!--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. -->
+
+<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">
+
+    <parent>
+        <groupId>org.apache.airavata</groupId>
+        <artifactId>airavata</artifactId>
+        <version>0.12-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>gateway-developer-guide</artifactId>
+    <packaging>jar</packaging>
+    <name>Gateway Developer Guide</name>
+    <url>https://cwiki.apache.org/confluence/display/AIRAVATA/Simple+Gateway+Developer+Guide</url>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-rest-client</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-jpa-registry</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-client-api</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-registry-api</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.1.1</version>
+        </dependency>
+
+    </dependencies>
+
+    <properties>
+        <derby.version>10.9.1.0</derby.version>
+    </properties>
+
+</project>

Added: airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/MonitorListener.java
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/MonitorListener.java?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/MonitorListener.java (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/MonitorListener.java Tue Jan 21 20:58:48 2014
@@ -0,0 +1,84 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.samples;
+
+import org.apache.airavata.ws.monitor.EventData;
+import org.apache.airavata.ws.monitor.EventDataListener;
+import org.apache.airavata.ws.monitor.EventDataRepository;
+import org.apache.airavata.ws.monitor.Monitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MonitorListener implements EventDataListener {
+
+    private static final Logger log = LoggerFactory.getLogger(MonitorListener.class);
+
+    @Override
+    public void notify(EventDataRepository eventDataRepo, EventData eventData) {
+        log.info("ExperimentID: " + eventData.getExperimentID());
+        log.info("Message: " + eventData.getMessage());
+        log.info("Status: " + eventData.getStatusText());
+    }
+
+    @Override
+    public void setExperimentMonitor(Monitor monitor) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void monitoringPreStart() {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void monitoringPostStart() {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void monitoringPreStop() {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void monitoringPostStop() {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void onFail(EventData failNotification) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void onCompletion(EventData completionNotification) {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Added: airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/PasswordCallbackImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/PasswordCallbackImpl.java?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/PasswordCallbackImpl.java (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/PasswordCallbackImpl.java Tue Jan 21 20:58:48 2014
@@ -0,0 +1,39 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.samples;
+
+import org.apache.airavata.registry.api.PasswordCallback;
+
+/**
+ * Callback for tests
+ */
+public class PasswordCallbackImpl implements PasswordCallback {
+    @Override
+    public String getPassword(String username) {
+
+        if (username.equals("admin")) {
+            return "admin";
+        }
+
+        return null;
+    }
+}

Added: airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/SimpleGateway.java
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/SimpleGateway.java?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/SimpleGateway.java (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/java/org/apache/airavata/samples/SimpleGateway.java Tue Jan 21 20:58:48 2014
@@ -0,0 +1,328 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.airavata.samples;
+
+import org.apache.airavata.client.AiravataAPIFactory;
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.ApplicationManager;
+import org.apache.airavata.client.api.builder.DescriptorBuilder;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.registry.api.PasswordCallback;
+import org.apache.airavata.registry.api.exception.worker.ExperimentLazyLoadedException;
+import org.apache.airavata.registry.api.impl.WorkflowExecutionDataImpl;
+import org.apache.airavata.registry.api.workflow.ExperimentData;
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeType;
+import org.apache.airavata.schemas.gfac.DataType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
+import org.apache.airavata.schemas.gfac.InputParameterType;
+import org.apache.airavata.schemas.gfac.OutputParameterType;
+import org.apache.airavata.workflow.model.component.ComponentException;
+import org.apache.airavata.workflow.model.graph.GraphException;
+import org.apache.airavata.workflow.model.wf.InvalidDataFormatException;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.workflow.model.wf.WorkflowInput;
+import org.apache.airavata.ws.monitor.Monitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import junit.framework.Assert;
+
+public class SimpleGateway {
+    private final Logger log = LoggerFactory.getLogger(SimpleGateway.class);
+
+    private int port;
+    private String serverUrl;
+    private String serverContextName;
+
+    private String registryURL;
+
+    private String gatewayName;
+    private String userName;
+    private String password;
+
+    private static final int TIME_OUT = 20000;
+
+    private static final int TRIES = 3;
+
+    private AiravataAPI airavataAPI;
+
+    private ApplicationManager applicationManager;
+
+
+    @BeforeTest
+    public void setupTests() throws URISyntaxException, AiravataAPIInvocationException {
+
+        //get the registry URLs and the credentials from the gateway.properties file
+        setGatewayProperties();
+
+        //get the Airavata API
+        PasswordCallback passwordCallback = new PasswordCallbackImpl();
+        this.airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+                passwordCallback);
+        this.applicationManager = airavataAPI.getApplicationManager();
+
+        log("Setting Up Tests: Complete ...");
+
+    }
+
+    @Test
+    public void runGatewayTest() throws Exception {
+        String experimentId = submitJob();
+        monitorJob(experimentId);
+        getResults(experimentId);
+    }
+
+    private String submitJob() throws Exception, IOException, ComponentException, GraphException, InvalidDataFormatException {
+        //setup the descriptors to run the workflow
+        setupDescriptors();
+
+        // ---------------load and add the workflow to the server ----------------
+        Workflow workflow = new Workflow(getWorkflowContent("src/main/resources/SimpleEcho.xwf"));
+
+        //check if a workflow with the same name exists already, if not add it to the server
+        if (!airavataAPI.getWorkflowManager().isWorkflowExists(workflow.getName())) {
+            airavataAPI.getWorkflowManager().addWorkflow(workflow);
+        }
+
+        // add the inputs
+
+        //List<WorkflowInput> workflowInputs = setupInputs(workflow, Arrays.asList("Hello Developer!"));
+        List<WorkflowInput> workflowInputs = airavataAPI.getWorkflowManager().getWorkflowInputs(workflow.getName());
+        workflowInputs.get(0).setValue("Hello Scientist ---!!");
+        log("Workfllow Setting up complete ...");
+
+        String experimentId = airavataAPI.getExecutionManager().runExperiment(workflow.getName(), workflowInputs);
+        Assert.assertNotNull(experimentId);
+
+        log("Job submitted ....");
+        return experimentId;
+    }
+
+    // provides the current details of the job
+    private void monitorJob(String experimentId) throws AiravataAPIInvocationException {
+        MonitorListener monitorListener = new MonitorListener();
+        Monitor monitor = airavataAPI.getExecutionManager().getExperimentMonitor(experimentId, monitorListener);
+        log("Started monitoring the job " + experimentId);
+        monitor.startMonitoring();
+        airavataAPI.getExecutionManager().waitForExperimentTermination(experimentId);
+
+    }
+
+    private void getResults(String experimentId) throws AiravataAPIInvocationException, ExperimentLazyLoadedException, URISyntaxException {
+
+        log("Fetching the results ...");
+        //get the experiment data through the provenance manager
+        ExperimentData experimentData = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
+        List<WorkflowExecutionDataImpl> workflowInstanceData = experimentData.getWorkflowExecutionDataList();
+        Assert.assertFalse("Workflow instance data cannot be empty !", workflowInstanceData.isEmpty());
+
+        for (WorkflowExecutionDataImpl data : workflowInstanceData) {
+            List<NodeExecutionData> nodeDataList = data.getNodeDataList(WorkflowNodeType.WorkflowNode.OUTPUTNODE);
+            for (NodeExecutionData nodeData : nodeDataList) {
+                log("Output: " + nodeData.getOutput());
+            }
+        }
+    }
+
+
+    protected List<WorkflowInput> setupInputs(Workflow workflow, List<String> inputValues) throws Exception {
+        AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+                new PasswordCallbackImpl());
+        List<WorkflowInput> workflowInputs = airavataAPI.getWorkflowManager().getWorkflowInputs(workflow.getName());
+
+        Assert.assertEquals(workflowInputs.size(), inputValues.size());
+
+        int i = 0;
+        for (String valueString : inputValues) {
+            workflowInputs.get(i).setValue(valueString);
+            ++i;
+        }
+        return workflowInputs;
+    }
+
+    private String getWorkflowContent(String filename) throws IOException {
+        File file = getFile(filename);
+
+        BufferedReader reader = new BufferedReader(new FileReader(file));
+        String line;
+        StringBuilder buffer = new StringBuilder();
+        while ((line = reader.readLine()) != null) {
+            buffer.append(line);
+        }
+        reader.close();
+        log.debug("Workflow compose - " + buffer.toString());
+        return buffer.toString();
+    }
+
+    private void setupDescriptors() throws AiravataAPIInvocationException {
+        // get the descriptor builder to build the necessary descriptors
+        DescriptorBuilder descriptorBuilder = airavataAPI.getDescriptorBuilder();
+
+        // ------------------Adding the host description ----------------------------------------
+        HostDescription hostDescription = descriptorBuilder.buildHostDescription(HostDescriptionType.type, "localhost",
+                "127.0.0.1");
+        applicationManager.addHostDescription(hostDescription);
+
+        //test that the host description was added properly
+        Assert.assertTrue(airavataAPI.getApplicationManager().isHostDescriptorExists(
+                hostDescription.getType().getHostName()));
+        log("Added Application Description ...");
+
+
+        // ------------------Adding the service description ----------------------------------------
+        //Input parameter description
+        List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
+        inputParameters.add(descriptorBuilder.buildInputParameterType("echo_input", "echo_input", DataType.STRING));
+
+        //Output parameter description
+        List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
+        outputParameters.add(descriptorBuilder.buildOutputParameterType("echo_out", "echo_out", DataType.STRING));
+
+        //add the service descriptor
+        ServiceDescription serviceDescription = descriptorBuilder.buildServiceDescription("echo_app", "echo_app",
+                inputParameters, outputParameters);
+        applicationManager.addServiceDescription(serviceDescription);
+
+        //test that the service description was added properly
+        Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(
+                serviceDescription.getType().getName()));
+
+        log("Added Service Description ...");
+
+        //------------------Adding the Application Description ---------------------------------------
+        ApplicationDescription applicationDescription = descriptorBuilder.
+                buildApplicationDeploymentDescription("echo_app", "/bin/echo", "/tmp");
+        applicationManager.addApplicationDescription(serviceDescription, hostDescription, applicationDescription);
+        log("Added Application Deployment Description ...");
+
+    }
+
+    private File getFile(String fileName) {
+        File f = new File(".");
+        log.debug(f.getAbsolutePath());
+
+        File file = new File(fileName);
+        if (!file.exists()) {
+            file = new File("samples/gateway-developer-guide/" + fileName);
+        }
+        return file;
+    }
+
+    private void log(String message) {
+        log.info(message);
+    }
+
+    public String getGatewayName() {
+        return gatewayName;
+    }
+
+    public AiravataAPI getAiravataAPI() {
+        return airavataAPI;
+    }
+
+    public Logger getLog() {
+
+        return log;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getServerUrl() {
+        return serverUrl;
+    }
+
+    public String getServerContextName() {
+        return serverContextName;
+    }
+
+    public String getRegistryURL() {
+        return registryURL;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public void setServerUrl(String serverUrl) {
+        this.serverUrl = serverUrl;
+    }
+
+    public void setRegistryURL(String registryURL) {
+        this.registryURL = registryURL;
+    }
+
+    public void setServerContextName(String serverContextName) {
+        this.serverContextName = serverContextName;
+    }
+
+    public void setGatewayName(String gatewayName) {
+        this.gatewayName = gatewayName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    //get the registry URL and the credentials from the property file
+    private void setGatewayProperties() {
+        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("gateway.properties");
+
+        Properties properties = new Properties();
+        try {
+            properties.load(inputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        String username = properties.getProperty("airavata.server.user");
+        String password = properties.getProperty("airavata.server.password");
+        String gatewayName = properties.getProperty("gateway.name");
+        String registryURL = properties.getProperty("airavata.server.url");
+        setRegistryURL(registryURL);
+        setUserName(username);
+        setPassword(password);
+        setGatewayName(gatewayName);
+        log("loaded the properties ...");
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

Added: airavata/trunk/samples/gateway-developer-guide/src/main/resources/EchoWorkflow.xwf
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/resources/EchoWorkflow.xwf?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/resources/EchoWorkflow.xwf (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/resources/EchoWorkflow.xwf Tue Jan 21 20:58:48 2014
@@ -0,0 +1,149 @@
+<?xml version="1.0"?>
+<!--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. -->
+
+<xwf:workflow xwf:version="0.5" xmlns:xwf="http://airavata.apache.org/xbaya/xwf">
+  <xgr:graph xgr:version="0.5" xgr:type="ws" xmlns:xgr="http://airavata.apache.org/xbaya/graph">
+    <xgr:id>Echo</xgr:id>
+    <xgr:name>Echo</xgr:name>
+    <xgr:description></xgr:description>
+    <xgr:metadata>
+      <appinfo xmlns="http://www.w3.org/2001/XMLSchema">
+
+</appinfo>
+    </xgr:metadata>
+    <xgr:node xgr:type="ws">
+      <xgr:id>Echo_invoke</xgr:id>
+      <xgr:name>Echo:invoke</xgr:name>
+      <xgr:outputPort>Echo_invoke_out_0</xgr:outputPort>
+      <xgr:inputPort>Echo_invoke_in_0</xgr:inputPort>
+      <xgr:controlInPort>Echo_invoke_ctrl_in_0</xgr:controlInPort>
+      <xgr:controlOutPort>Echo_invoke_ctrl_out_0</xgr:controlOutPort>
+      <xgr:x>278</xgr:x>
+      <xgr:y>123</xgr:y>
+      <xgr:wsdl>Echo</xgr:wsdl>
+      <xgr:portType>{http://airavata.apache.org/schemas/gfac/2012/12}Echo</xgr:portType>
+      <xgr:operation>invoke</xgr:operation>
+    </xgr:node>
+    <xgr:node xgr:type="input">
+      <xgr:id>echo_input</xgr:id>
+      <xgr:name>echo_input</xgr:name>
+      <xgr:outputPort>Input_out_2</xgr:outputPort>
+      <xgr:x>151</xgr:x>
+      <xgr:y>103</xgr:y>
+      <xgr:config>
+        <xgr:description></xgr:description>
+        <xgr:dataType>{http://airavata.apache.org/schemas/gfac/2012/12}StringParameterType</xgr:dataType>
+        <xgr:visibility>true</xgr:visibility>
+      </xgr:config>
+    </xgr:node>
+    <xgr:node xgr:type="output">
+      <xgr:id>echo_output</xgr:id>
+      <xgr:name>echo_output</xgr:name>
+      <xgr:inputPort>Output_in_2</xgr:inputPort>
+      <xgr:x>510</xgr:x>
+      <xgr:y>125</xgr:y>
+      <xgr:config>
+        <xgr:description></xgr:description>
+        <xgr:dataType>{http://airavata.apache.org/schemas/gfac/2012/12}StringParameterType</xgr:dataType>
+      </xgr:config>
+    </xgr:node>
+    <xgr:port xgr:type="ws">
+      <xgr:id>Echo_invoke_in_0</xgr:id>
+      <xgr:name>echo_input</xgr:name>
+      <xgr:node>Echo_invoke</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="ws">
+      <xgr:id>Echo_invoke_out_0</xgr:id>
+      <xgr:name>echo_output</xgr:name>
+      <xgr:node>Echo_invoke</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="control">
+      <xgr:id>Echo_invoke_ctrl_in_0</xgr:id>
+      <xgr:name>control</xgr:name>
+      <xgr:node>Echo_invoke</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="control">
+      <xgr:id>Echo_invoke_ctrl_out_0</xgr:id>
+      <xgr:name>control</xgr:name>
+      <xgr:node>Echo_invoke</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="systemData">
+      <xgr:id>Input_out_2</xgr:id>
+      <xgr:name>Parameter</xgr:name>
+      <xgr:node>echo_input</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="systemData">
+      <xgr:id>Output_in_2</xgr:id>
+      <xgr:name>Parameter</xgr:name>
+      <xgr:node>echo_output</xgr:node>
+    </xgr:port>
+    <xgr:edge xgr:type="data">
+      <xgr:fromPort>Input_out_2</xgr:fromPort>
+      <xgr:toPort>Echo_invoke_in_0</xgr:toPort>
+    </xgr:edge>
+    <xgr:edge xgr:type="data">
+      <xgr:fromPort>Echo_invoke_out_0</xgr:fromPort>
+      <xgr:toPort>Output_in_2</xgr:toPort>
+    </xgr:edge>
+  </xgr:graph>
+  <xwf:wsdls>
+    <xwf:wsdl xwf:id="Echo">&lt;wsdl:definitions name="Echo" targetNamespace="http://airavata.apache.org/schemas/gfac/2012/12"
+  xmlns:typens="http://airavata.apache.org/schemas/gfac/2012/12/Echo/xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:globalTypens="http://airavata.apache.org/schemas/gfac/2012/12/xsd"
+  xmlns:wsdlns="http://airavata.apache.org/schemas/gfac/2012/12" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+  xmlns:gfac="http://airavata.apache.org/schemas/gfac/2012/12" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  &lt;wsdl:types>
+    &lt;schema elementFormDefault="unqualified" targetNamespace="http://airavata.apache.org/schemas/gfac/2012/12/Echo/xsd" xmlns="http://www.w3.org/2001/XMLSchema">
+      &lt;import namespace="http://airavata.apache.org/schemas/gfac/2012/12" schemaLocation="http://airavata.apache.org/schemas/gfac/2012/12/GFacParameterTypes.xsd" />
+      &lt;element name="invoke_InputParams" type="typens:invoke_InputParamsType" />
+      &lt;complexType name="invoke_InputParamsType">
+        &lt;sequence>
+          &lt;element name="echo_input" type="gfac:StringParameterType">
+            &lt;annotation>
+              &lt;documentation />
+            &lt;/annotation>
+          &lt;/element>
+        &lt;/sequence>
+      &lt;/complexType>
+      &lt;element name="invoke_OutputParams" type="typens:invoke_OutputParamsType" />
+      &lt;complexType name="invoke_OutputParamsType">
+        &lt;sequence>
+          &lt;element name="echo_output" type="gfac:StringParameterType">
+            &lt;annotation>
+              &lt;documentation />
+            &lt;/annotation>
+          &lt;/element>
+        &lt;/sequence>
+      &lt;/complexType>
+    &lt;/schema>
+  &lt;/wsdl:types>
+  &lt;wsdl:message name="invoke_ResponseMessage_504bca7e-4bb2-4432-84bc-f5f21f77ac76">
+    &lt;wsdl:part name="parameters" element="typens:invoke_OutputParams">
+    &lt;/wsdl:part>
+  &lt;/wsdl:message>
+  &lt;wsdl:message name="invoke_RequestMessage_ebe74610-34d1-4a31-8e00-84c2b2219843">
+    &lt;wsdl:part name="parameters" element="typens:invoke_InputParams">
+    &lt;/wsdl:part>
+  &lt;/wsdl:message>
+  &lt;wsdl:portType name="Echo">
+&lt;wsdl:documentation />
+    &lt;wsdl:operation name="invoke">
+&lt;wsdl:documentation />
+      &lt;wsdl:input name="invoke_RequestMessage_ebe74610-34d1-4a31-8e00-84c2b2219843" message="wsdlns:invoke_RequestMessage_ebe74610-34d1-4a31-8e00-84c2b2219843">
+    &lt;/wsdl:input>
+      &lt;wsdl:output name="invoke_ResponseMessage_504bca7e-4bb2-4432-84bc-f5f21f77ac76" message="wsdlns:invoke_ResponseMessage_504bca7e-4bb2-4432-84bc-f5f21f77ac76">
+    &lt;/wsdl:output>
+    &lt;/wsdl:operation>
+  &lt;/wsdl:portType>
+&lt;/wsdl:definitions></xwf:wsdl>
+  </xwf:wsdls>
+  <xwf:image>iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mN49Ojef2Iww6hC+ioE
+AJr2avQ9sXYrAAAAAElFTkSuQmCC
+</xwf:image>
+</xwf:workflow>
\ No newline at end of file

Added: airavata/trunk/samples/gateway-developer-guide/src/main/resources/SimpleEcho.xwf
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/resources/SimpleEcho.xwf?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/resources/SimpleEcho.xwf (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/resources/SimpleEcho.xwf Tue Jan 21 20:58:48 2014
@@ -0,0 +1,404 @@
+<?xml version="1.0"?>
+
+<!--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. -->
+
+<xwf:workflow xwf:version="0.9" xmlns:xwf="http://airavata.apache.org/xbaya/xwf">
+  <xgr:graph xgr:version="0.9" xgr:type="ws" xmlns:xgr="http://airavata.apache.org/xbaya/graph">
+    <xgr:id>Workflow</xgr:id>
+    <xgr:name>SimpleEcho</xgr:name>
+    <xgr:description></xgr:description>
+    <xgr:metadata>
+      <appinfo xmlns="http://www.w3.org/2001/XMLSchema">
+
+</appinfo>
+    </xgr:metadata>
+    <xgr:node xgr:type="input">
+      <xgr:id>input</xgr:id>
+      <xgr:name>input</xgr:name>
+      <xgr:outputPort>input_out_0</xgr:outputPort>
+      <xgr:x>59</xgr:x>
+      <xgr:y>67</xgr:y>
+      <xgr:config>
+        <xgr:description></xgr:description>
+        <xgr:dataType>{http://www.w3.org/2001/XMLSchema}string</xgr:dataType>
+        <xgr:visibility>true</xgr:visibility>
+      </xgr:config>
+    </xgr:node>
+    <xgr:node xgr:type="output">
+      <xgr:id>return</xgr:id>
+      <xgr:name>return</xgr:name>
+      <xgr:inputPort>return_in_0</xgr:inputPort>
+      <xgr:x>455</xgr:x>
+      <xgr:y>138</xgr:y>
+      <xgr:config>
+        <xgr:description></xgr:description>
+        <xgr:dataType>{http://www.w3.org/2001/XMLSchema}string</xgr:dataType>
+      </xgr:config>
+    </xgr:node>
+    <xgr:node xgr:type="ws">
+      <xgr:id>EchoServicePortType_echo</xgr:id>
+      <xgr:name>EchoServicePortType:echo</xgr:name>
+      <xgr:outputPort>EchoServicePortType_echo_out_0</xgr:outputPort>
+      <xgr:inputPort>EchoServicePortType_echo_in_0</xgr:inputPort>
+      <xgr:controlInPort>EchoServicePortType_echo_ctrl_in_0</xgr:controlInPort>
+      <xgr:controlOutPort>EchoServicePortType_echo_ctrl_out_0</xgr:controlOutPort>
+      <xgr:x>200</xgr:x>
+      <xgr:y>112</xgr:y>
+      <xgr:wsdl>_</xgr:wsdl>
+      <xgr:portType>{http://samples.airavata.apache.org}EchoServicePortType</xgr:portType>
+      <xgr:operation>echo</xgr:operation>
+    </xgr:node>
+    <xgr:port xgr:type="systemData">
+      <xgr:id>input_out_0</xgr:id>
+      <xgr:name>Parameter</xgr:name>
+      <xgr:node>input</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="systemData">
+      <xgr:id>return_in_0</xgr:id>
+      <xgr:name>Parameter</xgr:name>
+      <xgr:node>return</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="ws">
+      <xgr:id>EchoServicePortType_echo_in_0</xgr:id>
+      <xgr:name>input</xgr:name>
+      <xgr:node>EchoServicePortType_echo</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="ws">
+      <xgr:id>EchoServicePortType_echo_out_0</xgr:id>
+      <xgr:name>return</xgr:name>
+      <xgr:node>EchoServicePortType_echo</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="control">
+      <xgr:id>EchoServicePortType_echo_ctrl_in_0</xgr:id>
+      <xgr:name>control</xgr:name>
+      <xgr:node>EchoServicePortType_echo</xgr:node>
+    </xgr:port>
+    <xgr:port xgr:type="control">
+      <xgr:id>EchoServicePortType_echo_ctrl_out_0</xgr:id>
+      <xgr:name>control</xgr:name>
+      <xgr:node>EchoServicePortType_echo</xgr:node>
+    </xgr:port>
+    <xgr:edge xgr:type="data">
+      <xgr:fromPort>EchoServicePortType_echo_out_0</xgr:fromPort>
+      <xgr:toPort>return_in_0</xgr:toPort>
+    </xgr:edge>
+    <xgr:edge xgr:type="data">
+      <xgr:fromPort>input_out_0</xgr:fromPort>
+      <xgr:toPort>EchoServicePortType_echo_in_0</xgr:toPort>
+    </xgr:edge>
+  </xgr:graph>
+  <xwf:wsdls>
+    <xwf:wsdl xwf:id="_">&lt;wsdl:definitions targetNamespace="http://samples.airavata.apache.org" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://samples.airavata.apache.org"
+  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+    &lt;wsdl:documentation>
+		Provide Simple Service for Testing Purpose which Echo's the input
+	&lt;/wsdl:documentation>
+    &lt;wsdl:types>
+        &lt;xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://samples.airavata.apache.org">
+            &lt;xs:element name="echo">
+                &lt;xs:complexType>
+                    &lt;xs:sequence>
+                        &lt;xs:element minOccurs="0" name="input" nillable="true" type="xs:string" />
+                    &lt;/xs:sequence>
+                &lt;/xs:complexType>
+            &lt;/xs:element>
+            &lt;xs:element name="echoResponse">
+                &lt;xs:complexType>
+                    &lt;xs:sequence>
+                        &lt;xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />
+                    &lt;/xs:sequence>
+                &lt;/xs:complexType>
+            &lt;/xs:element>
+        &lt;/xs:schema>
+    &lt;/wsdl:types>
+    &lt;wsdl:message name="echoRequest">
+        &lt;wsdl:part name="parameters" element="ns:echo" />
+    &lt;/wsdl:message>
+    &lt;wsdl:message name="echoResponse">
+        &lt;wsdl:part name="parameters" element="ns:echoResponse" />
+    &lt;/wsdl:message>
+    &lt;wsdl:portType name="EchoServicePortType">
+        &lt;wsdl:operation name="echo">
+            &lt;wsdl:input wsaw:Action="urn:echo" message="ns:echoRequest" />
+            &lt;wsdl:output wsaw:Action="urn:echoResponse" message="ns:echoResponse" />
+        &lt;/wsdl:operation>
+    &lt;/wsdl:portType>
+    &lt;wsdl:binding name="EchoServiceSoap11Binding" type="ns:EchoServicePortType">
+        &lt;soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
+        &lt;wsdl:operation name="echo">
+            &lt;soap:operation soapAction="urn:echo" style="document" />
+            &lt;wsdl:input>
+                &lt;soap:body use="literal" />
+            &lt;/wsdl:input>
+            &lt;wsdl:output>
+                &lt;soap:body use="literal" />
+            &lt;/wsdl:output>
+        &lt;/wsdl:operation>
+    &lt;/wsdl:binding>
+    &lt;wsdl:binding name="EchoServiceSoap12Binding" type="ns:EchoServicePortType">
+        &lt;soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
+        &lt;wsdl:operation name="echo">
+            &lt;soap12:operation soapAction="urn:echo" style="document" />
+            &lt;wsdl:input>
+                &lt;soap12:body use="literal" />
+            &lt;/wsdl:input>
+            &lt;wsdl:output>
+                &lt;soap12:body use="literal" />
+            &lt;/wsdl:output>
+        &lt;/wsdl:operation>
+    &lt;/wsdl:binding>
+    &lt;wsdl:binding name="EchoServiceHttpBinding" type="ns:EchoServicePortType">
+        &lt;http:binding verb="POST" />
+        &lt;wsdl:operation name="echo">
+            &lt;http:operation location="EchoService/echo" />
+            &lt;wsdl:input>
+                &lt;mime:content type="text/xml" part="echo" />
+            &lt;/wsdl:input>
+            &lt;wsdl:output>
+                &lt;mime:content type="text/xml" part="echo" />
+            &lt;/wsdl:output>
+        &lt;/wsdl:operation>
+    &lt;/wsdl:binding>
+    &lt;wsdl:service name="EchoService">
+        &lt;wsdl:port name="EchoServiceHttpSoap11Endpoint" binding="ns:EchoServiceSoap11Binding">
+            &lt;soap:address location="http://localhost:8080/airavata-server/services/EchoService/" />
+        &lt;/wsdl:port>
+        &lt;wsdl:port name="EchoServiceHttpSoap12Endpoint" binding="ns:EchoServiceSoap12Binding">
+            &lt;soap12:address location="http://localhost:8080/airavata-server/services/EchoService/" />
+        &lt;/wsdl:port>
+        &lt;wsdl:port name="EchoServiceHttpEndpoint" binding="ns:EchoServiceHttpBinding">
+            &lt;http:address location="http://localhost:8080/airavata-server/services/EchoService/" />
+        &lt;/wsdl:port>
+    &lt;/wsdl:service>
+&lt;/wsdl:definitions></xwf:wsdl>
+  </xwf:wsdls>
+  <xwf:image>iVBORw0KGgoAAAANSUhEUgAAAjUAAAC+CAYAAADN/f6qAAAxL0lEQVR42u2dCVQUV/q3meAS9SQ5
+JtGok8VJTiaTOFk1k/WfyWgmxixmMsZMFvXLZtwSjfsaY1zBfU1MXFBE4gKCuEcFBSFoQFEQZEdA
+ARHcRVl8v3tvVTXV1VVNbyDd/Oqc50hV021300U9vPd33+uVm5tFAAAAAADujhfeBAAAAABAagAA
+AAAAIDUAAAAAAJAaAAAAAABIDQAAAAAgNQAAAAAAkBoAAAAAAEgNAAAAAACkBgAAAACQGgAAAAAA
+SA0AAAAAAKQGAAAAAABSAwAAAABIDQAAAAAApAYAAAAAAFIDAAAAAACpAQAAAACkBgAAAAAAUgMA
+AAAAAKkBAAAAAIDUAAAAAABAagAAAAAAqQEAAAAAgNQAAAAAAEBqAAAAAAAgNQAAAACA1AAAAAAA
+QGoAAAAAACA1AAAAAACQGgAAAABAagAAAAAAIDUAAAAAAJAaAAAAAABIDQAAAAAgNQAAAAAAkBoA
+AAAAAEgNAAAAAACkBgAAAAAAUgMAAAAASA0AAAAAAKQGAAAAAABSAwAAAAAAqQEAAAAApAYAAAAA
+AFIDAAAAAACpAQAAAACA1AAAAAAAUgMAAAAAAKkBAAAAAIDUAAAAAABAagAAAAAAqQEAAAAAgNQA
+AAAAAEBqAAAAAAAgNQAAAACA1OBNAAAAAACkBgAAAAAAUgMAAAAAAKkBAAAAAIDUAAAAAABSAwAA
+AAAAqQEAAAAAgNQAAAAAAEBqAAAAAACpAQAAAACA1AAAAAAAQGpqi7z8k7R9xw6aN38+TZo0CdQR
+03xmkn+gPyUlHcXJBwAAAFLjLCkpyTR37lwKD4+g0wVFVF5JdJ1xrYKojHG1nOgK4/J1okuMi9eI
+LjDOlxGdY5ReJSphnL1CVMw4c5moiFF4iaiAcfoi0SlG/gWiPEbueaKTjJxzRNmMrFKiTEZGCVE6
+I+0sUSrjRDFRCiP5DNFxRlIRUSLjWCHRUUZCAdERxuHTRPGMuFMSh/IlYvMkYnIlDpyUiMyR2Jct
+EZ4lsSdTYjfjtwyiXYyd6UQ7GNvTiLYxtqYSbWGEnSDazAhNIQphbEomCmYEHSfayNiQRLSesS6R
+6FdG4DGitYyAo0RrGP4JRKsZyw6U0PwNUeQzcyZFR0fiBAQAAACpcZT8/FwhNNk5J6miigTXZakp
+k6Xmiiw1l2SpuSBLzbl6KDV/yFJzUJaa32WpiZalJkqWmv2y1ETIUrNXJTVcaH6ThWanLDTbZaHZ
+KgtNmCw0obLQbJKFxl6pWXWEyI+xNKKAfGf6omIDAAAAUuMoO3bsoPCICKqUhcbWKo1aakpkqSmW
+paZIlpoCWWpOyVKTJ0vNSVlqsuuh1DhbpQmShWaDLDTrZKEJlIUmQBYaf1loOCsPS/wStI38/Vfj
+JAQAAACpcYT58+dTQWGR3VLjqqEnTqYsNemy1KTKUpMiS81xWWoSZak5KkvNkXooNY5UabjQrGAs
+izpDvr6+OAkBAABAahyBh1WrbtBNkxpnqzSceA+RmuXxJH4eYWGhlJAQh5MRAAAApKYhSY2zIeH6
+KDX+/qsEkZEROCEBAABAauyVmppCwu4gNfZWafRmPtkbEq5NqeGgYgMAAABSY4fU1FSlsTbzydaQ
+sDvMfLK3SqM388nekHBNUsOHonBSAgAAgNS4SGpsrdJ4eXmZcWuzZvTY40/SPW3bUaPGjcW/K9dt
+MZv5NGHaPGr/0MPUpGlTat2mHY2Y6GMWEvYPi6Snnn2Rmt7ajJo0aUr/eLkzLQ8ON0nNipBIerJT
+9e2dXupMP24IN5OaYZMXiedzi7c3tbjtDnq31wDaklBqkpo9GVX0zicDqDG7v/Y1qKXmy3HzqN0D
+D4vvu7N1O+o93MepKo165hMXGj2pWbPGHyclAAAASM3NkhqfuUso5mi6aX/anCUUfTRTfH3v/e1N
+VZqxk2eJYx/0/pJSi6uE0PD90ZPnmKo0XHT4Mb+QfaJSE7A9ll57u4cpJNzqHun2X4L2iUrNyi2x
+9K83e5hJzRdDJ9Ha8BRRqZm6NFh8/zsffWWSmt6DJ4pjPT4fKio1//1sqIXUfD5Keq6v9/ySQpOr
+qM9w6bl+OmqOy4aelulIDQcnJQAAAEjNTZKa0xeqxNCTsp9TUiGGnvjX3t7eJqnhgsOPxSSfFkNP
+KYUVYv++Bx40SU2z5i1ElefHtdsoIrHQYuhJ3N6oMS1Ys412HinUDQlrh5/4/9G8xW0mqblLFqOQ
+w6VCaoLjSy2k5p4/S891ddRpMfwUnCQ913vuexBSAwAAAFJTX6RGGxJ2VmqUkLCyr+RpTJIjS412
+qEeBi48iNVMXrBTDSspt7R96hOb5hZik5vt55rc/wG73XR5iqtL8FBRJTz33ihie4sNP6v9HCQkr
+++qQsFpq+NCT0XPljwmpAQAAAKmpR1KjVGnsWR5BGxK2V2qUSk1CzgWrIeFjBVUUsC2Gxk6XsjGt
+2rQzCwkfyquilWExNGKKdPvd97QzSc1drdqIY4s3RooqTURWlZnU7FVVakITLoiQcFBcdaVGydMo
+lZp1cRccDglDagAAAEBq6lBqnOlPo4hAgUZq8jRSo4SEJ85YYMrUJBdcp5QzVeQfGk7/6vqOSWre
+6vExhexPFHmaLdGp4vvb/Pl+k9S88d7HtH5vosjTBEVW365ITcu7WotjK3ccoX1MaD74YqiF1PT+
+RsrUfDxogpCa978caSE1X42Xnuu/e35JQceu06bjVTTZL5w6/esdm6o01pZHUELCv8RBagAAAEBq
+6p3U8P40aqnhU7nVUqNM5fZZtJL+9vcnxZATH0bqzIRmVUi4aXmEZRt20XMvdxa3cTo+/wr5b4s1
+dRJe8usueval6tuffu4VWhEWa5KaxRv20V/+2sFi6EktNbvSKuitD7/Snf2kns49ePpK+svfnhSP
+xb/3WSY0PzCxcdXQE6QGAAAApKaeSE196CTsih41205IIeAmtzars07CyzD8BAAAAFLjmtlP7iw1
+fziwPIK2k3D3XoMoKO4sbU+toA++Gi2k5u1PBkFqAAAAQGrcSWpuyGs/lTsQEnbH5RH0qjTjF6yj
+tvc9KIaVWre7n3oysQk7ft1weQSjkLC9UiMyNQgKAwAAgNS4SGoqLzEu0o2KC4xzjFK6UX6WUcw4
+wyiiG9cLGKcZ+XTjWh4jl5FDVWXZjCxGJiOdqq6mMU4wUqjqSjLjOCOJcYyqLicwjjAOU9WleEYc
+4xBVXTzI+J0Rw4imqgsHGJGM/VR5fh8jnLGXKs/tYfzG2MXYSZWl2xnbGFupsiSMsZkRSpVnQxjB
+jCCqLN7AWM9Yx/iVKs+sZQQw/KmiaDVjFcOPsZIqCpczljF+poqCpYyfGEuo4vRixiLGQsZ8qjg1
+jzGHMZsq8mcxZjJ8GDOoIm8aYypjCpXnTmb8wPieyk9OZExgjGeMo/KcsYzRjFFUnj2CMZwxDFID
+AAAAUuOc1ChCc16WmhKV1HChKZSF5hQTGUVqTspSowhNBhOZaqm5XHqC8nPTKDMzgzIyPIPMjDTK
+zzpIF/MCZalRhMZXkpq8aqmpFppJstR8Vy01QmjGyEIzUiU1QyE1AAAAIDWukRp7qjRaqVGEJpVK
+z3iWzOhRnLNdp0ozXZYaTZUm17YqDaQGAAAApMZZqTGr0pTqVGlkqbGo0ihDT9VVmsvnUj1eaBQu
+5q6xsUozUadKo5WaoVSe9S2kBgAAAKTGeamRhcY09KSt0ihDT9arNPl56fVGOhYtWkR33XWXmMlU
+G4+fnxWrU6WZqlOlUYaetFUaZehpGKQGAAAApMY1UnNef+hJXaW5blSlMQ8I21ulWblyJT366KPU
+pEkTuu+++8jHx8dl0tG6dWvatWuXad/VcpOZkWpRpakeejKv0nQp+wtFFPS2WqUpzxoCqQEAAACp
+cU5qtFWaYoMqjbWAcKqQGnukYNOmTUI8AgMDxX5MTAz16dPHZdJRWxUaNZLUTDcYeqqu0nhVeJFX
+mRd1KW1PUXm9LALCktQMhtQAAACA1LhEamwMCOtXaVLFNG57hOCNN96gOXPmGN5+/Phx+uSTT6hZ
+s2YC/jU/ppaWGTNmULt27ahRo0b02GOP0datW023qdFKTkpKCvXo0UNUiPgQ1ZgxYxySIFuncXOh
+8brEOMco9qKup/5CESc/VA09DYHUAAAAgNS4RmpKDALCpwwCwpbTuKuu2Cc1LVq0EHJhdHvfvn3p
+tddeo4SEBMHrr78ujqmlpnv37hQXF0dpaWk0btw4evLJJw0rNer9fv36icc7duyYeGwuWA5JjY3T
+uNVC41XIyGfkeFGXjPspIvMDWWq+gdQAAACA1DgnNcrQk+PTuB2RmpokolWrVrR//37TPv+aV1XU
+91dXbrjY8IqNLVLDHzs6Otq0z792TGqsTeP+zjSNW09ovDIYJxhJXtQ16QGKSusJqQEAAACpcVpq
+jKZxWwsIX7XsIOzKSo2eZFiTFu0xa1JT031tlxr10JPxNG5rQuOV4EUdE1pTUMpb4ufRu3dv+vzz
+z0U1aejQb9m/fWnMmFG0ePECCg0NZu9ZEk5UAAAAkBp9qakpIJxrEBA2r9LwJRHsEQI+/GMtU8Or
+KVFRUVYrNY5KjbZSw/8fZ6TGeBq3LDUGQtMx8R4KSX2HrmYNovLMr8XPY+nSn2jhwgU0d+4cmjFj
+Ok2ePIkGDuxPb77ZjZ544nG6/fbbqW3bNtS16+s0fvxYITpZWek4eQEAAEBqap7Gbfs6T/bOfuJy
+sX79et3ZT0ruhWdeePaF52u0mRpHpYY/Ns/R8MfldOvWzUGpsWWdpzEWQtMxmclM2rtMZr4RAWGe
+pynPHGTz8NPBgzHk57dcyM4zzzxNd97Zknr2fJ99vx8EBwAAAKTG0XWelCoNX7jSXilQ+tR4e3uL
+PjWzZ882m/3EJYfPUOL06tXLbLjKGanhj92zZ08xnHXHHXeI2U/qoS17pMZoGre6g7AiNM+ltaWg
+DCYz2UNM07glofnaLqnRwoek5s+fSy+88Dy1b/8A+frOgNwAAABoiFLjbEA42WGpqS9ERETQvffe
+64DU2LbOU8fMNhSS+R6TmaFmHYTVVZryzIEuCQrv3r1TVG0eeughCgxcg5MaAAAgNQ1NamxZ50mn
+SnO1ukpTdSXRrUSGD2Xxoaf4+HiLoS1bcWadJ6U3jVKlcZXUKPCsTYcOj9GIEcNwYgMAAKSmoUiN
+3jpPtk/jrpaaY261mOUPP/wggse33nqraMSnnh5u6zIJ9q3zNNxqlaY8c4DLp3QnJSXQyy+/BLEB
+AABITUORGuemcUtSk0hVl49Rfm5qg1ihW1rQMkZ3nSe7qjRmUtO/VvrUcLF55JG/imAxTnAAAIDU
+NACpsX+dJ/MqDZeao3S5JNGtqjXOcOHkCqvTuC1X4x6uU6VRhp4GUFnawFprvsdzNjwzxAUHJzkA
+AEBqPJJ58+ZQ4akUO9d50lZppKGnqssJjCNUWnTc44XmTHZYDdO4x+pUaczXedIOPSVHjaIpU6bU
+WkdhHh6ePn0KTnIAAIDUeCYhmzZSxJ4tVtZ5qnkatzL0pEhN1aV4unw2gfJzT1BmZrrHiAzP0PAh
+p4sn/ayu82Q29GRTlUYaelq1zIdmz55Va1Kzfn2gaNiHkxwAACA1Hgnvb8IvpPk5Rx2exi1VaY7K
+UnNYSE3VpTjGIaq6eJARy4hhRFPVhQOMKMZ+qjy/jxHO2EuV5/YwdjN2MXZSZel2xjbGVqos2cII
+Y4RS5dkQRjAjiLGRKovXM9YxfqXKM2sZAYw1VFG0mrGK4cdYSRWFyxnLGD9TRcFSxk+MHxlLqOL0
+IsZCxnyqODWPMZcxhyryZzFmMnzk1bitrfNka5VGPyActX0yTZ06lVasWFZrUpOeniKGoHCSAwAA
+pMZjiY2NptmzZtHuXZupKD9RJyCcYRAQ1qnSCKnhQvOHSmp+l6TGJDSROlLDheY3HalRhGYzgwvN
+pmqpKd4gSw0TmuJAldT4y1KjCM0KHalRhGaxLDULmMjMrxaaU7NlqfGVpMbqatyOTeMuS/+Gkg+M
+odXLfYTQLF36o4XQuHpBSy418fEHcaIDAACkxrMrNmvXBoiOvjysCuoGnqHhlTK9Cg1nzRp/l0tN
+TEwkTnQAAIDUNAzCwkJ1L7Cg7uE/C1f+bPlCmHzdKJzoAAAAqWkQHDkSRwEB/pCKekBCQpxLf7aN
+GnljTSgAAIDUNCwOHNgPqbjJ7Nu316U/08jICLHYJT7fAAAAqWmQFRs+/MFzHZCMuoG/1/w9d3WF
+hjN58iTRqwafbQAAgNQA4NZ07/4O+frOwHsBAACQGgDcF56jufPOlhQRsRvvBwAAQGoAcF+WLl1C
+HTo8hvcCAAAgNQC4N3x5BJ6pwXsBAACQGgDcFt5BuEWL5ugkDAAAkBoA3JuhQ4fQRx/9D+8FAABA
+agBw74AwXxohMHAN3g8AAIDUAOC+zJkzUwSE0UUYAAAgNQCgSgMAAABSA0BdUbBjK5W9+k+qbNWK
+qm6/na698DyFjB9LjzzyV7w/AAAAqQHAfYTmRovmRF5eZlT+6U8UOPhrvEcAAACpAcA9KHv5JQuh
+USjr1AnvEQAAQGoAcA/4kJOR1PChKLxHAAAAqQGg4UlNVjqVDOxPF1s0p+KmTSnvi8/pZEoS3mcA
+AIDUAHBzh5+uPWvf8JMQGna/YsYpRjYjg4kN3mcAAIDUAHDTgsLUyJsKQ4PteixRoVEJzQnGsaZN
+8T4DAACkBoC6E5urL71Ipd630PXmzUSFxl6h4RQzqTETGkYck5odO3bQ/PnzadKkSQAAG5k9y5c2
+bVxNSUlH8XsKQGoAsAdXdA/OG9jfTGj+YAS98gpFRERQUVERYcOGzfatpKSEoqKiaM5sX4qOjsTv
+KQCpAcBWeKO9xYsXOPUYJ5kQZTCxSWzRXFRouNBkJyfj6oQNmxNbQUEBzWZig4oNgNQAYAPr1wdS
+27ZtKD09xWWPyYeceIUGGzZszm/7I7aQv/9q/L4CkBoAauKJJx4Xw0+ufEyeocGQEzZsLhqKOltE
+vr6++H0FIDUAWCM4eIOo0rh6JW4edMSGDZvrNn5OhYWFUkJCHH53AUgNAHp8+mkfGjiwv8sft66l
+xsvLS+DOmye8hoaw3ayfEz+n/P1XCSIjI/D7C0BqAFATH3+QWrRoTgcPxtQLqVEuFlrq8kJTWFhI
+PXr0oGbNmlHjxo3Z+9OC/vGPf7jlxVL7Pt5222301VdfUWlpaa09X6OfoScJW32QGg4qNgBSA4CK
+6dOnUJcunWvlsZ2Rmpt5oenWrZt4nAMHDoj948eP08cff+wRF9/JkyeL/T59+tTJxd1TK0/1RWr4
+UJQ7/t7Jy8uhbdu20bx589CPqA75jp3/S5YtsXsWHaQGuA3PPPO009O461pqVq1aRU8//bSootx7
+7720cuVK3QoBv71Dhw4mOVG26dOn0/3332+6P99Xb97e3uL+NVUz+C/khx9+mJo2bUrt2rUjHx+f
+GisW/P/s2LGj6XuuX78ujnEuXLig+/qNXq89z0HZKioqxD7/fnvek5qqL0Y/N+3xzMxMsX/33XdT
+WVmZOJaTkyOOPfnkk4b/H3++X375pXj+9vwMnPn51cVnzVmpWbPG3+1+5yQnJ9OcuXNpz969lJt/
+ii5fu04Xr16j81fKqOTSVTp78QoVnb9EBecu0amSC5R39jzlnDlH2UWllFFQQmmnz1LqqWJKzjtD
+SblFdCynkBKyC+hw1imKy8ing+l5FJuWS9EnTlJUSg7tP55NEUlZtOdYJu0+mkE7j6TR9sOptC0+
+lcL+SKHQQ8m0KfY4Bf2eROujE2ndgWO0NvIordmfQKsjDpNf+GFasTeOlu3+g5b+doh+2nWQFu+I
+pYXbf6cF22Jo7pZomh12gGaGRpJPSCRNC95HU4Mi6IcN4fT9+r303a97aHzgbhoT8BuNXrOLRqze
+QcNW7aBv/bbR4BVb6evlW2jgL2HU/+fN9NXSUPryxxD6bMkm+nRxMPVeGESfLNhIH81bT/+bu47e
+n/0r9ZgVSP/xXUvdfQLo7elr6M1p/vTG1NX0+uRV9NoPfvSv71fQqxNX0P9NWEYvjf+FXhj3Mz03
+Zik9O/onemXUIuo5dhb9MG2qXX2PIDXALUhKSqA772zp0mnctS01ixYtEre/++67QgL4hXH06NFm
+9x0wYIC4+O3evVvsP/jgg2YXGX5s3LhxYn/ChAliX32xadOmjTjWunVrUdEICAig06dPmz2PWbNm
+ie/hF9qqqipxQeT7c+bMsXgtgwYNMl2MP/zwQ3EsMTFR7K9bt07s8+N6r9/a67XnOViTGlveE73X
+4milhg/t8WP8tfFNed78/9Xeb/jw4WbPaeLEiXb9DIw2W+5bF581Z6WG406/c/Lzc2kuE5rM7Gy6
+Vl5BV6+X06UySWrOXZakpvjCZSE1p0svCqnJLZakJkslNSfyFakpFFJzJPu0kJo/ZKn5PVWSmshk
+SWrCEzOF1PyWkG6Smq1xJ4TUhByUpGZjjCQ1vx44KkvNESE1K8PjhdT8IkvNjzurpWb+VklqZm2O
+ElIzY9N+ITVTNkpSM3GdJDXj1kpSM2rNTllqtltITT9Zar6Qpeb/LQoSUvPx/A1Caj6YI0nNf2dK
+UvPOjGqp6TpllZCaLpNWCqn558TlZlLzD1lqnhm5hJ4asYT+b+Q8mjZjus0VG0gNcAt4haa2hp5q
+K1PDLxp8Pz8/3/C+/AKkPsYrL8rG/1pWV2GU6gg/rmy8LK58nwJ/DH9/f9P3tG/fXhxXZEeRBfVF
+TbnvlStXTMeUi9/IkSPNJIcf15MAa6/XnudgbfjJlvdE77U4KjWxsbHiGK9g8I1XaPj+oUOHLO6n
+fU68omLP6zfabLlvXXzWGprU8N5V4eHhdL2iUkjNlWuS1Fy4UiakhldpuNQUnpOkJt+K1BzPKxJS
+czSnQEhNfKYkNbFpktQcSMkRUrMvKUtIDa/SKFLDqzRcajYfkqQm2CQ1x4TUBEQmCKlZJUvN8j2S
+1Py0q1pqeJWGS82csANCanxDJKmZGiRJzSRZaib8uluWml1CaoarpOYbWWoGyFLT96cQITW8SsOl
+pteCjUJqPpwrSU2PWZLUvOsbYJKabtNWC6n592Q/M6l5WZaa58dKUtNp1I9Cap4cvpieGLaIvpnh
+a3PfI0gNcAt69fqEvv9+Qr2UGkdutxZarel7+PCAeuN/vUdGRoq/4B999FFT5aYm+VJf1IyeK7+o
+8WoQH3riFRM9ebDn9dryHBTuuOMOERTWXoxrek9sHV6y9fYXX3zRVHnRyoq9z8na67dXnm35+bn6
+s9aQpIb3rjpdUCCkpuy6JDW8SsOlpvSyNPR0xorUpBecFVKTkn9GSE3iSUlqDmdJUnMoXZKamBMn
+hdTwKg2Xmr0qqdkhS80Wk9QcF1KzISZRSE1glCQ1/vskqVmxV5Kan8XQkyQ1i+Shp3lbooXUzAyV
+pGa6LDWTN4bLUrNHSM3Ytb8JqRnpXy01Q1ZKUjNomSQ1vErDpeZzeeipz0JzqekpS817M9eapOat
+6f5mUtNZlppXvpOk5sVxPwup4VUaLjVPj5Ck5vGhi0S1xta+R5Aa4DbLIuzevdOtpEb56zk3N9eh
+Cw2/eKr/wrblr+czZ85YDNkof+mr5cDW16IMQ3C50A6pGFVq9F6vM89BvdnynrhaakJCQsxkgg9r
+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
+</xwf:image>
+</xwf:workflow>

Added: airavata/trunk/samples/gateway-developer-guide/src/main/resources/airavata-client.properties
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/resources/airavata-client.properties?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/resources/airavata-client.properties (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/resources/airavata-client.properties Tue Jan 21 20:58:48 2014
@@ -0,0 +1,66 @@
+#
+#
+# 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.
+#
+
+###########################################################################
+#
+#  This properties file provides configuration for Airavata Clients: 
+#  XBaya and Airavata API
+#
+###########################################################################
+
+###---------------------------REGISTRY API IMPLEMENTATION---------------------------###
+
+#class.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+class.registry.accessor=org.apache.airavata.rest.client.RegistryClient
+
+###---------------------REGISTRY API IMPLEMENTATION - CUSTOM SETTINGS----------------------###
+
+#for mysql [AiravataJPARegistry]
+#registry.jdbc.driver=com.mysql.jdbc.Driver
+#registry.jdbc.url=jdbc:mysql://localhost:3306/persistent_data
+
+#for derby [AiravataJPARegistry]
+registry.jdbc.driver=org.apache.derby.jdbc.ClientDriver
+registry.jdbc.url=jdbc:derby://localhost:1527/persistent_data;create=true;user=airavata;password=airavata
+registry.jdbc.user=airavata
+registry.jdbc.password=airavata
+start.derby.server.mode=true
+
+default.registry.user=admin
+default.registry.password=admin
+default.registry.password.hash.method=SHA
+default.registry.gateway=default
+
+#for xbaya
+xbaya.registry.user=admin
+xbaya.registry.url=http://localhost:8080/airavata/services/registry
+xbaya.default.gateway=default
+
+trust.store=aiaravata.jks
+trust.store.password=airavata
+
+#user defined registry accessor classes
+#class.provenance.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+#class.configuration.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+#class.descriptor.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+#class.project.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+#class.user.workflow.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+#class.published.workflow.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
+

Added: airavata/trunk/samples/gateway-developer-guide/src/main/resources/gateway.properties
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/resources/gateway.properties?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/resources/gateway.properties (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/resources/gateway.properties Tue Jan 21 20:58:48 2014
@@ -0,0 +1,24 @@
+#
+#
+# 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.
+#
+
+airavata.server.url=http://localhost:8080/airavata/services/registry
+airavata.server.user=admin
+airavata.server.password=admin
+gateway.name=default

Added: airavata/trunk/samples/gateway-developer-guide/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/gateway-developer-guide/src/main/resources/log4j.properties?rev=1560181&view=auto
==============================================================================
--- airavata/trunk/samples/gateway-developer-guide/src/main/resources/log4j.properties (added)
+++ airavata/trunk/samples/gateway-developer-guide/src/main/resources/log4j.properties Tue Jan 21 20:58:48 2014
@@ -0,0 +1,34 @@
+#
+# 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.
+#
+
+# Set root category priority to INFO and its only appender to CONSOLE.
+log4j.rootCategory=INFO, CONSOLE,LOGFILE
+log4j.rootLogger=INFO, CONSOLE, LOGFILE
+
+         
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n
+
+# LOGFILE is set to be a File appender using a PatternLayout.
+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
+log4j.appender.LOGFILE.File=./target/integration-tests.log
+log4j.appender.LOGFILE.Append=true
+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

Modified: airavata/trunk/samples/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/samples/pom.xml?rev=1560181&r1=1560180&r2=1560181&view=diff
==============================================================================
--- airavata/trunk/samples/pom.xml (original)
+++ airavata/trunk/samples/pom.xml Tue Jan 21 20:58:48 2014
@@ -8,7 +8,8 @@
     ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
     the License. -->
 
-<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">
+<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">
     <parent>
         <groupId>org.apache.airavata</groupId>
         <artifactId>airavata</artifactId>
@@ -35,6 +36,8 @@
                 <module>sample-gateway</module>
                 <module>airavata-client</module>
                 <module>distribution</module>
+                <module>gateway-developer-guide</module>
+
             </modules>
         </profile>
     </profiles>