You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2012/11/15 22:00:43 UTC

svn commit: r1410008 [2/4] - in /airavata/trunk/modules/airavata-rest-client: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/airavata/ src/main/java/org/apache/airavata/rest/ src/main/java/org/apa...

Added: airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/DescriptorResourceClient.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/DescriptorResourceClient.java?rev=1410008&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/DescriptorResourceClient.java (added)
+++ airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/DescriptorResourceClient.java Thu Nov 15 21:00:39 2012
@@ -0,0 +1,501 @@
+/*
+ *
+ * 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.rest.client;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.rest.resourcemappings.*;
+import org.apache.airavata.rest.utils.DescriptorUtil;
+import org.apache.airavata.rest.utils.ResourcePathConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriBuilder;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DescriptorResourceClient {
+    private WebResource webResource;
+    private final static Logger logger = LoggerFactory.getLogger(DescriptorResourceClient.class);
+
+    private URI getBaseURI() {
+        logger.info("Creating Base URI");
+        return UriBuilder.fromUri("http://localhost:9080/airavata-services/").build();
+    }
+
+    private WebResource getDescriptorRegistryBaseResource (){
+        ClientConfig config = new DefaultClientConfig();
+        config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
+                Boolean.TRUE);
+        Client client = Client.create(config);
+        WebResource baseWebResource = client.resource(getBaseURI());
+        webResource = baseWebResource.path(ResourcePathConstants.DecResourcePathConstants.DESC_RESOURCE_PATH);
+        return webResource;
+    }
+
+    public boolean isHostDescriptorExists(String hostDescriptorName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.HOST_DESC_EXISTS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("hostDescriptorName", hostDescriptorName);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        } else {
+            return true;
+        }
+    }
+
+    public void addHostDescriptor (HostDescription hostDescription){
+        HostDescriptor hostDescriptor = DescriptorUtil.createHostDescriptor(hostDescription);
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.HOST_DESC_SAVE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, hostDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateHostDescriptor (HostDescription hostDescription){
+        HostDescriptor hostDescriptor = DescriptorUtil.createHostDescriptor(hostDescription);
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.HOST_DESC_UPDATE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, hostDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public HostDescription getHostDescriptor (String hostName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.HOST_DESC);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("hostName", hostName);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        HostDescriptor hostDescriptor = response.getEntity(HostDescriptor.class);
+        HostDescription hostDescription = DescriptorUtil.createHostDescription(hostDescriptor);
+        return hostDescription;
+    }
+
+    public void removeHostDescriptor(String hostName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.HOST_DESC_DELETE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("hostName", hostName);
+        ClientResponse response = webResource.queryParams(queryParams).delete(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public List<HostDescription> getHostDescriptors() {
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.GET_HOST_DESCS);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        HostDescriptionList hostDescriptionList = response.getEntity(HostDescriptionList.class);
+        HostDescriptor[] hostDescriptors = hostDescriptionList.getHostDescriptions();
+        List<HostDescription> hostDescriptions = new ArrayList<HostDescription>();
+        for (HostDescriptor hostDescriptor : hostDescriptors){
+           HostDescription hostDescription = DescriptorUtil.createHostDescription(hostDescriptor);
+            hostDescriptions.add(hostDescription);
+        }
+
+        return hostDescriptions;
+    }
+
+    public List<String> getHostDescriptorNames(){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.GET_HOST_DESCS_NAMES);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        DescriptorNameList descriptorNameList = response.getEntity(DescriptorNameList.class);
+        return descriptorNameList.getDescriptorNames();
+    }
+
+    public boolean isServiceDescriptorExists(String serviceDescriptorName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.SERVICE_DESC_EXISTS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceDescriptorName", serviceDescriptorName);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        } else {
+            return true;
+        }
+    }
+
+    public void addServiceDescriptor (ServiceDescription serviceDescription){
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.SERVICE_DESC_SAVE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, serviceDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateServiceDescriptor(ServiceDescription serviceDescription){
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.SERVICE_DESC_UPDATE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, serviceDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public ServiceDescription getServiceDescriptor (String serviceName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.SERVICE_DESC);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ServiceDescriptor serviceDescriptor = response.getEntity(ServiceDescriptor.class);
+        ServiceDescription serviceDescription = DescriptorUtil.createServiceDescription(serviceDescriptor);
+        return serviceDescription;
+    }
+
+    public void removeServiceDescriptor(String serviceName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.SERVICE_DESC_DELETE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        ClientResponse response = webResource.queryParams(queryParams).delete(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public List<ServiceDescription> getServiceDescriptors (){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.GET_SERVICE_DESCS);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ServiceDescriptionList serviceDescriptionList = response.getEntity(ServiceDescriptionList.class);
+        ServiceDescriptor[] serviceDescriptors = serviceDescriptionList.getServiceDescriptions();
+        List<ServiceDescription> serviceDescriptions = new ArrayList<ServiceDescription>();
+        for (ServiceDescriptor serviceDescriptor : serviceDescriptors){
+            ServiceDescription serviceDescription = DescriptorUtil.createServiceDescription(serviceDescriptor);
+            serviceDescriptions.add(serviceDescription);
+        }
+        return serviceDescriptions;
+    }
+
+    public boolean isApplicationDescriptorExists (String serviceName, String hostName, String appDescriptorName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APPL_DESC_EXIST);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        queryParams.add("hostName", hostName);
+        queryParams.add("appDescName", appDescriptorName);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        } else {
+            return true;
+        }
+    }
+
+    public void addApplicationDescriptor(ServiceDescription serviceDescription,
+                                         HostDescription hostDescriptor,
+                                         ApplicationDeploymentDescription descriptor){
+        ApplicationDescriptor applicationDescriptor = DescriptorUtil.createApplicationDescriptor(descriptor);
+        applicationDescriptor.setHostdescName(hostDescriptor.getType().getHostName());
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        applicationDescriptor.setServiceDescriptor(serviceDescriptor);
+
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_BUILD_SAVE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, applicationDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void addApplicationDescriptor(String serviceName, String hostName, ApplicationDeploymentDescription descriptor){
+        ServiceDescription serviceDescription = getServiceDescriptor(serviceName);
+        ApplicationDescriptor applicationDescriptor = DescriptorUtil.createApplicationDescriptor(descriptor);
+        applicationDescriptor.setHostdescName(hostName);
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        applicationDescriptor.setServiceDescriptor(serviceDescriptor);
+
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_BUILD_SAVE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, applicationDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void udpateApplicationDescriptor(ServiceDescription serviceDescription,
+                                            HostDescription hostDescriptor,
+                                            ApplicationDeploymentDescription descriptor){
+        ApplicationDescriptor applicationDescriptor = DescriptorUtil.createApplicationDescriptor(descriptor);
+        applicationDescriptor.setHostdescName(hostDescriptor.getType().getHostName());
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        applicationDescriptor.setServiceDescriptor(serviceDescriptor);
+
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_UPDATE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, applicationDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateApplicationDescriptor(String serviceName, String hostName, ApplicationDeploymentDescription descriptor){
+        ServiceDescription serviceDescription = getServiceDescriptor(serviceName);
+        ApplicationDescriptor applicationDescriptor = DescriptorUtil.createApplicationDescriptor(descriptor);
+        applicationDescriptor.setHostdescName(hostName);
+        ServiceDescriptor serviceDescriptor = DescriptorUtil.createServiceDescriptor(serviceDescription);
+        applicationDescriptor.setServiceDescriptor(serviceDescriptor);
+
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_UPDATE);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, applicationDescriptor);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public ApplicationDeploymentDescription getApplicationDescriptor(String serviceName,
+                                                                     String hostname,
+                                                                     String applicationName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_DESCRIPTION);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        queryParams.add("hostName", hostname);
+        queryParams.add("applicationName", applicationName);
+
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ApplicationDescriptor applicationDescriptor = response.getEntity(ApplicationDescriptor.class);
+        ApplicationDeploymentDescription applicationDeploymentDescription = DescriptorUtil.createApplicationDescription(applicationDescriptor);
+        return applicationDeploymentDescription;
+    }
+
+    public ApplicationDeploymentDescription getApplicationDescriptors(String serviceName, String hostname){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_PER_HOST_SERVICE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        queryParams.add("hostName", hostname);
+
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ApplicationDescriptor applicationDescriptor = response.getEntity(ApplicationDescriptor.class);
+        ApplicationDeploymentDescription applicationDeploymentDescription = DescriptorUtil.createApplicationDescription(applicationDescriptor);
+        return applicationDeploymentDescription;
+    }
+
+    public Map<String, ApplicationDeploymentDescription> getApplicationDescriptors(String serviceName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_ALL_DESCS_SERVICE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ApplicationDescriptorList applicationDescriptorList = response.getEntity(ApplicationDescriptorList.class);
+        ApplicationDescriptor[] applicationDescriptors = applicationDescriptorList.getApplicationDescriptors();
+        Map<String, ApplicationDeploymentDescription> applicationDeploymentDescriptionMap = new HashMap<String, ApplicationDeploymentDescription>();
+        for (ApplicationDescriptor applicationDescriptor : applicationDescriptors){
+            ApplicationDeploymentDescription applicationDeploymentDescription = DescriptorUtil.createApplicationDescription(applicationDescriptor);
+            applicationDeploymentDescriptionMap.put(applicationDescriptor.getHostdescName(), applicationDeploymentDescription);
+        }
+        return applicationDeploymentDescriptionMap;
+    }
+
+    public Map<String[], ApplicationDeploymentDescription> getApplicationDescriptors(){
+        Map<String[], ApplicationDeploymentDescription> applicationDeploymentDescriptionMap = new HashMap<String[], ApplicationDeploymentDescription>();
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_ALL_DESCRIPTORS);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ApplicationDescriptorList applicationDescriptorList = response.getEntity(ApplicationDescriptorList.class);
+        ApplicationDescriptor[] applicationDescriptors = applicationDescriptorList.getApplicationDescriptors();
+        for (ApplicationDescriptor applicationDescriptor : applicationDescriptors){
+            ApplicationDeploymentDescription applicationDeploymentDescription = DescriptorUtil.createApplicationDescription(applicationDescriptor);
+            String[] descriptors = {applicationDescriptor.getServiceDescriptor().getServiceName(), applicationDescriptor.getHostdescName()};
+            applicationDeploymentDescriptionMap.put(descriptors, applicationDeploymentDescription);
+        }
+        return applicationDeploymentDescriptionMap;
+    }
+
+    public List<String> getApplicationDescriptorNames (){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_NAMES);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        DescriptorNameList descriptorNameList = response.getEntity(DescriptorNameList.class);
+        return descriptorNameList.getDescriptorNames();
+    }
+
+    public void removeApplicationDescriptor (String serviceName, String hostName, String applicationName){
+        webResource = getDescriptorRegistryBaseResource().path(ResourcePathConstants.DecResourcePathConstants.APP_DESC_DELETE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("serviceName", serviceName);
+        queryParams.add("hostName", hostName);
+        queryParams.add("appName", applicationName);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).delete(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+}

Added: airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ExperimentResourceClient.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ExperimentResourceClient.java?rev=1410008&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ExperimentResourceClient.java (added)
+++ airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ExperimentResourceClient.java Thu Nov 15 21:00:39 2012
@@ -0,0 +1,241 @@
+/*
+ *
+ * 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.rest.client;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.airavata.registry.api.AiravataExperiment;
+import org.apache.airavata.rest.resourcemappings.ExperimentList;
+import org.apache.airavata.rest.utils.ResourcePathConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriBuilder;
+import java.net.URI;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ExperimentResourceClient {
+    private WebResource webResource;
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentResourceClient.class);
+
+    private URI getBaseURI() {
+        logger.info("Creating Base URI");
+        return UriBuilder.fromUri("http://localhost:9080/airavata-services/").build();
+    }
+
+    private WebResource getExperimentRegistryBaseResource (){
+        ClientConfig config = new DefaultClientConfig();
+        config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
+                Boolean.TRUE);
+        Client client = Client.create(config);
+        WebResource baseWebResource = client.resource(getBaseURI());
+        webResource = baseWebResource.path(ResourcePathConstants.ExperimentResourcePathConstants.EXP_RESOURCE_PATH);
+        return webResource;
+    }
+
+    public void addExperiment(String projectName, AiravataExperiment experiment){
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String date = dateFormat.format(experiment.getSubmittedDate());
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.ADD_EXP);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("projectName", projectName);
+        formParams.add("experimentID", experiment.getExperimentId());
+        formParams.add("submittedDate", date);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            String errorMsg = response.getEntity(String.class);
+            logger.error(errorMsg);
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void removeExperiment(String experimentId){
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.DELETE_EXP);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).delete(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public List<AiravataExperiment> getExperiments(){
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.GET_ALL_EXPS);
+        ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            String errorMsg = response.getEntity(String.class);
+            System.out.println(errorMsg);
+            logger.error(errorMsg);
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentList experimentList = response.getEntity(ExperimentList.class);
+        AiravataExperiment[] experiments = experimentList.getExperiments();
+        List<AiravataExperiment>  airavataExperiments = new ArrayList<AiravataExperiment>();
+        for (AiravataExperiment airavataExperiment : experiments){
+            airavataExperiments.add(airavataExperiment);
+        }
+        return airavataExperiments;
+    }
+
+    public List<AiravataExperiment> getExperiments(String projectName){
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.GET_EXPS_BY_PROJECT);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("projectName", projectName);
+
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentList experimentList = response.getEntity(ExperimentList.class);
+        AiravataExperiment[] experiments = experimentList.getExperiments();
+
+        List<AiravataExperiment>  airavataExperiments = new ArrayList<AiravataExperiment>();
+        for (AiravataExperiment airavataExperiment : experiments){
+            airavataExperiments.add(airavataExperiment);
+        }
+        return airavataExperiments;
+    }
+
+    public List<AiravataExperiment> getExperiments(Date from, Date to){
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String fromDate = dateFormat.format(from);
+        String toDate = dateFormat.format(to);
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.GET_EXPS_BY_DATE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("fromDate", fromDate);
+        queryParams.add("toDate", toDate);
+
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentList experimentList = response.getEntity(ExperimentList.class);
+        AiravataExperiment[] experiments = experimentList.getExperiments();
+
+        List<AiravataExperiment>  airavataExperiments = new ArrayList<AiravataExperiment>();
+        for (AiravataExperiment airavataExperiment : experiments){
+            airavataExperiments.add(airavataExperiment);
+        }
+        return airavataExperiments;
+    }
+
+    public List<AiravataExperiment> getExperiments(String projectName, Date from, Date to){
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String fromDate = dateFormat.format(from);
+        String toDate = dateFormat.format(to);
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.GET_EXPS_PER_PROJECT_BY_DATE);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("projectName", projectName);
+        queryParams.add("fromDate", fromDate);
+        queryParams.add("toDate", toDate);
+
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentList experimentList = response.getEntity(ExperimentList.class);
+        AiravataExperiment[] experiments = experimentList.getExperiments();
+
+        List<AiravataExperiment>  airavataExperiments = new ArrayList<AiravataExperiment>();
+        for (AiravataExperiment airavataExperiment : experiments){
+            airavataExperiments.add(airavataExperiment);
+        }
+        return airavataExperiments;
+    }
+
+    public boolean isExperimentExists(String experimentId){
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.EXP_EXISTS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }else {
+            return true;
+        }
+    }
+
+    public boolean isExperimentExists(String experimentId, boolean createIfNotPresent){
+        String createStatus = "false";
+        webResource = getExperimentRegistryBaseResource().path(ResourcePathConstants.ExperimentResourcePathConstants.EXP_EXISTS_CREATE);
+        if (createIfNotPresent){
+            createStatus = "true";
+        }
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("experimentId", experimentId );
+        formParams.add("createIfNotPresent", createStatus );
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }else {
+            return true;
+        }
+    }
+
+}

Added: airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProjectResourceClient.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProjectResourceClient.java?rev=1410008&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProjectResourceClient.java (added)
+++ airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProjectResourceClient.java Thu Nov 15 21:00:39 2012
@@ -0,0 +1,182 @@
+/*
+ *
+ * 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.rest.client;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.airavata.registry.api.WorkspaceProject;
+import org.apache.airavata.rest.resourcemappings.WorkspaceProjectList;
+import org.apache.airavata.rest.utils.ResourcePathConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriBuilder;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProjectResourceClient {
+    private WebResource webResource;
+    private final static Logger logger = LoggerFactory.getLogger(ProjectResourceClient.class);
+
+    private URI getBaseURI() {
+        logger.info("Creating Base URI");
+        return UriBuilder.fromUri("http://localhost:9080/airavata-services/").build();
+    }
+
+    private WebResource getProjectRegistryBaseResource (){
+        ClientConfig config = new DefaultClientConfig();
+        config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
+                Boolean.TRUE);
+        Client client = Client.create(config);
+        WebResource baseWebResource = client.resource(getBaseURI());
+        webResource = baseWebResource.path(ResourcePathConstants.ProjectResourcePathConstants.REGISTRY_API_PROJECTREGISTRY);
+        return webResource;
+    }
+
+    public boolean isWorkspaceProjectExists(String projectName){
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.PROJECT_EXIST);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("projectName", projectName);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        } else {
+            return true;
+        }
+    }
+
+    public boolean isWorkspaceProjectExists(String projectName, boolean createIfNotExists){
+        String createStatus = "false";
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.PROJECT_EXIST);
+        if (createIfNotExists){
+            createStatus = "true";
+        }
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("projectName", projectName );
+        formParams.add("createIfNotExists", createStatus );
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }else {
+            return true;
+        }
+    }
+
+    public void addWorkspaceProject(String projectName){
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.ADD_PROJECT);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("projectName", projectName );
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkspaceProject(String projectName){
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.UPDATE_PROJECT);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("projectName", projectName );
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void  deleteWorkspaceProject(String projectName){
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.DELETE_PROJECT);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("projectName", projectName);
+        ClientResponse response = webResource.queryParams(queryParams).delete(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public WorkspaceProject getWorkspaceProject(String projectName) {
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.GET_PROJECT);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("projectName", projectName);
+        ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkspaceProject workspaceProject = response.getEntity(WorkspaceProject.class);
+        return workspaceProject;
+    }
+
+    public List<WorkspaceProject> getWorkspaceProjects(){
+        webResource = getProjectRegistryBaseResource().path(ResourcePathConstants.ProjectResourcePathConstants.GET_PROJECTS);
+        ClientResponse response = webResource.get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkspaceProjectList workspaceProjectList = response.getEntity(WorkspaceProjectList.class);
+        WorkspaceProject[] workspaceProjects = workspaceProjectList.getWorkspaceProjects();
+        List<WorkspaceProject> workspaceProjectsList = new ArrayList<WorkspaceProject>();
+        for (WorkspaceProject workspaceProject : workspaceProjects){
+            workspaceProjectsList.add(workspaceProject);
+        }
+        return workspaceProjectsList;
+    }
+
+}

Added: airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProvenanceResourceClient.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProvenanceResourceClient.java?rev=1410008&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProvenanceResourceClient.java (added)
+++ airavata/trunk/modules/airavata-rest-client/src/main/java/org/apache/airavata/rest/client/ProvenanceResourceClient.java Thu Nov 15 21:00:39 2012
@@ -0,0 +1,707 @@
+/*
+ *
+ * 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.rest.client;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.airavata.registry.api.impl.ExperimentDataImpl;
+import org.apache.airavata.registry.api.workflow.*;
+import org.apache.airavata.rest.resourcemappings.ExperimentDataList;
+import org.apache.airavata.rest.resourcemappings.ExperimentIDList;
+import org.apache.airavata.rest.resourcemappings.WorkflowInstancesList;
+import org.apache.airavata.rest.utils.ResourcePathConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriBuilder;
+import java.net.URI;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ProvenanceResourceClient {
+    private WebResource webResource;
+    private final static Logger logger = LoggerFactory.getLogger(ProvenanceResourceClient.class);
+
+    private URI getBaseURI() {
+        logger.info("Creating Base URI");
+        return UriBuilder.fromUri("http://localhost:9080/airavata-services/").build();
+    }
+
+    private WebResource getProvenanceRegistryBaseResource (){
+        ClientConfig config = new DefaultClientConfig();
+        config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
+                Boolean.TRUE);
+        Client client = Client.create(config);
+        WebResource baseWebResource = client.resource(getBaseURI());
+        webResource = baseWebResource.path(ResourcePathConstants.ProvenanceResourcePathConstants.REGISTRY_API_PROVENANCEREGISTRY);
+        return webResource;
+    }
+
+    public void updateExperimentExecutionUser(String experimentId, String user){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_EXPERIMENT_EXECUTIONUSER);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("experimentId", experimentId);
+        formParams.add("user", user);
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public String getExperimentExecutionUser(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT_EXECUTIONUSER);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String executionUser = response.getEntity(String.class);
+        return executionUser;
+    }
+
+    public boolean isExperimentNameExist(String experimentName){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.EXPERIMENTNAME_EXISTS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentName", experimentName);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        return true;
+    }
+
+    public String getExperimentName(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT_NAME);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String experimentName = response.getEntity(String.class);
+        return experimentName;
+    }
+
+    public void updateExperimentName(String experimentId, String experimentName){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_EXPERIMENTNAME);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("experimentId", experimentId);
+        formParams.add("experimentName", experimentName);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+    }
+
+    public String getExperimentMetadata(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENTMETADATA);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String experimentMetadata = response.getEntity(String.class);
+        return experimentMetadata;
+    }
+
+    public void updateExperimentMetadata(String experimentId, String metadata){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_EXPERIMENTMETADATA);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("experimentId", experimentId);
+        formParams.add("metadata", metadata);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public String getWorkflowExecutionTemplateName(String workflowInstanceId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOWTEMPLATENAME);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowInstanceId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String workflowTemplateName = response.getEntity(String.class);
+        return workflowTemplateName;
+    }
+
+    public void setWorkflowInstanceTemplateName(String workflowInstanceId, String templateName){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWINSTANCETEMPLATENAME);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowInstanceId);
+        formParams.add("templateName", templateName);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public List<WorkflowInstance> getExperimentWorkflowInstances(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENTWORKFLOWINSTANCES);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkflowInstancesList workflowInstancesList = response.getEntity(WorkflowInstancesList.class);
+        WorkflowInstance[] workflowInstances = workflowInstancesList.getWorkflowInstances();
+        List<WorkflowInstance> workflowInstanceList = new ArrayList<WorkflowInstance>();
+
+        for (WorkflowInstance workflowInstance : workflowInstances){
+            workflowInstanceList.add(workflowInstance);
+        }
+
+        return workflowInstanceList;
+    }
+
+    public boolean isWorkflowInstanceExists(String instanceId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.WORKFLOWINSTANCE_EXIST_CHECK);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("instanceId", instanceId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        return true;
+    }
+
+    public boolean isWorkflowInstanceExists(String instanceId, boolean createIfNotPresent){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.WORKFLOWINSTANCE_EXIST_CREATE);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("instanceId", instanceId);
+        formParams.add("createIfNotPresent", String.valueOf(createIfNotPresent));
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        return true;
+    }
+
+    public void updateWorkflowInstanceStatus(String instanceId, WorkflowInstanceStatus.ExecutionStatus executionStatus){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWINSTANCESTATUS_INSTANCEID);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("instanceId", instanceId);
+        formParams.add("executionStatus", executionStatus.name());
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkflowInstanceStatus(WorkflowInstanceStatus workflowInstanceStatus){
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String statusUpdateDate = dateFormat.format(workflowInstanceStatus.getStatusUpdateTime());
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWINSTANCESTATUS);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowInstanceStatus.getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("executionStatus", workflowInstanceStatus.getExecutionStatus().name());
+        formParams.add("statusUpdateTime", statusUpdateDate);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public WorkflowInstanceStatus getWorkflowInstanceStatus(String instanceId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOWINSTANCESTATUS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("instanceId", instanceId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkflowInstanceStatus workflowInstanceStatus = response.getEntity(WorkflowInstanceStatus.class);
+        return workflowInstanceStatus;
+    }
+
+    public void updateWorkflowNodeInput(WorkflowInstanceNode node, String data){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODEINPUT);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("nodeID", node.getNodeId());
+        formParams.add("workflowInstanceId", node.getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("data", data);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkflowNodeOutput(WorkflowInstanceNode node, String data){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODEOUTPUT);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("nodeID", node.getNodeId());
+        formParams.add("workflowInstanceId", node.getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("data", data);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public ExperimentData getExperiment(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentDataImpl experimentData = response.getEntity(ExperimentDataImpl.class);
+        return experimentData;
+    }
+
+    public ExperimentData getExperimentMetaInformation(String experimentId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT_METAINFORMATION);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("experimentId", experimentId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentDataImpl experimentData = response.getEntity(ExperimentDataImpl.class);
+        return experimentData;
+    }
+
+    public List<ExperimentData> getAllExperimentMetaInformation(String user){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_ALL_EXPERIMENT_METAINFORMATION);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("user", user);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentDataList experimentDataList = response.getEntity(ExperimentDataList.class);
+        List<ExperimentDataImpl> dataList = experimentDataList.getExperimentDataList();
+        List<ExperimentData> experimentDatas = new ArrayList<ExperimentData>();
+        for (ExperimentDataImpl experimentData : dataList){
+            experimentDatas.add(experimentData);
+        }
+        return experimentDatas;
+    }
+
+    public List<ExperimentData> searchExperiments(String user, String experimentNameRegex){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.SEARCH_EXPERIMENTS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("user", user);
+        queryParams.add("experimentNameRegex", experimentNameRegex);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentDataList experimentDataList = response.getEntity(ExperimentDataList.class);
+        List<ExperimentDataImpl> dataList = experimentDataList.getExperimentDataList();
+        List<ExperimentData> experimentDatas = new ArrayList<ExperimentData>();
+        for (ExperimentDataImpl experimentData : dataList){
+            experimentDatas.add(experimentData);
+        }
+        return experimentDatas;
+    }
+
+    public List<String> getExperimentIdByUser(String user){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT_ID_USER);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("username", user);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        ExperimentIDList experimentIDList = response.getEntity(ExperimentIDList.class);
+        List<String> experimentIDs = experimentIDList.getExperimentIDList();
+        return experimentIDs;
+    }
+
+    public List<ExperimentData> getExperimentByUser(String user){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_EXPERIMENT_USER);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("username", user);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        ExperimentDataList experimentDataList = response.getEntity(ExperimentDataList.class);
+        List<ExperimentDataImpl> dataList = experimentDataList.getExperimentDataList();
+        List<ExperimentData> experimentDatas = new ArrayList<ExperimentData>();
+        for (ExperimentDataImpl experimentData : dataList){
+            experimentDatas.add(experimentData);
+        }
+        return experimentDatas;
+    }
+
+    public void updateWorkflowNodeStatus(WorkflowInstanceNodeStatus workflowStatusNode){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODE_STATUS);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowStatusNode.getWorkflowInstanceNode().getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("nodeId", workflowStatusNode.getWorkflowInstanceNode().getNodeId());
+        formParams.add("executionStatus", workflowStatusNode.getExecutionStatus().name());
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkflowNodeStatus(String workflowInstanceId, String nodeId, WorkflowInstanceStatus.ExecutionStatus executionStatus){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODE_STATUS);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowInstanceId);
+        formParams.add("nodeId", nodeId);
+        formParams.add("executionStatus", executionStatus.name());
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkflowNodeStatus(WorkflowInstanceNode workflowNode, WorkflowInstanceStatus.ExecutionStatus executionStatus){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODE_STATUS);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowNode.getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("nodeId", workflowNode.getNodeId());
+        formParams.add("executionStatus", executionStatus.name());
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public WorkflowInstanceNodeStatus getWorkflowNodeStatus(WorkflowInstanceNode workflowNode){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOWNODE_STATUS);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowNode.getWorkflowInstance().getWorkflowInstanceId());
+        queryParams.add("nodeId", workflowNode.getNodeId());
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkflowInstanceNodeStatus workflowInstanceNodeStatus = response.getEntity(WorkflowInstanceNodeStatus.class);
+        return workflowInstanceNodeStatus;
+    }
+
+    public Date getWorkflowNodeStartTime(WorkflowInstanceNode workflowNode){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOWNODE_STARTTIME);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowNode.getWorkflowInstance().getWorkflowInstanceId());
+        queryParams.add("nodeId", workflowNode.getNodeId());
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String wfNodeStartTime = response.getEntity(String.class);
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date formattedDate = dateFormat.parse(wfNodeStartTime);
+            return formattedDate;
+        } catch (ParseException e) {
+            logger.error("Error in date format...", e);
+            return null;
+        }
+    }
+
+    public Date getWorkflowStartTime(WorkflowInstance workflowInstance){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOW_STARTTIME);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowInstance.getWorkflowInstanceId());
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        String wfStartTime = response.getEntity(String.class);
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date formattedDate = dateFormat.parse(wfStartTime);
+            return formattedDate;
+        } catch (ParseException e) {
+            logger.error("Error in date format...", e);
+            return null;
+        }
+    }
+
+    public void updateWorkflowNodeGramData(WorkflowNodeGramData workflowNodeGramData){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODE_GRAMDATA);
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).type(MediaType.APPLICATION_JSON).post(ClientResponse.class, workflowNodeGramData);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public WorkflowInstanceData getWorkflowInstanceData(String workflowInstanceId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.GET_WORKFLOWINSTANCEDATA);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowInstanceId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkflowInstanceData workflowInstanceData = response.getEntity(WorkflowInstanceData.class);
+        return workflowInstanceData;
+    }
+
+    public boolean isWorkflowInstanceNodePresent(String workflowInstanceId, String nodeId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.WORKFLOWINSTANCE_NODE_EXIST);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowInstanceId);
+        queryParams.add("nodeId", nodeId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        return true;
+    }
+
+    public boolean isWorkflowInstanceNodePresent(String workflowInstanceId, String nodeId, boolean createIfNotPresent){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.WORKFLOWINSTANCE_NODE_EXIST_CREATE);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowInstanceId);
+        formParams.add("nodeId", nodeId);
+        formParams.add("createIfNotPresent", String.valueOf(createIfNotPresent));
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+        return true;
+    }
+
+    public WorkflowInstanceNodeData getWorkflowInstanceNodeData(String workflowInstanceId, String nodeId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.WORKFLOWINSTANCE_NODE_DATA);
+        MultivaluedMap queryParams = new MultivaluedMapImpl();
+        queryParams.add("workflowInstanceId", workflowInstanceId);
+        queryParams.add("nodeId", nodeId);
+        ClientResponse response = webResource.queryParams(queryParams).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+
+        WorkflowInstanceNodeData workflowInstanceNodeData = response.getEntity(WorkflowInstanceNodeData.class);
+        return workflowInstanceNodeData;
+    }
+
+    public void addWorkflowInstance(String experimentId, String workflowInstanceId, String templateName){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.ADD_WORKFLOWINSTANCE);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("experimentId", experimentId);
+        formParams.add("workflowInstanceId", workflowInstanceId);
+        formParams.add("templateName", templateName);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void updateWorkflowNodeType(WorkflowInstanceNode node, WorkflowNodeType type){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.UPDATE_WORKFLOWNODETYPE);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", node.getWorkflowInstance().getWorkflowInstanceId());
+        formParams.add("nodeId", node.getNodeId());
+        formParams.add("nodeType", type.getNodeType().name());
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public void addWorkflowInstanceNode(String workflowInstance, String nodeId){
+        webResource = getProvenanceRegistryBaseResource().path(ResourcePathConstants.ProvenanceResourcePathConstants.ADD_WORKFLOWINSTANCENODE);
+        MultivaluedMap formParams = new MultivaluedMapImpl();
+        formParams.add("workflowInstanceId", workflowInstance);
+        formParams.add("nodeId", nodeId);
+
+        ClientResponse response = webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, formParams);
+        int status = response.getStatus();
+        if (status != 200) {
+            logger.error(response.getEntity(String.class));
+            throw new RuntimeException("Failed : HTTP error code : "
+                    + status);
+        }
+    }
+
+    public List<WorkflowNodeIOData> searchWorkflowInstanceNodeInput(String experimentIdRegEx, String workflowNameRegEx, String nodeNameRegEx)  {
+        //not implemented in Registry API
+        return null;
+    }
+
+    public List<WorkflowNodeIOData> searchWorkflowInstanceNodeOutput(String experimentIdRegEx, String workflowNameRegEx, String nodeNameRegEx)  {
+        //not implemented in Registry API
+        return null;
+    }
+
+    public List<ExperimentData> getExperimentByUser(String user, int pageSize, int pageNo) {
+        //not implemented in Registry API
+        return null;
+    }
+
+
+
+}