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 2014/02/19 17:21:27 UTC

git commit: adding resources - AIRAVATA-1017

Repository: airavata
Updated Branches:
  refs/heads/master 867cfee4c -> 136cfeabb


adding resources - AIRAVATA-1017


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/136cfeab
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/136cfeab
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/136cfeab

Branch: refs/heads/master
Commit: 136cfeabbc97ce1947c0d6738ffadf428ef47f95
Parents: 867cfee
Author: chathuri <ch...@apache.org>
Authored: Wed Feb 19 11:21:21 2014 -0500
Committer: chathuri <ch...@apache.org>
Committed: Wed Feb 19 11:21:21 2014 -0500

----------------------------------------------------------------------
 .../AdvanceInputDataHandlingResource.java       |  41 ++++-
 .../AdvancedOutputDataHandlingResource.java     |  39 ++++-
 .../ComputationSchedulingResource.java          |  46 ++++-
 .../jpa/resources/ConfigDataResource.java       |  45 ++++-
 .../resources/DataTransferDetailResource.java   | 119 ++++++++++++-
 .../jpa/resources/ExperimentResource.java       |   1 -
 .../registry/jpa/resources/GatewayResource.java | 111 +++++-------
 .../jpa/resources/JobDetailResource.java        | 120 ++++++++++++-
 .../registry/jpa/resources/ProjectResource.java | 169 ++++++++-----------
 .../jpa/resources/QosParamResource.java         |  39 ++++-
 .../registry/jpa/resources/StatusResource.java  |  63 ++++++-
 .../registry/jpa/resources/WorkerResource.java  |  51 ++++--
 12 files changed, 621 insertions(+), 223 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
index dda8d05..08edde4 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
@@ -23,10 +23,19 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.AdvancedInputDataHandling;
+import org.apache.airavata.persistance.registry.jpa.model.AdvancedOutputDataHandling;
+import org.apache.airavata.persistance.registry.jpa.model.Experiment;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
 import java.util.List;
 
 public class AdvanceInputDataHandlingResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(AdvanceInputDataHandlingResource.class);
     private int dataHandlingId;
     private ExperimentResource experimentResource;
     private TaskDetailResource taskDetailResource;
@@ -93,26 +102,46 @@ public class AdvanceInputDataHandlingResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for input data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for input data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for input data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for input data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        AdvancedInputDataHandling dataHandling = new AdvancedInputDataHandling();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        dataHandling.setExpId(experimentResource.getExpID());
+        dataHandling.setExperiment(experiment);
+        dataHandling.setTaskId(taskDetailResource.getTaskId());
+        dataHandling.setTask(taskDetail);
+        dataHandling.setWorkingDir(workingDir);
+        dataHandling.setParentWorkingDir(workingDirParent);
+        dataHandling.setStageInputsToWorkingDir(stageInputFiles);
+        dataHandling.setCleanAfterJob(cleanAfterJob);
+        em.persist(dataHandling);
+        dataHandlingId = dataHandling.getDataHandlingId();
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
index 7e40913..c28ff4b 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
@@ -23,10 +23,18 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.AdvancedOutputDataHandling;
+import org.apache.airavata.persistance.registry.jpa.model.Experiment;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
 import java.util.List;
 
 public class AdvancedOutputDataHandlingResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(AdvancedOutputDataHandlingResource.class);
     private int outputDataHandlingId;
     private ExperimentResource experimentResource;
     private TaskDetailResource taskDetailResource;
@@ -84,26 +92,45 @@ public class AdvancedOutputDataHandlingResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for output data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for output data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for output data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for output data handling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        AdvancedOutputDataHandling dataHandling = new AdvancedOutputDataHandling();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        dataHandling.setExpId(experimentResource.getExpID());
+        dataHandling.setExperiment(experiment);
+        dataHandling.setTaskId(taskDetailResource.getTaskId());
+        dataHandling.setTask(taskDetail);
+        dataHandling.setDataRegUrl(dataRegUrl);
+        dataHandling.setOutputDataDir(outputDataDir);
+        dataHandling.setPersistOutputData(persistOutputData);
+        em.persist(dataHandling);
+        outputDataHandlingId = dataHandling.getOutputDataHandlingId();
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
index 76ce5eb..0056bbb 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
@@ -23,11 +23,19 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.Computational_Resource_Scheduling;
+import org.apache.airavata.persistance.registry.jpa.model.Experiment;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
 import java.sql.Timestamp;
 import java.util.List;
 
 public class ComputationSchedulingResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(ComputationSchedulingResource.class);
     private int schedulingId;
     private ExperimentResource experimentResource;
     private TaskDetailResource taskDetailResource;
@@ -139,26 +147,52 @@ public class ComputationSchedulingResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for computational scheduling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for computational scheduling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for computational scheduling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for computational scheduling resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+
+        Computational_Resource_Scheduling scheduling = new Computational_Resource_Scheduling();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        scheduling.setExpId(experimentResource.getExpID());
+        scheduling.setExperiment(experiment);
+        scheduling.setTaskId(taskDetailResource.getTaskId());
+        scheduling.setTask(taskDetail);
+        scheduling.setResourceHostId(resourceHostId);
+        scheduling.setCpuCount(cpuCount);
+        scheduling.setNodeCount(nodeCount);
+        scheduling.setNumberOfThreads(numberOfThreads);
+        scheduling.setQueueName(queueName);
+        scheduling.setWallTimeLimit(walltimeLimit);
+        scheduling.setJobStartTime(jobStartTime);
+        scheduling.setTotalPhysicalmemory(physicalMemory);
+        scheduling.setProjectName(projectName);
+        em.persist(scheduling);
+        schedulingId = scheduling.getSchedulingId();
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
index 8873094..3313f19 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
@@ -23,11 +23,18 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.Experiment;
+import org.apache.airavata.persistance.registry.jpa.model.ExperimentConfigData;
 import org.apache.airavata.schemas.gfac.BooleanParameterType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import javax.persistence.EntityManager;
 import java.util.List;
 
 public class ConfigDataResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(ConfigDataResource.class);
     private ExperimentResource experimentResource;
     private boolean airavataAutoSchedule;
     private boolean overrideManualParams;
@@ -67,26 +74,54 @@ public class ConfigDataResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for config data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for config data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for config data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for config data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        ExperimentConfigData existingConfig = em.find(ExperimentConfigData.class, experimentResource.getExpID());
+        em.close();
+
+        em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        ExperimentConfigData configData = new ExperimentConfigData();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        configData.setExpId(experimentResource.getExpID());
+        configData.setExperiment(experiment);
+        configData.setAiravataAutoSchedule(airavataAutoSchedule);
+        configData.setOverrideManualParams(overrideManualParams);
+        configData.setShareExp(shareExp);
+        if (existingConfig != null){
+            existingConfig.setExpId(experimentResource.getExpID());
+            existingConfig.setExperiment(experiment);
+            existingConfig.setAiravataAutoSchedule(airavataAutoSchedule);
+            existingConfig.setOverrideManualParams(overrideManualParams);
+            existingConfig.setShareExp(shareExp);
+            configData = em.merge(existingConfig);
+        }else {
+            em.merge(configData);
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
index 1bc87b5..f95ad0a 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
@@ -23,11 +23,22 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.DataTransferDetail;
+import org.apache.airavata.persistance.registry.jpa.model.Status;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
 import java.sql.Timestamp;
+import java.util.ArrayList;
 import java.util.List;
 
 public class DataTransferDetailResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(DataTransferDetailResource.class);
     private String transferId;
     private TaskDetailResource taskDetailResource;
     private Timestamp creationTime;
@@ -67,26 +78,122 @@ public class DataTransferDetailResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        switch (type){
+            case STATUS:
+                StatusResource statusResource = new StatusResource();
+                statusResource.setDataTransferDetail(this);
+                return statusResource;
+            default:
+                logger.error("Unsupported resource type for data transfer details data resource.", new UnsupportedOperationException());
+                throw new UnsupportedOperationException();
+        }
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        Query q;
+        QueryGenerator generator;
+        switch (type){
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.TRANSFER_ID, name);
+                q = generator.deleteQuery(em);
+                q.executeUpdate();
+                break;
+            default:
+                logger.error("Unsupported resource type for data transfer details resource.", new IllegalArgumentException());
+                break;
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        QueryGenerator generator;
+        Query q;
+        switch (type) {
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.TRANSFER_ID, name);
+                q = generator.selectQuery(em);
+                Status status = (Status)q.getSingleResult();
+                StatusResource statusResource = (StatusResource)Utils.getResource(ResourceType.STATUS, status);
+                em.getTransaction().commit();
+                em.close();
+                return statusResource;
+            default:
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported resource type for data transfer details resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported resource type for data transfer details resource.");
+        }
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        List<Resource> resourceList = new ArrayList<Resource>();
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        Query q;
+        QueryGenerator generator;
+        List results;
+        switch (type){
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.TRANSFER_ID, transferId);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        Status status = (Status) result;
+                        StatusResource statusResource =
+                                (StatusResource)Utils.getResource(ResourceType.STATUS, status);
+                        resourceList.add(statusResource);
+                    }
+                }
+                break;
+            default:
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported resource type for workflow node details resource.", new UnsupportedOperationException());
+                throw new UnsupportedOperationException();
+        }
+        em.getTransaction().commit();
+        em.close();
+        return resourceList;
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        DataTransferDetail existingDF = em.find(DataTransferDetail.class, transferId);
+        em.close();
+
+        em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        DataTransferDetail dataTransferDetail = new DataTransferDetail();
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        dataTransferDetail.setTransferId(transferId);
+        dataTransferDetail.setTask(taskDetail);
+        dataTransferDetail.setTaskId(taskDetailResource.getTaskId());
+        dataTransferDetail.setCreationTime(creationTime);
+        dataTransferDetail.setTransferDesc(transferDescription);
+        if (existingDF != null){
+            existingDF.setTransferId(transferId);
+            existingDF.setTask(taskDetail);
+            existingDF.setTaskId(taskDetailResource.getTaskId());
+            existingDF.setCreationTime(creationTime);
+            existingDF.setTransferDesc(transferDescription);
+            dataTransferDetail = em.merge(existingDF);
+        }else {
+            em.merge(dataTransferDetail);
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
index bdd5c50..f0ae728 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
@@ -32,7 +32,6 @@ import org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.model.*;
 import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
-import org.bouncycastle.jce.provider.JDKPSSSigner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
index 05e3d6e..246bb00 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
@@ -124,10 +124,10 @@ public class GatewayResource extends AbstractResource {
                         new ApplicationDescriptorResource();
                 applicationDescriptorResource.setGatewayName(gatewayName);
                 return applicationDescriptorResource;
-//            case EXPERIMENT_METADATA:
-//                ExperimentMetadataResource metadataResource =new ExperimentMetadataResource();
-//                metadataResource.setGateway(this);
-//                return metadataResource;
+            case EXPERIMENT:
+                ExperimentResource experimentResource =new ExperimentResource();
+                experimentResource.setGateway(this);
+                return experimentResource;
             case GATEWAY_WORKER:
                 WorkerResource workerResource = new WorkerResource();
                 workerResource.setGateway(this);
@@ -176,13 +176,12 @@ public class GatewayResource extends AbstractResource {
                 q = generator.deleteQuery(em);
                 q.executeUpdate();
                 break;
-//            case EXPERIMENT_METADATA:
-//                generator = new QueryGenerator(EXPERIMENT_METADATA);
-//                generator.setParameter(ExperimentMetadataConstants.EXPERIMENT_ID, name);
-//                generator.setParameter(ExperimentMetadataConstants.GATEWAY_NAME, gatewayName);
-//                q = generator.deleteQuery(em);
-//                q.executeUpdate();
-//                break;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                q = generator.deleteQuery(em);
+                q.executeUpdate();
+                break;
             case APPLICATION_DESCRIPTOR:
                 generator = new QueryGenerator(APPLICATION_DESCRIPTOR);
                 generator.setParameter(ApplicationDescriptorConstants.APPLICATION_DESC_ID, name);
@@ -244,17 +243,16 @@ public class GatewayResource extends AbstractResource {
                 em.getTransaction().commit();
                 em.close();
                 return hostDescriptorResource;
-//            case EXPERIMENT_METADATA:
-//                generator = new QueryGenerator(EXPERIMENT_METADATA);
-//                generator.setParameter(ExperimentMetadataConstants.EXPERIMENT_ID, name);
-////                generator.setParameter(ExperimentMetadataConstants.GATEWAY_NAME, gatewayName);
-//                q = generator.selectQuery(em);
-//                Experiment_Metadata experiment = (Experiment_Metadata)q.getSingleResult();
-//                ExperimentMetadataResource experimentResource =
-//                        (ExperimentMetadataResource)Utils.getResource(ResourceType.EXPERIMENT_METADATA, experiment);
-//                em.getTransaction().commit();
-//                em.close();
-//                return experimentResource;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                q = generator.selectQuery(em);
+                Experiment experiment = (Experiment)q.getSingleResult();
+                ExperimentResource experimentResource =
+                        (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                em.getTransaction().commit();
+                em.close();
+                return experimentResource;
             case SERVICE_DESCRIPTOR:
                 generator = new QueryGenerator(SERVICE_DESCRIPTOR);
                 generator.setParameter(ServiceDescriptorConstants.SERVICE_DESC_ID, name);
@@ -385,20 +383,20 @@ public class GatewayResource extends AbstractResource {
                     }
                 }
                 break;
-//            case EXPERIMENT_METADATA:
-//                generator = new QueryGenerator(EXPERIMENT_METADATA);
-//                generator.setParameter(ExperimentMetadataConstants.GATEWAY_NAME, gatewayName);
-//                q = generator.selectQuery(em);
-//                results = q.getResultList();
-//                if (results.size() != 0) {
-//                    for (Object result : results) {
-//                        Experiment_Metadata experiment = (Experiment_Metadata) result;
-//                        ExperimentMetadataResource experimentResource =
-//                                (ExperimentMetadataResource)Utils.getResource(ResourceType.EXPERIMENT_METADATA, experiment);
-//                        resourceList.add(experimentResource);
-//                    }
-//                }
-//                break;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.GATEWAY_NAME, gatewayName);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        Experiment experiment = (Experiment) result;
+                        ExperimentResource experimentResource =
+                                (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                        resourceList.add(experimentResource);
+                    }
+                }
+                break;
             case USER:
 		        generator = new QueryGenerator(USERS);
 		        q = generator.selectQuery(em);
@@ -409,16 +407,6 @@ public class GatewayResource extends AbstractResource {
 		        	resourceList.add(userResource);
 		        }
 		        break;
-//            case ORCHESTRATOR:
-//                generator = new QueryGenerator(ORCHESTRATOR);
-//                q = generator.selectQuery(em);
-//                for (Object o : q.getResultList()) {
-//                    Orchestrator orchData = (Orchestrator) o;
-//                    OrchestratorDataResource orchestratorDataResource =
-//                            (OrchestratorDataResource)Utils.getResource(ResourceType.ORCHESTRATOR, orchData);
-//                    resourceList.add(orchestratorDataResource);
-//                }
-//                break;
             default:
                 em.getTransaction().commit();
                 em.close();
@@ -491,16 +479,11 @@ public class GatewayResource extends AbstractResource {
                 Application_Descriptor existingAppDesc = em.find(Application_Descriptor.class, new Application_Descriptor_PK(gatewayName, name.toString()));
                 em.close();
                 return existingAppDesc != null;
-//            case EXPERIMENT_METADATA:
-//                em = ResourceUtils.getEntityManager();
-//                Experiment_Metadata existingExp = em.find(Experiment_Metadata.class, name.toString());
-//                em.close();
-//                return existingExp != null;
-//            case ORCHESTRATOR:
-//                em = ResourceUtils.getEntityManager();
-//                Orchestrator existingOrchestrator = em.find(Orchestrator.class, name.toString());
-//                em.close();
-//                return existingOrchestrator != null;
+            case EXPERIMENT:
+                em = ResourceUtils.getEntityManager();
+                Experiment existingExp = em.find(Experiment.class, name.toString());
+                em.close();
+                return existingExp != null;
             default:
                 logger.error("Unsupported resource type for gateway resource.", new IllegalArgumentException());
                 throw new IllegalArgumentException("Unsupported resource type for gateway resource.");
@@ -756,16 +739,10 @@ public class GatewayResource extends AbstractResource {
     	remove(ResourceType.PUBLISHED_WORKFLOW, workflowTemplateName);
     }
     
-//    public OrchestratorDataResource createOrchestratorData(String experimentID){
-//    	OrchestratorDataResource dataResource = (OrchestratorDataResource)create(ResourceType.ORCHESTRATOR);
-//    	dataResource.setExperimentID(experimentID);
-//    	return dataResource;
-//    }
-
-//    public ExperimentMetadataResource createBasicMetada (String experimentID){
-//        ExperimentMetadataResource metadataResource = (ExperimentMetadataResource)create(ResourceType.EXPERIMENT_METADATA);
-//        metadataResource.setExpID(experimentID);
-//        return metadataResource;
-//    }
+    public ExperimentResource createExperiment (String experimentID){
+        ExperimentResource metadataResource = (ExperimentResource)create(ResourceType.EXPERIMENT);
+        metadataResource.setExpID(experimentID);
+        return metadataResource;
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
index 8bab116..13a889e 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
@@ -23,11 +23,23 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.JobDetail;
+import org.apache.airavata.persistance.registry.jpa.model.JobDetails_PK;
+import org.apache.airavata.persistance.registry.jpa.model.Status;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
 import java.sql.Timestamp;
+import java.util.ArrayList;
 import java.util.List;
 
 public class JobDetailResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(JobDetailResource.class);
     private String jobId;
     private TaskDetailResource taskDetailResource;
     private String jobDescription;
@@ -67,26 +79,122 @@ public class JobDetailResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        switch (type){
+            case STATUS:
+                StatusResource statusResource = new StatusResource();
+                statusResource.setJobId(jobId);
+                return statusResource;
+            default:
+                logger.error("Unsupported resource type for job details data resource.", new UnsupportedOperationException());
+                throw new UnsupportedOperationException();
+        }
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        Query q;
+        QueryGenerator generator;
+        switch (type){
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.JOB_ID, name);
+                q = generator.deleteQuery(em);
+                q.executeUpdate();
+                break;
+            default:
+                logger.error("Unsupported resource type for job details resource.", new IllegalArgumentException());
+                break;
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        QueryGenerator generator;
+        Query q;
+        switch (type) {
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.JOB_ID, name);
+                q = generator.selectQuery(em);
+                Status status = (Status)q.getSingleResult();
+                StatusResource statusResource = (StatusResource)Utils.getResource(ResourceType.STATUS, status);
+                em.getTransaction().commit();
+                em.close();
+                return statusResource;
+            default:
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported resource type for job details resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported resource type for job details resource.");
+        }
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        List<Resource> resourceList = new ArrayList<Resource>();
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        Query q;
+        QueryGenerator generator;
+        List results;
+        switch (type){
+            case STATUS:
+                generator = new QueryGenerator(STATUS);
+                generator.setParameter(StatusConstants.JOB_ID, jobId);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        Status status = (Status) result;
+                        StatusResource statusResource =
+                                (StatusResource)Utils.getResource(ResourceType.STATUS, status);
+                        resourceList.add(statusResource);
+                    }
+                }
+                break;
+            default:
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported resource type for workflow node details resource.", new UnsupportedOperationException());
+                throw new UnsupportedOperationException();
+        }
+        em.getTransaction().commit();
+        em.close();
+        return resourceList;
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        JobDetail existingJobDetail = em.find(JobDetail.class, new JobDetails_PK(jobId, taskDetailResource.getTaskId()));
+        em.close();
+
+        em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        JobDetail jobDetail = new JobDetail();
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        jobDetail.setJobId(jobId);
+        jobDetail.setTask(taskDetail);
+        jobDetail.setTaskId(taskDetailResource.getTaskId());
+        jobDetail.setCreationTime(creationTime);
+        jobDetail.setJobDescription(jobDescription);
+        if (existingJobDetail != null){
+            existingJobDetail.setJobId(jobId);
+            existingJobDetail.setTask(taskDetail);
+            existingJobDetail.setTaskId(taskDetailResource.getTaskId());
+            existingJobDetail.setCreationTime(creationTime);
+            existingJobDetail.setJobDescription(jobDescription);
+            jobDetail = em.merge(existingJobDetail);
+        }else {
+            em.merge(jobDetail);
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
index fa188ef..d592512 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
@@ -64,16 +64,16 @@ public class ProjectResource extends AbstractResource {
      * @return child resource
      */
     public Resource create(ResourceType type) {
-//        if (type == ResourceType.EXPERIMENT_METADATA) {
-//            ExperimentMetadataResource experimentResource = new ExperimentMetadataResource();
-//            experimentResource.setGateway(getGateway());
-//            experimentResource.setExecutionUser(getWorker().getUser());
-//            experimentResource.setProject(this);
-//            return experimentResource;
-//        } else {
+        if (type == ResourceType.EXPERIMENT) {
+            ExperimentResource experimentResource = new ExperimentResource();
+            experimentResource.setGateway(getGateway());
+            experimentResource.setWorker(worker);
+            experimentResource.setProject(this);
+            return experimentResource;
+        } else {
             logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
             throw new IllegalArgumentException("Unsupported resource type for project resource.");
-//        }
+        }
     }
 
     /**
@@ -82,19 +82,19 @@ public class ProjectResource extends AbstractResource {
      * @param name child resource name
      */
     public void remove(ResourceType type, Object name) {
-//        EntityManager em = ResourceUtils.getEntityManager();
-//        em.getTransaction().begin();
-//        if (type == ResourceType.EXPERIMENT_METADATA) {
-//        	QueryGenerator generator = new QueryGenerator(EXPERIMENT_METADATA);
-//        	generator.setParameter(ExperimentMetadataConstants.EXPERIMENT_ID, name);
-//        	Query q = generator.deleteQuery(em);
-//        	q.executeUpdate();
-//        }else {
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        if (type == ResourceType.EXPERIMENT) {
+        	QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+        	generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+        	Query q = generator.deleteQuery(em);
+        	q.executeUpdate();
+        }else {
             logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
             throw new IllegalArgumentException("Unsupported resource type for project resource.");
-//        }
-//        em.getTransaction().commit();
-//        em.close();
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 
     /**
@@ -104,49 +104,23 @@ public class ProjectResource extends AbstractResource {
      * @return child resource
      */
     public Resource get(ResourceType type, Object name) {
-//        if (type == ResourceType.EXPERIMENT_METADATA) {
-//            EntityManager em = ResourceUtils.getEntityManager();
-//            em.getTransaction().begin();
-//        	QueryGenerator generator = new QueryGenerator(EXPERIMENT_METADATA);
-//        	generator.setParameter(ExperimentMetadataConstants.EXPERIMENT_ID, name);
-//        	Query q = generator.selectQuery(em);
-//            Experiment_Metadata experiment = (Experiment_Metadata) q.getSingleResult();
-//            ExperimentMetadataResource experimentResource = (ExperimentMetadataResource)
-//                    Utils.getResource(ResourceType.EXPERIMENT_METADATA, experiment);
-//            em.getTransaction().commit();
-//            em.close();
-//            return experimentResource;
-//        }else{
+        if (type == ResourceType.EXPERIMENT) {
+            EntityManager em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+        	QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+        	generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+        	Query q = generator.selectQuery(em);
+            Experiment experiment = (Experiment) q.getSingleResult();
+            ExperimentResource experimentResource = (ExperimentResource)
+                    Utils.getResource(ResourceType.EXPERIMENT, experiment);
+            em.getTransaction().commit();
+            em.close();
+            return experimentResource;
+        }else{
             logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
             throw new IllegalArgumentException("Unsupported resource type for project resource.");
-//        }
-
-    }
-
-    /**
-     *
-     * @param keys project name
-     * @return project resource
-     */
-    public List<Resource> populate(Object[] keys) {
-        List<Resource> list = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator queryGenerator = new QueryGenerator(PROJECT);
-        queryGenerator.setParameter(ProjectConstants.PROJECT_NAME, keys[0]);
-        Query q = queryGenerator.selectQuery(em);
-        List<?> resultList = q.getResultList();
-        if (resultList.size() != 0) {
-            for (Object result : resultList) {
-                Project project = (Project) result;
-                ProjectResource projectResource = (ProjectResource)
-                        Utils.getResource(ResourceType.PROJECT, project);
-                list.add(projectResource);
-            }
         }
-        em.getTransaction().commit();
-        em.close();
-        return list;
+
     }
 
     /**
@@ -157,28 +131,28 @@ public class ProjectResource extends AbstractResource {
     public List<Resource> get(ResourceType type) {
         List<Resource> resourceList = new ArrayList<Resource>();
 
-//        if (type == ResourceType.EXPERIMENT_METADATA) {
-//            EntityManager em = ResourceUtils.getEntityManager();
-//            em.getTransaction().begin();
-//        	QueryGenerator generator = new QueryGenerator(EXPERIMENT_METADATA);
-//        	generator.setParameter(ExperimentMetadataConstants.PROJECT_NAME, name);
-//        	Query q = generator.selectQuery(em);
-//            List<?> results = q.getResultList();
-//            if (results.size() != 0) {
-//                for (Object result : results) {
-//                    Experiment_Metadata experiment = (Experiment_Metadata) result;
-//                    ExperimentMetadataResource experimentResource = (ExperimentMetadataResource)
-//                            Utils.getResource(ResourceType.EXPERIMENT_METADATA, experiment);
-//                    resourceList.add(experimentResource);
-//                }
-//            }
-//            em.getTransaction().commit();
-//            em.close();
-//        } else {
+        if (type == ResourceType.EXPERIMENT) {
+            EntityManager em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+        	QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+        	generator.setParameter(ExperimentConstants.PROJECT_NAME, name);
+        	Query q = generator.selectQuery(em);
+            List<?> results = q.getResultList();
+            if (results.size() != 0) {
+                for (Object result : results) {
+                    Experiment experiment = (Experiment) result;
+                    ExperimentResource experimentResource = (ExperimentResource)
+                            Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                    resourceList.add(experimentResource);
+                }
+            }
+            em.getTransaction().commit();
+            em.close();
+        } else {
             logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
             throw new IllegalArgumentException("Unsupported resource type for project resource.");
-//        }
-//        return resourceList;
+        }
+        return resourceList;
     }
 
     /**
@@ -265,8 +239,7 @@ public class ProjectResource extends AbstractResource {
      * @return whether the experiment exist
      */
     public boolean isExperimentExists(String experimentId){
-//		return isExists(ResourceType.EXPERIMENT_METADATA, experimentId);
-        return true;
+		return isExists(ResourceType.EXPERIMENT, experimentId);
 	}
 
     /**
@@ -274,40 +247,40 @@ public class ProjectResource extends AbstractResource {
      * @param experimentId experiment ID
      * @return  experiment resource
      */
-//    public ExperimentMetadataResource createExperiment(String experimentId){
-//		ExperimentMetadataResource experimentResource = (ExperimentMetadataResource)create(ResourceType.EXPERIMENT_METADATA);
-//		experimentResource.setExpID(experimentId);
-//		return experimentResource;
-//	}
+    public ExperimentResource createExperiment(String experimentId){
+		ExperimentResource experimentResource = (ExperimentResource)create(ResourceType.EXPERIMENT);
+		experimentResource.setExpID(experimentId);
+		return experimentResource;
+	}
 
     /**
      *
      * @param experimentId experiment ID
      * @return experiment resource
      */
-//	public ExperimentMetadataResource getExperiment(String experimentId){
-//		return (ExperimentMetadataResource)get(ResourceType.EXPERIMENT_METADATA,experimentId);
-//	}
+	public ExperimentResource getExperiment(String experimentId){
+		return (ExperimentResource)get(ResourceType.EXPERIMENT,experimentId);
+	}
 
     /**
      *
      * @return  list of experiments
      */
-//    public List<ExperimentMetadataResource> getExperiments(){
-//		List<Resource> list = get(ResourceType.EXPERIMENT_METADATA);
-//		List<ExperimentMetadataResource> result=new ArrayList<ExperimentMetadataResource>();
-//		for (Resource resource : list) {
-//			result.add((ExperimentMetadataResource) resource);
-//		}
-//		return result;
-//	}
+    public List<ExperimentResource> getExperiments(){
+		List<Resource> list = get(ResourceType.EXPERIMENT);
+		List<ExperimentResource> result=new ArrayList<ExperimentResource>();
+		for (Resource resource : list) {
+			result.add((ExperimentResource) resource);
+		}
+		return result;
+	}
 
     /**
      *
      * @param experimentId experiment ID
      */
     public void removeExperiment(String experimentId){
-//		remove(ResourceType.EXPERIMENT_METADATA, experimentId);
+		remove(ResourceType.EXPERIMENT, experimentId);
 	}
 
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
index 830db7c..3a89e4e 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
@@ -23,10 +23,18 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.Experiment;
+import org.apache.airavata.persistance.registry.jpa.model.QosParam;
+import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
 import java.util.List;
 
 public class QosParamResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(QosParamResource.class);
     private int  qosId;
     private ExperimentResource experimentResource;
     private TaskDetailResource taskDetailResource;
@@ -84,26 +92,45 @@ public class QosParamResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for qos params resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for qos params resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for qos params resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for qos params resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        QosParam qosParam = new QosParam();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        qosParam.setExpId(experimentResource.getExpID());
+        qosParam.setExperiment(experiment);
+        qosParam.setTaskId(taskDetailResource.getTaskId());
+        qosParam.setTask(taskDetail);
+        qosParam.setStartExecutionAt(startExecutionAt);
+        qosParam.setExecuteBefore(executeBefore);
+        qosParam.setNoOfRetries(noOfRetries);
+        em.persist(qosParam);
+        qosId = qosParam.getQosId();
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
index 2101ecb..327e5e0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
@@ -23,11 +23,17 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 
 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.model.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import javax.persistence.EntityManager;
 import java.sql.Timestamp;
 import java.util.List;
 
 public class StatusResource extends AbstractResource {
+    private static final Logger logger = LoggerFactory.getLogger(StatusResource.class);
     private int statusId;
     private ExperimentResource experimentResource;
     private WorkflowNodeDetailResource workflowNodeDetail;
@@ -112,26 +118,73 @@ public class StatusResource extends AbstractResource {
 
     @Override
     public Resource create(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for status resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void remove(ResourceType type, Object name) {
-
+        logger.error("Unsupported resource type for status resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public Resource get(ResourceType type, Object name) {
-        return null;
+        logger.error("Unsupported resource type for status resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public List<Resource> get(ResourceType type) {
-        return null;
+        logger.error("Unsupported resource type for status resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
     }
 
     @Override
     public void save() {
-
+        EntityManager em = ResourceUtils.getEntityManager();
+        Status existingStatus = em.find(Status.class, statusId);
+        em.close();
+
+        em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        Status status = new Status();
+        Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
+        TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
+        WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetail.getNodeInstanceId());
+        DataTransferDetail transferDetail = em.find(DataTransferDetail.class, dataTransferDetail.getTransferId());
+        status.setStatusId(statusId);
+        status.setExperiment(experiment);
+        status.setTask(taskDetail);
+        status.setNode(nodeDetail);
+        status.setTransferDetail(transferDetail);
+        status.setJobId(jobId);
+        status.setExpId(experimentResource.getExpID());
+        status.setTaskId(taskDetailResource.getTaskId());
+        status.setNodeId(workflowNodeDetail.getNodeInstanceId());
+        status.setTransferId(dataTransferDetail.getTransferId());
+        status.setState(state);
+        status.setStatusUpdateTime(statusUpdateTime);
+        status.setStatusType(statusType);
+        if (existingStatus != null){
+            existingStatus.setStatusId(statusId);
+            existingStatus.setExperiment(experiment);
+            existingStatus.setTask(taskDetail);
+            existingStatus.setNode(nodeDetail);
+            existingStatus.setTransferDetail(transferDetail);
+            existingStatus.setJobId(jobId);
+            existingStatus.setExpId(experimentResource.getExpID());
+            existingStatus.setTaskId(taskDetailResource.getTaskId());
+            existingStatus.setNodeId(workflowNodeDetail.getNodeInstanceId());
+            existingStatus.setTransferId(dataTransferDetail.getTransferId());
+            existingStatus.setState(state);
+            existingStatus.setStatusUpdateTime(statusUpdateTime);
+            existingStatus.setStatusType(statusType);
+            status = em.merge(existingStatus);
+        }else {
+            em.merge(status);
+        }
+        em.getTransaction().commit();
+        em.close();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/136cfeab/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
index c285876..7c9d2af 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
@@ -76,6 +76,12 @@ public class WorkerResource extends AbstractResource {
 				userWorkflowResource.setGateway(gateway);
 				result=userWorkflowResource;
                 break;
+            case EXPERIMENT:
+                ExperimentResource experimentResource = new ExperimentResource();
+                experimentResource.setWorker(this);
+                experimentResource.setGateway(gateway);
+                result = experimentResource;
+                break;
 			default:
                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
                 throw new IllegalArgumentException("Unsupported resource type for worker resource.");
@@ -109,6 +115,12 @@ public class WorkerResource extends AbstractResource {
                 q = generator.deleteQuery(em);
 	            q.executeUpdate();
 	            break;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                q = generator.deleteQuery(em);
+                q.executeUpdate();
+                break;
 			default:
                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
                 break;
@@ -146,6 +158,13 @@ public class WorkerResource extends AbstractResource {
 	            User_Workflow userWorkflow = (User_Workflow) q.getSingleResult();
                 result= Utils.getResource(ResourceType.USER_WORKFLOW, userWorkflow);
 	            break;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                q = generator.selectQuery(em);
+                Experiment experiment = (Experiment) q.getSingleResult();
+                result= Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                break;
 			default:
                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
                 break;
@@ -231,6 +250,16 @@ public class WorkerResource extends AbstractResource {
 		            result.add(userWorkflowResource);
 	            }
 	            break;
+            case EXPERIMENT:
+                generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXECUTION_USER, getUser());
+                q = generator.selectQuery(em);
+                for (Object o : q.getResultList()) {
+                    Experiment experiment = (Experiment) o;
+                    ExperimentResource experimentResource = (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                    result.add(experimentResource);
+                }
+                break;
 			default:
                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
                 break;
@@ -414,9 +443,9 @@ public class WorkerResource extends AbstractResource {
      * @param name experiment name
      * @return experiment resource
      */
-//    public ExperimentMetadataResource getExperiment(String name){
-//		return (ExperimentMetadataResource)get(ResourceType.EXPERIMENT_METADATA, name);
-//	}
+    public ExperimentResource getExperiment(String name){
+		return (ExperimentResource)get(ResourceType.EXPERIMENT, name);
+	}
 //
 //    public GFacJobDataResource getGFacJob(String jobId){
 //    	return (GFacJobDataResource)get(ResourceType.GFAC_JOB_DATA,jobId);
@@ -426,14 +455,14 @@ public class WorkerResource extends AbstractResource {
      *
      * @return list of experiments for the user
      */
-//	public List<ExperimentMetadataResource> getExperiments(){
-//		List<ExperimentMetadataResource> result=new ArrayList<ExperimentMetadataResource>();
-//		List<Resource> list = get(ResourceType.EXPERIMENT_METADATA);
-//		for (Resource resource : list) {
-//			result.add((ExperimentMetadataResource) resource);
-//		}
-//		return result;
-//	}
+	public List<ExperimentResource> getExperiments(){
+		List<ExperimentResource> result=new ArrayList<ExperimentResource>();
+		List<Resource> list = get(ResourceType.EXPERIMENT);
+		for (Resource resource : list) {
+			result.add((ExperimentResource) resource);
+		}
+		return result;
+	}
 
     /**
      *