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 2015/06/05 18:25:58 UTC

[08/30] airavata git commit: registry refactoring changes

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputExperimentCatResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputExperimentCatResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputExperimentCatResource.java
deleted file mode 100644
index 6ea26ce..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputExperimentCatResource.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-
-package org.apache.airavata.registry.core.experiment.catalog.resources;
-
-import org.apache.airavata.registry.core.experiment.catalog.ExpCatResourceUtils;
-import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
-import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
-import org.apache.airavata.registry.core.experiment.catalog.model.Experiment_Output;
-import org.apache.airavata.registry.core.experiment.catalog.model.Experiment_Output_PK;
-import org.apache.airavata.registry.cpi.RegistryException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.persistence.EntityManager;
-import java.util.List;
-
-public class ExperimentOutputExperimentCatResource extends AbstractExperimentCatResource {
-    private static final Logger logger = LoggerFactory.getLogger(ExperimentOutputExperimentCatResource.class);
-
-    private String experimentId;
-    private String experimentKey;
-    private String value;
-    private String dataType;
-    private boolean isRequired;
-    private boolean dataMovement;
-    private String dataNameLocation;
-    private boolean requiredToCMD;
-    private String searchQuery;
-    private String appArgument;
-
-    public String getSearchQuery() {
-        return searchQuery;
-    }
-
-    public void setSearchQuery(String searchQuery) {
-        this.searchQuery = searchQuery;
-    }
-
-    public String getAppArgument() {
-        return appArgument;
-    }
-
-    public void setAppArgument(String appArgument) {
-        this.appArgument = appArgument;
-    }
-
-    public boolean getRequiredToCMD() {
-        return requiredToCMD;
-    }
-
-    public void setRequiredToCMD(boolean requiredToCMD) {
-        this.requiredToCMD = requiredToCMD;
-    }
-
-    public boolean getRequired() {
-        return isRequired;
-    }
-
-    public void setRequired(boolean required) {
-        this.isRequired = required;
-    }
-
-    public boolean isDataMovement() {
-        return dataMovement;
-    }
-
-    public void setDataMovement(boolean dataMovement) {
-        this.dataMovement = dataMovement;
-    }
-
-    public String getDataNameLocation() {
-        return dataNameLocation;
-    }
-
-    public void setDataNameLocation(String dataNameLocation) {
-        this.dataNameLocation = dataNameLocation;
-    }
-
-    public String getExperimentKey() {
-        return experimentKey;
-    }
-
-    public void setExperimentKey(String experimentKey) {
-        this.experimentKey = experimentKey;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getExperimentId() {
-        return experimentId;
-    }
-
-    public void setExperimentId(String experimentId) {
-        this.experimentId = experimentId;
-    }
-
-    public String getDataType() {
-        return dataType;
-    }
-
-    public void setDataType(String dataType) {
-        this.dataType = dataType;
-    }
-
-    public ExperimentCatResource create(ResourceType type)  throws RegistryException {
-        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
-        throw new UnsupportedOperationException();
-    }
-
-    public void remove(ResourceType type, Object name)  throws RegistryException{
-        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
-        throw new UnsupportedOperationException();
-    }
-
-    public ExperimentCatResource get(ResourceType type, Object name)  throws RegistryException{
-        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
-        throw new UnsupportedOperationException();
-    }
-
-    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
-        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
-        throw new UnsupportedOperationException();
-    }
-
-    public void save() throws RegistryException {
-        EntityManager em = null;
-        try {
-            em = ExpCatResourceUtils.getEntityManager();
-            Experiment_Output existingOutput = em.find(Experiment_Output.class, new Experiment_Output_PK(experimentId, experimentKey));
-            em.close();
-
-            em = ExpCatResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            Experiment_Output exOutput = new Experiment_Output();
-            exOutput.setEx_key(experimentKey);
-            exOutput.setExperiment_id(experimentId);
-            if (value != null){
-                exOutput.setValue(value.toCharArray());
-            }
-            exOutput.setDataType(dataType);
-            exOutput.setRequired(isRequired);
-            exOutput.setRequiredToCMD(requiredToCMD);
-            exOutput.setDataMovement(dataMovement);
-            exOutput.setDataNameLocation(dataNameLocation);
-            exOutput.setApplicationArgument(appArgument);
-            exOutput.setSearchQuery(searchQuery);
-
-            if (existingOutput != null) {
-                existingOutput.setEx_key(experimentKey);
-                existingOutput.setExperiment_id(experimentId);
-                if (value != null){
-                    existingOutput.setValue(value.toCharArray());
-                }
-                existingOutput.setDataType(dataType);
-                existingOutput.setRequired(isRequired);
-                existingOutput.setRequiredToCMD(requiredToCMD);
-                existingOutput.setDataMovement(dataMovement);
-                existingOutput.setDataNameLocation(dataNameLocation);
-                existingOutput.setApplicationArgument(appArgument);
-                existingOutput.setSearchQuery(searchQuery);
-                exOutput = em.merge(existingOutput);
-            } else {
-                em.persist(exOutput);
-            }
-            em.getTransaction().commit();
-            em.close();
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputResource.java
new file mode 100644
index 0000000..d03bdd9
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentOutputResource.java
@@ -0,0 +1,204 @@
+/*
+*
+* 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.registry.core.experiment.catalog.resources;
+
+import org.apache.airavata.registry.core.experiment.catalog.ExpCatResourceUtils;
+import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
+import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
+import org.apache.airavata.registry.core.experiment.catalog.model.Experiment_Output;
+import org.apache.airavata.registry.core.experiment.catalog.model.Experiment_Output_PK;
+import org.apache.airavata.registry.cpi.RegistryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+
+public class ExperimentOutputResource extends AbstractExpCatResource {
+    private static final Logger logger = LoggerFactory.getLogger(ExperimentOutputResource.class);
+
+    private String experimentId;
+    private String experimentKey;
+    private String value;
+    private String dataType;
+    private boolean isRequired;
+    private boolean dataMovement;
+    private String dataNameLocation;
+    private boolean requiredToCMD;
+    private String searchQuery;
+    private String appArgument;
+
+    public String getSearchQuery() {
+        return searchQuery;
+    }
+
+    public void setSearchQuery(String searchQuery) {
+        this.searchQuery = searchQuery;
+    }
+
+    public String getAppArgument() {
+        return appArgument;
+    }
+
+    public void setAppArgument(String appArgument) {
+        this.appArgument = appArgument;
+    }
+
+    public boolean getRequiredToCMD() {
+        return requiredToCMD;
+    }
+
+    public void setRequiredToCMD(boolean requiredToCMD) {
+        this.requiredToCMD = requiredToCMD;
+    }
+
+    public boolean getRequired() {
+        return isRequired;
+    }
+
+    public void setRequired(boolean required) {
+        this.isRequired = required;
+    }
+
+    public boolean isDataMovement() {
+        return dataMovement;
+    }
+
+    public void setDataMovement(boolean dataMovement) {
+        this.dataMovement = dataMovement;
+    }
+
+    public String getDataNameLocation() {
+        return dataNameLocation;
+    }
+
+    public void setDataNameLocation(String dataNameLocation) {
+        this.dataNameLocation = dataNameLocation;
+    }
+
+    public String getExperimentKey() {
+        return experimentKey;
+    }
+
+    public void setExperimentKey(String experimentKey) {
+        this.experimentKey = experimentKey;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public ExperimentCatResource create(ResourceType type)  throws RegistryException {
+        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
+    }
+
+    public void remove(ResourceType type, Object name)  throws RegistryException{
+        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
+    }
+
+    public ExperimentCatResource get(ResourceType type, Object name)  throws RegistryException{
+        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
+    }
+
+    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
+        logger.error("Unsupported resource type for experiment output data resource.", new UnsupportedOperationException());
+        throw new UnsupportedOperationException();
+    }
+
+    public void save() throws RegistryException {
+        EntityManager em = null;
+        try {
+            em = ExpCatResourceUtils.getEntityManager();
+            Experiment_Output existingOutput = em.find(Experiment_Output.class, new Experiment_Output_PK(experimentId, experimentKey));
+            em.close();
+
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Experiment_Output exOutput = new Experiment_Output();
+            exOutput.setEx_key(experimentKey);
+            exOutput.setExperiment_id(experimentId);
+            if (value != null){
+                exOutput.setValue(value.toCharArray());
+            }
+            exOutput.setDataType(dataType);
+            exOutput.setRequired(isRequired);
+            exOutput.setRequiredToCMD(requiredToCMD);
+            exOutput.setDataMovement(dataMovement);
+            exOutput.setDataNameLocation(dataNameLocation);
+            exOutput.setApplicationArgument(appArgument);
+            exOutput.setSearchQuery(searchQuery);
+
+            if (existingOutput != null) {
+                existingOutput.setEx_key(experimentKey);
+                existingOutput.setExperiment_id(experimentId);
+                if (value != null){
+                    existingOutput.setValue(value.toCharArray());
+                }
+                existingOutput.setDataType(dataType);
+                existingOutput.setRequired(isRequired);
+                existingOutput.setRequiredToCMD(requiredToCMD);
+                existingOutput.setDataMovement(dataMovement);
+                existingOutput.setDataNameLocation(dataNameLocation);
+                existingOutput.setApplicationArgument(appArgument);
+                existingOutput.setSearchQuery(searchQuery);
+                exOutput = em.merge(existingOutput);
+            } else {
+                em.persist(exOutput);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentResource.java
new file mode 100644
index 0000000..7755f4f
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentResource.java
@@ -0,0 +1,831 @@
+/*
+*
+* 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.registry.core.experiment.catalog.resources;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.airavata.registry.core.experiment.catalog.ExpCatResourceUtils;
+import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
+import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
+import org.apache.airavata.registry.core.experiment.catalog.model.*;
+import org.apache.airavata.registry.core.experiment.catalog.utils.QueryGenerator;
+import org.apache.airavata.registry.cpi.RegistryException;
+import org.apache.airavata.registry.cpi.utils.StatusType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ExperimentResource extends AbstractExpCatResource {
+    private static final Logger logger = LoggerFactory.getLogger(ExperimentResource.class);
+//    private WorkerResource worker;
+    private String executionUser;
+    private String expID;
+    private Timestamp creationTime;
+    private String gatewayId;
+    private String projectId;
+    private String expName;
+    private String description;
+    private String applicationId;
+    private String applicationVersion;
+    private String workflowTemplateId;
+    private String workflowTemplateVersion;
+    private String workflowExecutionId;
+    private boolean enableEmailNotifications;
+    private String gatewayExecutionId;
+    private List<ExperimentInputResource> experimentInputResources;
+    private List<ExperimentOutputResource> experimentOutputputResources;
+    private ComputationSchedulingResource computationSchedulingResource;
+    private ConfigDataResource userConfigDataResource;
+    private List<WorkflowNodeDetailResource> workflowNodeDetailResourceList;
+    private List<StatusResource> stateChangeList;
+    private List<ErrorDetailResource> errorDetailList;
+    private StatusResource experimentStatus;
+    private List<NotificationEmailResource> emailResourceList;
+
+    /**
+     *
+     * @return  experiment ID
+     */
+    public String getExpID() {
+        return expID;
+    }
+
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public String getExpName() {
+        return expName;
+    }
+
+    public void setExpName(String expName) {
+        this.expName = expName;
+    }
+
+    public String getApplicationId() {
+        return applicationId;
+    }
+
+    public void setApplicationId(String applicationId) {
+        this.applicationId = applicationId;
+    }
+
+    public String getApplicationVersion() {
+        return applicationVersion;
+    }
+
+    public void setApplicationVersion(String applicationVersion) {
+        this.applicationVersion = applicationVersion;
+    }
+
+    public String getWorkflowTemplateId() {
+        return workflowTemplateId;
+    }
+
+    public void setWorkflowTemplateId(String workflowTemplateId) {
+        this.workflowTemplateId = workflowTemplateId;
+    }
+
+    public String getWorkflowTemplateVersion() {
+        return workflowTemplateVersion;
+    }
+
+    public void setWorkflowTemplateVersion(String workflowTemplateVersion) {
+        this.workflowTemplateVersion = workflowTemplateVersion;
+    }
+
+    public String getWorkflowExecutionId() {
+        return workflowExecutionId;
+    }
+
+    public void setWorkflowExecutionId(String workflowExecutionId) {
+        this.workflowExecutionId = workflowExecutionId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public boolean isEnableEmailNotifications() {
+        return enableEmailNotifications;
+    }
+
+    public void setEnableEmailNotifications(boolean enableEmailNotifications) {
+        this.enableEmailNotifications = enableEmailNotifications;
+    }
+
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
+    }
+
+    public void setGatewayExecutionId(String gatewayExecutionId) {
+        this.gatewayExecutionId = gatewayExecutionId;
+    }
+
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public List<ExperimentInputResource> getExperimentInputResources() {
+        return experimentInputResources;
+    }
+
+    public void setExperimentInputResources(List<ExperimentInputResource> experimentInputResources) {
+        this.experimentInputResources = experimentInputResources;
+    }
+
+    public List<ExperimentOutputResource> getExperimentOutputputResources() {
+        return experimentOutputputResources;
+    }
+
+    public void setExperimentOutputputResources(List<ExperimentOutputResource> experimentOutputputResources) {
+        this.experimentOutputputResources = experimentOutputputResources;
+    }
+
+    public ComputationSchedulingResource getComputationSchedulingResource() {
+        return computationSchedulingResource;
+    }
+
+    public void setComputationSchedulingResource(ComputationSchedulingResource computationSchedulingResource) {
+        this.computationSchedulingResource = computationSchedulingResource;
+    }
+
+    public ConfigDataResource getUserConfigDataResource() {
+        return userConfigDataResource;
+    }
+
+    public void setUserConfigDataResource(ConfigDataResource userConfigDataResource) {
+        this.userConfigDataResource = userConfigDataResource;
+    }
+
+    public List<WorkflowNodeDetailResource> getWorkflowNodeDetailResourceList() {
+        return workflowNodeDetailResourceList;
+    }
+
+    public void setWorkflowNodeDetailResourceList(List<WorkflowNodeDetailResource> workflowNodeDetailResourceList) {
+        this.workflowNodeDetailResourceList = workflowNodeDetailResourceList;
+    }
+
+    public List<StatusResource> getStateChangeList() {
+        return stateChangeList;
+    }
+
+    public void setStateChangeList(List<StatusResource> stateChangeList) {
+        this.stateChangeList = stateChangeList;
+    }
+
+    public List<ErrorDetailResource> getErrorDetailList() {
+        return errorDetailList;
+    }
+
+    public void setErrorDetailList(List<ErrorDetailResource> errorDetailList) {
+        this.errorDetailList = errorDetailList;
+    }
+
+    public void setExperimentStatus(StatusResource experimentStatus) {
+        this.experimentStatus = experimentStatus;
+    }
+
+    public List<NotificationEmailResource> getEmailResourceList() {
+        return emailResourceList;
+    }
+
+    public void setEmailResourceList(List<NotificationEmailResource> emailResourceList) {
+        this.emailResourceList = emailResourceList;
+    }
+
+
+    /**
+     * Since experiments are at the leaf level, this method is not
+     * valid for an experiment
+     * @param type  child resource types
+     * @return UnsupportedOperationException
+     */
+    public ExperimentCatResource create(ResourceType type) throws RegistryException {
+    	switch (type){
+	        case EXPERIMENT_INPUT:
+	        	ExperimentInputResource inputResource = new ExperimentInputResource();
+	            inputResource.setExperimentId(expID);
+	            return inputResource;
+            case EXPERIMENT_OUTPUT:
+                ExperimentOutputResource experimentOutputResource = new ExperimentOutputResource();
+                experimentOutputResource.setExperimentId(expID);
+                return experimentOutputResource;
+            case NOTIFICATION_EMAIL:
+                NotificationEmailResource emailResource = new NotificationEmailResource();
+                emailResource.setExperimentId(expID);
+                return emailResource;
+            case WORKFLOW_NODE_DETAIL:
+                WorkflowNodeDetailResource nodeDetailResource = new WorkflowNodeDetailResource();
+                nodeDetailResource.setExperimentId(expID);
+                return nodeDetailResource;
+            case ERROR_DETAIL:
+                ErrorDetailResource errorDetailResource = new ErrorDetailResource();
+                errorDetailResource.setExperimentId(expID);
+                return errorDetailResource;
+            case STATUS:
+                StatusResource statusResource = new StatusResource();
+                statusResource.setExperimentId(expID);
+                return statusResource;
+            case CONFIG_DATA:
+                ConfigDataResource configDataResource = new ConfigDataResource();
+                configDataResource.setExperimentId(expID);
+                return configDataResource;
+            case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
+                schedulingResource.setExperimentId(expID);
+                return schedulingResource;
+            case ADVANCE_INPUT_DATA_HANDLING:
+                AdvanceInputDataHandlingResource dataHandlingResource = new AdvanceInputDataHandlingResource();
+                dataHandlingResource.setExperimentId(expID);
+                return dataHandlingResource;
+            case ADVANCE_OUTPUT_DATA_HANDLING:
+                AdvancedOutputDataHandlingResource outputDataHandlingResource = new AdvancedOutputDataHandlingResource();
+                outputDataHandlingResource.setExperimentId(expID);
+                return outputDataHandlingResource;
+            case QOS_PARAM:
+                QosParamResource qosParamResource = new QosParamResource();
+                qosParamResource.setExperimentId(expID);
+                return qosParamResource;
+	        default:
+                logger.error("Unsupported resource type for experiment resource.", new IllegalArgumentException());
+	            throw new IllegalArgumentException("Unsupported resource type for experiment resource.");
+	    }
+    }
+
+    /**
+     *
+     * @param type  child resource types
+     * @param name name of the child resource
+     * @return UnsupportedOperationException
+     */
+    public void remove(ResourceType type, Object name) throws RegistryException {
+        EntityManager em = null;
+        try {
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            QueryGenerator generator;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case NOTIFICATION_EMAIL:
+                    generator = new QueryGenerator(NOTIFICATION_EMAIL);
+                    generator.setParameter(NotificationEmailConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(StatusConstants.STATUS_TYPE, StatusType.EXPERIMENT.toString());
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case CONFIG_DATA:
+                    generator = new QueryGenerator(CONFIG_DATA);
+                    generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case QOS_PARAM:
+                    generator = new QueryGenerator(QOS_PARAMS);
+                    generator.setParameter(QosParamsConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                default:
+                    logger.error("Unsupported resource type for experiment resource.", new IllegalArgumentException());
+                    break;
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    /**
+     *
+     * @param type  child resource types
+     * @param name name of the child resource
+     * @return UnsupportedOperationException
+     */
+    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException {
+        EntityManager em = null;
+        try {
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            QueryGenerator generator;
+            Query q;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Experiment_Input experimentInput = (Experiment_Input) q.getSingleResult();
+                    ExperimentInputResource inputResource = (ExperimentInputResource) Utils.getResource(ResourceType.EXPERIMENT_INPUT, experimentInput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return inputResource;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Experiment_Output experimentOutput = (Experiment_Output) q.getSingleResult();
+                    ExperimentOutputResource outputResource = (ExperimentOutputResource) Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, experimentOutput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return outputResource;
+                case NOTIFICATION_EMAIL:
+                    generator = new QueryGenerator(NOTIFICATION_EMAIL);
+                    generator.setParameter(NotificationEmailConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Notification_Email notificationEmail = (Notification_Email) q.getSingleResult();
+                    NotificationEmailResource notificationEmailResource = (NotificationEmailResource) Utils.getResource(ResourceType.NOTIFICATION_EMAIL, notificationEmail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return notificationEmailResource;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
+                    q = generator.selectQuery(em);
+                    WorkflowNodeDetail workflowNodeDetail = (WorkflowNodeDetail) q.getSingleResult();
+                    WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL, workflowNodeDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return nodeDetailResource;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    ErrorDetail errorDetail = (ErrorDetail) q.getSingleResult();
+                    ErrorDetailResource errorDetailResource = (ErrorDetailResource) Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return errorDetailResource;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(StatusConstants.STATUS_TYPE, StatusType.EXPERIMENT.toString());
+                    q = generator.selectQuery(em);
+                    Status status = (Status) q.getSingleResult();
+                    StatusResource statusResource = (StatusResource) Utils.getResource(ResourceType.STATUS, status);
+                    em.getTransaction().commit();
+                    em.close();
+                    return statusResource;
+                case CONFIG_DATA:
+                    generator = new QueryGenerator(CONFIG_DATA);
+                    generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    ExperimentConfigData configData = (ExperimentConfigData) q.getSingleResult();
+                    ConfigDataResource configDataResource = (ConfigDataResource) Utils.getResource(ResourceType.CONFIG_DATA, configData);
+                    em.getTransaction().commit();
+                    em.close();
+                    return configDataResource;
+                case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    Computational_Resource_Scheduling scheduling = (Computational_Resource_Scheduling) q.getSingleResult();
+                    ComputationSchedulingResource schedulingResource = (ComputationSchedulingResource) Utils.getResource(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, scheduling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return schedulingResource;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    AdvancedInputDataHandling inputDataHandling = (AdvancedInputDataHandling) q.getSingleResult();
+                    AdvanceInputDataHandlingResource dataHandlingResource = (AdvanceInputDataHandlingResource) Utils.getResource(ResourceType.ADVANCE_INPUT_DATA_HANDLING, inputDataHandling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return dataHandlingResource;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    AdvancedOutputDataHandling outputDataHandling = (AdvancedOutputDataHandling) q.getSingleResult();
+                    AdvancedOutputDataHandlingResource outputDataHandlingResource = (AdvancedOutputDataHandlingResource) Utils.getResource(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING, outputDataHandling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return outputDataHandlingResource;
+                case QOS_PARAM:
+                    generator = new QueryGenerator(QOS_PARAMS);
+                    generator.setParameter(QosParamsConstants.EXPERIMENT_ID, name);
+                    generator.setParameter(QosParamsConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    QosParam qosParam = (QosParam) q.getSingleResult();
+                    QosParamResource qosParamResource = (QosParamResource) Utils.getResource(ResourceType.QOS_PARAM, qosParam);
+                    em.getTransaction().commit();
+                    em.close();
+                    return qosParamResource;
+                default:
+                    em.getTransaction().commit();
+                    em.close();
+                    logger.error("Unsupported resource type for experiment resource.", new IllegalArgumentException());
+                    throw new IllegalArgumentException("Unsupported resource type for experiment data resource.");
+            }
+        } catch (Exception e) {
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+
+    }
+
+    /**
+     *
+     * @param type  child resource types
+     * @return UnsupportedOperationException
+     */
+    public List<ExperimentCatResource> get(ResourceType type)  throws RegistryException{
+        List<ExperimentCatResource> resourceList = new ArrayList<ExperimentCatResource>();
+        EntityManager em = null;
+        try {
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            QueryGenerator generator;
+            List results;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Experiment_Input exInput = (Experiment_Input) result;
+                            ExperimentInputResource inputResource =
+                                    (ExperimentInputResource) Utils.getResource(ResourceType.EXPERIMENT_INPUT, exInput);
+                            resourceList.add(inputResource);
+                        }
+                    }
+                    break;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Experiment_Output output = (Experiment_Output) result;
+                            ExperimentOutputResource outputResource =
+                                    (ExperimentOutputResource) Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, output);
+                            resourceList.add(outputResource);
+                        }
+                    }
+                    break;
+                case NOTIFICATION_EMAIL:
+                    generator = new QueryGenerator(NOTIFICATION_EMAIL);
+                    generator.setParameter(NotificationEmailConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Notification_Email notificationEmail = (Notification_Email) result;
+                            NotificationEmailResource emailResource =
+                                    (NotificationEmailResource) Utils.getResource(ResourceType.NOTIFICATION_EMAIL, notificationEmail);
+                            resourceList.add(emailResource);
+                        }
+                    }
+                    break;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    generator.setParameter(WorkflowNodeDetailsConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            WorkflowNodeDetail nodeDetail = (WorkflowNodeDetail) result;
+                            WorkflowNodeDetailResource nodeDetailResource =
+                                    (WorkflowNodeDetailResource) Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL, nodeDetail);
+                            resourceList.add(nodeDetailResource);
+                        }
+                    }
+                    break;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            ErrorDetail errorDetail = (ErrorDetail) result;
+                            ErrorDetailResource errorDetailResource =
+                                    (ErrorDetailResource) Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
+                            resourceList.add(errorDetailResource);
+                        }
+                    }
+                    break;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, expID);
+                    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 experiment resource.", new UnsupportedOperationException());
+                    throw new UnsupportedOperationException();
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return resourceList;
+    }
+
+    /**
+     * save experiment
+     */
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ExpCatResourceUtils.getEntityManager();
+            Experiment existingExp = em.find(Experiment.class, expID);
+            em.close();
+
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Experiment experiment = new Experiment();
+            experiment.setProjectID(projectId);
+            experiment.setExpId(expID);
+            experiment.setExecutionUser(executionUser);
+            experiment.setExecutionUser(executionUser);
+            experiment.setGatewayId(gatewayId);
+            experiment.setCreationTime(creationTime);
+            experiment.setExpName(expName);
+            experiment.setExpDesc(description);
+            experiment.setApplicationId(applicationId);
+            experiment.setAppVersion(applicationVersion);
+            experiment.setWorkflowExecutionId(workflowExecutionId);
+            experiment.setWorkflowTemplateVersion(workflowTemplateVersion);
+            experiment.setWorkflowExecutionId(workflowExecutionId);
+            experiment.setAllowNotification(enableEmailNotifications);
+            experiment.setGatewayExecutionId(gatewayExecutionId);
+            if (existingExp != null) {
+                existingExp.setGatewayId(gatewayId);
+                existingExp.setExecutionUser(executionUser);
+                existingExp.setProjectID(projectId);
+                existingExp.setCreationTime(creationTime);
+                existingExp.setExpName(expName);
+                existingExp.setExpDesc(description);
+                existingExp.setApplicationId(applicationId);
+                existingExp.setAppVersion(applicationVersion);
+                existingExp.setWorkflowExecutionId(workflowExecutionId);
+                existingExp.setWorkflowTemplateVersion(workflowTemplateVersion);
+                existingExp.setWorkflowExecutionId(workflowExecutionId);
+                existingExp.setAllowNotification(enableEmailNotifications);
+                existingExp.setGatewayExecutionId(gatewayExecutionId);
+                experiment = em.merge(existingExp);
+            } else {
+                em.persist(experiment);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    /**
+     *
+     * @param expID experiment ID
+     */
+    public void setExpID(String expID) {
+		this.expID = expID;
+	}
+
+    public String getExecutionUser() {
+        return executionUser;
+    }
+
+    public void setExecutionUser(String executionUser) {
+        this.executionUser = executionUser;
+    }
+
+    public List<NotificationEmailResource> getNotificationEmails () throws RegistryException{
+        List<NotificationEmailResource> emailResources = new ArrayList<NotificationEmailResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.NOTIFICATION_EMAIL);
+        for (ExperimentCatResource resource : resources) {
+            emailResources.add((NotificationEmailResource) resource);
+        }
+        return emailResources;
+    }
+
+    public List<ExperimentInputResource> getExperimentInputs () throws RegistryException{
+        List<ExperimentInputResource> expInputs = new ArrayList<ExperimentInputResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.EXPERIMENT_INPUT);
+        for (ExperimentCatResource resource : resources) {
+            expInputs.add((ExperimentInputResource) resource);
+        }
+        return expInputs;
+    }
+
+    public List<ExperimentOutputResource> getExperimentOutputs () throws RegistryException{
+        List<ExperimentOutputResource> expOutputs = new ArrayList<ExperimentOutputResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.EXPERIMENT_OUTPUT);
+        for (ExperimentCatResource resource : resources) {
+            expOutputs.add((ExperimentOutputResource) resource);
+        }
+        return expOutputs;
+    }
+
+    public StatusResource getExperimentStatus() throws RegistryException{
+        List<ExperimentCatResource> resources = get(ResourceType.STATUS);
+        for (ExperimentCatResource resource : resources) {
+            StatusResource expStatus = (StatusResource) resource;
+            if(expStatus.getStatusType().equals(StatusType.EXPERIMENT.toString())){
+                if (expStatus.getState() == null || expStatus.getState().equals("") ){
+                    expStatus.setState("UNKNOWN");
+                }
+                return expStatus;
+            }
+        }
+        return null;
+    }
+
+    public List<StatusResource> getWorkflowNodeStatuses() throws RegistryException{
+        List<StatusResource> statuses = new ArrayList<StatusResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.STATUS);
+        for (ExperimentCatResource resource : resources) {
+            StatusResource workflowNodeStatus = (StatusResource) resource;
+            if(workflowNodeStatus.getStatusType().equals(StatusType.WORKFLOW_NODE.toString())){
+                if (workflowNodeStatus.getState() == null || workflowNodeStatus.getState().equals("")){
+                    workflowNodeStatus.setState("UNKNOWN");
+                }
+                statuses.add(workflowNodeStatus);
+            }
+        }
+        return statuses;
+    }
+
+    public List<WorkflowNodeDetailResource> getWorkflowNodeDetails () throws RegistryException{
+        List<WorkflowNodeDetailResource> workflowNodeDetailResourceList = new ArrayList<WorkflowNodeDetailResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.WORKFLOW_NODE_DETAIL);
+        for (ExperimentCatResource resource : resources) {
+            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) resource;
+            workflowNodeDetailResourceList.add(nodeDetailResource);
+        }
+        return workflowNodeDetailResourceList;
+    }
+
+    public List<ErrorDetailResource> getErrorDetails () throws RegistryException{
+        List<ErrorDetailResource> errorDetailResources = new ArrayList<ErrorDetailResource>();
+        List<ExperimentCatResource> resources = get(ResourceType.ERROR_DETAIL);
+        for (ExperimentCatResource resource : resources) {
+            ErrorDetailResource errorDetailResource = (ErrorDetailResource) resource;
+            errorDetailResources.add(errorDetailResource);
+        }
+        return errorDetailResources;
+    }
+
+    public ComputationSchedulingResource getComputationScheduling (String expId) throws RegistryException{
+        return  (ComputationSchedulingResource)get(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, expId);
+    }
+
+    public AdvanceInputDataHandlingResource getInputDataHandling (String expId) throws RegistryException{
+        return  (AdvanceInputDataHandlingResource)get(ResourceType.ADVANCE_INPUT_DATA_HANDLING, expId);
+    }
+
+    public AdvancedOutputDataHandlingResource getOutputDataHandling (String expId) throws RegistryException{
+        return  (AdvancedOutputDataHandlingResource)get(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING, expId);
+    }
+
+    public QosParamResource getQOSparams (String expId) throws RegistryException{
+        return  (QosParamResource)get(ResourceType.QOS_PARAM, expId);
+    }
+
+    public ConfigDataResource getUserConfigData(String expID) throws RegistryException{
+        return (ConfigDataResource)get(ResourceType.CONFIG_DATA, expID);
+    }
+    public WorkflowNodeDetailResource getWorkflowNode (String nodeId) throws RegistryException{
+        return (WorkflowNodeDetailResource)get(ResourceType.WORKFLOW_NODE_DETAIL, nodeId);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryExperimentCatResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryExperimentCatResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryExperimentCatResource.java
deleted file mode 100644
index f1bb749..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryExperimentCatResource.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.registry.core.experiment.catalog.resources;
-
-import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
-import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
-import org.apache.airavata.registry.cpi.RegistryException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.el.MethodNotFoundException;
-import java.sql.Timestamp;
-import java.util.List;
-
-public class ExperimentSummaryExperimentCatResource extends AbstractExperimentCatResource {
-    private final static Logger logger = LoggerFactory.getLogger(ExperimentSummaryExperimentCatResource.class);
-
-    private String executionUser;
-    private String expID;
-    private String projectID;
-    private Timestamp creationTime;
-    private String expName;
-    private String description;
-    private String applicationId;
-
-    private StatusExperimentCatResource status;
-
-    @Override
-    public ExperimentCatResource create(ResourceType type) throws RegistryException {
-        throw new MethodNotFoundException();
-    }
-
-    @Override
-    public void remove(ResourceType type, Object name) throws RegistryException {
-        throw new MethodNotFoundException();
-    }
-
-    @Override
-    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException {
-        throw new MethodNotFoundException();
-    }
-
-    @Override
-    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
-        throw new MethodNotFoundException();
-    }
-
-    @Override
-    public void save() throws RegistryException {
-        throw new MethodNotFoundException();
-    }
-
-    public String getExecutionUser() {
-        return executionUser;
-    }
-
-    public void setExecutionUser(String executionUser) {
-        this.executionUser = executionUser;
-    }
-
-    public String getExpID() {
-        return expID;
-    }
-
-    public void setExpID(String expID) {
-        this.expID = expID;
-    }
-
-    public String getProjectID() {
-        return projectID;
-    }
-
-    public void setProjectID(String projectID) {
-        this.projectID = projectID;
-    }
-
-    public Timestamp getCreationTime() {
-        return creationTime;
-    }
-
-    public void setCreationTime(Timestamp creationTime) {
-        this.creationTime = creationTime;
-    }
-
-    public String getExpName() {
-        return expName;
-    }
-
-    public void setExpName(String expName) {
-        this.expName = expName;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getApplicationId() {
-        return applicationId;
-    }
-
-    public void setApplicationId(String applicationId) {
-        this.applicationId = applicationId;
-    }
-
-    public StatusExperimentCatResource getStatus() {
-        return status;
-    }
-
-    public void setStatus(StatusExperimentCatResource status) {
-        this.status = status;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryResource.java
new file mode 100644
index 0000000..0b0d1af
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentSummaryResource.java
@@ -0,0 +1,134 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.resources;
+
+import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
+import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
+import org.apache.airavata.registry.cpi.RegistryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.el.MethodNotFoundException;
+import java.sql.Timestamp;
+import java.util.List;
+
+public class ExperimentSummaryResource extends AbstractExpCatResource {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentSummaryResource.class);
+
+    private String executionUser;
+    private String expID;
+    private String projectID;
+    private Timestamp creationTime;
+    private String expName;
+    private String description;
+    private String applicationId;
+
+    private StatusResource status;
+
+    @Override
+    public ExperimentCatResource create(ResourceType type) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public void remove(ResourceType type, Object name) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public void save() throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    public String getExecutionUser() {
+        return executionUser;
+    }
+
+    public void setExecutionUser(String executionUser) {
+        this.executionUser = executionUser;
+    }
+
+    public String getExpID() {
+        return expID;
+    }
+
+    public void setExpID(String expID) {
+        this.expID = expID;
+    }
+
+    public String getProjectID() {
+        return projectID;
+    }
+
+    public void setProjectID(String projectID) {
+        this.projectID = projectID;
+    }
+
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public String getExpName() {
+        return expName;
+    }
+
+    public void setExpName(String expName) {
+        this.expName = expName;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getApplicationId() {
+        return applicationId;
+    }
+
+    public void setApplicationId(String applicationId) {
+        this.applicationId = applicationId;
+    }
+
+    public StatusResource getStatus() {
+        return status;
+    }
+
+    public void setStatus(StatusResource status) {
+        this.status = status;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4045c094/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/GatewayExperimentCatResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/GatewayExperimentCatResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/GatewayExperimentCatResource.java
deleted file mode 100644
index eadec86..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/GatewayExperimentCatResource.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.registry.core.experiment.catalog.resources;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
-import org.apache.airavata.registry.core.experiment.catalog.ExpCatResourceUtils;
-import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
-import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
-import org.apache.airavata.registry.core.experiment.catalog.model.*;
-import org.apache.airavata.registry.core.experiment.catalog.utils.QueryGenerator;
-import org.apache.airavata.registry.cpi.RegistryException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class GatewayExperimentCatResource extends AbstractExperimentCatResource {
-    private final static Logger logger = LoggerFactory.getLogger(GatewayExperimentCatResource.class);
-
-    private String gatewayId;
-    private String gatewayName;
-    private String domain;
-    private String emailAddress;
-
-    public String getGatewayId() {
-        return gatewayId;
-    }
-
-    public void setGatewayId(String gatewayId) {
-        this.gatewayId = gatewayId;
-    }
-
-    public String getEmailAddress() {
-        return emailAddress;
-    }
-
-    public void setEmailAddress(String emailAddress) {
-        this.emailAddress = emailAddress;
-    }
-
-    /**
-     *
-     * @param gatewayId gateway name
-     */
-    public GatewayExperimentCatResource(String gatewayId) {
-    	setGatewayId(gatewayId);
-	}
-
-    /**
-     *
-     */
-    public GatewayExperimentCatResource() {
-	}
-
-    /**
-     *
-     * @return gateway name
-     */
-    public String getGatewayName() {
-        return gatewayName;
-    }
-
-    /**
-     *
-     * @param gatewayName
-     */
-    public void setGatewayName(String gatewayName) {
-        this.gatewayName = gatewayName;
-    }
-
-    /**
-     *
-     * @return domain of the gateway
-     */
-    public String getDomain() {
-        return domain;
-    }
-
-    /**
-     *
-     * @param domain domain of the gateway
-     */
-    public void setDomain(String domain) {
-        this.domain = domain;
-    }
-
-
-    /**
-     * Gateway is at the root level.  So it can populate his child resources.
-     * Project, User, Published Workflows, User workflows, Host descriptors,
-     * Service Descriptors, Application descriptors and Experiments are all
-     * its children
-     * @param type resource type of the children
-     * @return specific child resource type
-     */
-    public ExperimentCatResource create(ResourceType type) throws RegistryException {
-        switch (type) {
-            case PROJECT:
-                ProjectExperimentCatResource projectResource = new ProjectExperimentCatResource();
-                projectResource.setGatewayId(gatewayId);
-                return projectResource;
-            case EXPERIMENT:
-                ExperimentExperimentCatResource experimentResource =new ExperimentExperimentCatResource();
-                experimentResource.setGatewayId(gatewayId);
-                return experimentResource;
-            case GATEWAY_WORKER:
-                WorkerExperimentCatResource workerResource = new WorkerExperimentCatResource();
-                workerResource.setGatewayId(gatewayId);
-                return workerResource;
-            default:
-                logger.error("Unsupported resource type for gateway resource.", new IllegalArgumentException());
-                throw new IllegalArgumentException("Unsupported resource type for gateway resource.");
-        }
-    }
-
-    /**
-     * Child resources can be removed from a gateway
-     * @param type child resource type
-     * @param name child resource name
-     */
-    public void remove(ResourceType type, Object name) throws RegistryException{
-        EntityManager em = null;
-        try {
-            em = ExpCatResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            Query q;
-            QueryGenerator generator;
-            switch (type) {
-                case USER:
-                    generator = new QueryGenerator(USERS);
-                    generator.setParameter(UserConstants.USERNAME, name);
-                    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 gateway resource.", new IllegalArgumentException());
-                    break;
-            }
-            em.getTransaction().commit();
-            em.close();
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-    }
-
-    /**
-     * Gateway can get information of his children
-     * @param type child resource type
-     * @param name child resource name
-     * @return specific child resource type
-     */
-    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException{
-        EntityManager em = null;
-        try {
-            em = ExpCatResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            QueryGenerator generator;
-            Query q;
-            switch (type) {
-                case GATEWAY_WORKER:
-                    generator = new QueryGenerator(GATEWAY_WORKER);
-                    generator.setParameter(GatewayWorkerConstants.USERNAME, name);
-                    generator.setParameter(GatewayWorkerConstants.GATEWAY_ID, gatewayId);
-                    q = generator.selectQuery(em);
-                    Gateway_Worker worker = (Gateway_Worker) q.getSingleResult();
-                    WorkerExperimentCatResource workerResource =
-                            (WorkerExperimentCatResource) Utils.getResource(ResourceType.GATEWAY_WORKER, worker);
-                    em.getTransaction().commit();
-                    em.close();
-                    return workerResource;
-                case USER:
-                    generator = new QueryGenerator(USERS);
-                    generator.setParameter(UserConstants.USERNAME, name);
-                    q = generator.selectQuery(em);
-                    Users user = (Users) q.getSingleResult();
-                    UserExperimentCatResource userResource =
-                            (UserExperimentCatResource) Utils.getResource(ResourceType.USER, user);
-                    em.getTransaction().commit();
-                    em.close();
-                    return userResource;
-                case EXPERIMENT:
-                    generator = new QueryGenerator(EXPERIMENT);
-                    generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
-                    q = generator.selectQuery(em);
-                    Experiment experiment = (Experiment) q.getSingleResult();
-                    ExperimentExperimentCatResource experimentResource =
-                            (ExperimentExperimentCatResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
-                    em.getTransaction().commit();
-                    em.close();
-                    return experimentResource;
-                default:
-                    em.getTransaction().commit();
-                    em.close();
-                    logger.error("Unsupported resource type for gateway resource.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported resource type for gateway resource.");
-            }
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-    }
-
-    /**
-     *
-     * @param type child resource type
-     * @return list of child resources
-     */
-    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException{
-        List<ExperimentCatResource> resourceList = new ArrayList<ExperimentCatResource>();
-        EntityManager em = null;
-        try {
-            em = ExpCatResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            Query q;
-            QueryGenerator generator;
-            List results;
-            switch (type) {
-                case PROJECT:
-                    generator = new QueryGenerator(PROJECT);
-                    Gateway gatewayModel = em.find(Gateway.class, gatewayId);
-                    generator.setParameter("gateway", gatewayModel);
-                    q = generator.selectQuery(em);
-                    results = q.getResultList();
-                    if (results.size() != 0) {
-                        for (Object result : results) {
-                            Project project = (Project) result;
-                            ProjectExperimentCatResource projectResource =
-                                    (ProjectExperimentCatResource) Utils.getResource(ResourceType.PROJECT, project);
-                            resourceList.add(projectResource);
-                        }
-                    }
-                    break;
-                case GATEWAY_WORKER:
-                    generator = new QueryGenerator(GATEWAY_WORKER);
-                    generator.setParameter(GatewayWorkerConstants.GATEWAY_ID, gatewayId);
-                    q = generator.selectQuery(em);
-                    results = q.getResultList();
-                    if (results.size() != 0) {
-                        for (Object result : results) {
-                            Gateway_Worker gatewayWorker = (Gateway_Worker) result;
-                            WorkerExperimentCatResource workerResource =
-                                    (WorkerExperimentCatResource) Utils.getResource(ResourceType.GATEWAY_WORKER, gatewayWorker);
-                            resourceList.add(workerResource);
-                        }
-                    }
-                    break;
-                case EXPERIMENT:
-                    generator = new QueryGenerator(EXPERIMENT);
-                    generator.setParameter(ExperimentConstants.GATEWAY_ID, gatewayId);
-                    q = generator.selectQuery(em);
-                    results = q.getResultList();
-                    if (results.size() != 0) {
-                        for (Object result : results) {
-                            Experiment experiment = (Experiment) result;
-                            ExperimentExperimentCatResource experimentResource =
-                                    (ExperimentExperimentCatResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
-                            resourceList.add(experimentResource);
-                        }
-                    }
-                    break;
-                case USER:
-                    generator = new QueryGenerator(USERS);
-                    q = generator.selectQuery(em);
-                    for (Object o : q.getResultList()) {
-                        Users user = (Users) o;
-                        UserExperimentCatResource userResource =
-                                (UserExperimentCatResource) Utils.getResource(ResourceType.USER, user);
-                        resourceList.add(userResource);
-                    }
-                    break;
-                default:
-                    em.getTransaction().commit();
-                    em.close();
-                    logger.error("Unsupported resource type for gateway resource.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported resource type for gateway resource.");
-            }
-            em.getTransaction().commit();
-            em.close();
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-        return resourceList;
-    }
-
-    /**
-     * save the gateway to the database
-     */
-    public void save() throws RegistryException {
-        EntityManager em = null;
-        try {
-            em = ExpCatResourceUtils.getEntityManager();
-            Gateway existingGateway = em.find(Gateway.class, gatewayId);
-            em.close();
-
-            em = ExpCatResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            Gateway gateway = new Gateway();
-            gateway.setGateway_name(gatewayName);
-            gateway.setGateway_id(gatewayId);
-            gateway.setDomain(domain);
-            gateway.setEmailAddress(emailAddress);
-            if (existingGateway != null) {
-                existingGateway.setDomain(domain);
-                existingGateway.setGateway_name(gatewayName);
-                existingGateway.setEmailAddress(emailAddress);
-                gateway = em.merge(existingGateway);
-            } else {
-                em.persist(gateway);
-            }
-            em.getTransaction().commit();
-            em.close();
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-
-    }
-
-    /**
-     * check whether child resource already exist in the database
-     * @param type child resource type
-     * @param name name of the child resource
-     * @return true or false
-     */
-    public boolean isExists(ResourceType type, Object name) throws RegistryException{
-        EntityManager em = null;
-        try {
-            switch (type) {
-                case GATEWAY_WORKER:
-                    em = ExpCatResourceUtils.getEntityManager();
-                    Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gatewayId, name.toString()));
-                    em.close();
-                    return existingWorker != null;
-                case USER:
-                    em = ExpCatResourceUtils.getEntityManager();
-                    Users existingUser = em.find(Users.class, name);
-                    em.close();
-                    return existingUser != null;
-                case EXPERIMENT:
-                    em = ExpCatResourceUtils.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.");
-            }
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            throw new RegistryException(e);
-        } finally {
-            if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
-                    em.getTransaction().rollback();
-                }
-                em.close();
-            }
-        }
-    }
-
-    public ExperimentExperimentCatResource createExperiment (String experimentID) throws RegistryException{
-        ExperimentExperimentCatResource metadataResource = (ExperimentExperimentCatResource)create(ResourceType.EXPERIMENT);
-        metadataResource.setExpID(experimentID);
-        return metadataResource;
-    }
-
-    public ExperimentExperimentCatResource getExperiment (String expId) throws RegistryException{
-        return (ExperimentExperimentCatResource)get(ResourceType.EXPERIMENT, expId);
-    }
-
-    public List<ExperimentExperimentCatResource> getExperiments () throws RegistryException{
-        List<ExperimentExperimentCatResource> experiments = new ArrayList<ExperimentExperimentCatResource>();
-        List<ExperimentCatResource> resources = get(ResourceType.EXPERIMENT);
-        for (ExperimentCatResource resource : resources){
-            experiments.add((ExperimentExperimentCatResource)resource);
-        }
-        return experiments;
-    }
-}
-