You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2015/06/02 22:53:07 UTC

[3/3] airavata git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/airavata

Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/airavata


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

Branch: refs/heads/master
Commit: 22a76f8af745ccceedc371ac91dc354673c77b31
Parents: 7ab87e5 22bcbb4
Author: Supun Nakandala <sc...@apache.org>
Authored: Wed Jun 3 02:18:43 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Wed Jun 3 02:18:43 2015 +0530

----------------------------------------------------------------------
 airavata-api/airavata-api-server/pom.xml        |    2 +-
 .../server/handler/AiravataServerHandler.java   |    4 +-
 .../api/server/util/AppCatalogInitUtil.java     |    6 -
 .../api/server/util/RegistryInitUtil.java       |   12 +-
 .../client/samples/CreateLaunchExperiment.java  |    4 +-
 .../main/resources/airavata-client.properties   |   14 +-
 modules/distribution/server/pom.xml             |    2 +-
 modules/gfac/airavata-gfac-service/pom.xml      |    2 +-
 .../airavata/gfac/server/GfacServerHandler.java |    2 +-
 .../gfac/client/GfacClientFactoryTest.java      |   11 -
 .../airavata/gfac/client/util/Initialize.java   |    5 +-
 .../gfac/bes/provider/impl/BESProvider.java     |   24 +-
 modules/gfac/gfac-core/pom.xml                  |    2 +-
 .../gfac/core/handler/AbstractHandler.java      |    3 +-
 .../gfac/core/provider/AbstractProvider.java    |    4 +-
 .../airavata/gfac/core/utils/GFacUtils.java     |    2 +-
 .../impl/GSISSHProviderTestWithMyProxyAuth.java |    2 +-
 .../gfac/services/impl/LocalProviderTest.java   |    2 +-
 .../gfac/gfac-monitor/gfac-hpc-monitor/pom.xml  |    2 +-
 .../services/impl/BigRed2TestWithSSHAuth.java   |    2 +-
 modules/integration-tests/pom.xml               |    2 +-
 .../server/OrchestratorServerHandler.java       |    2 +-
 .../client/OrchestratorClientFactoryTest.java   |   13 -
 .../orchestrator/client/util/Initialize.java    |    5 +-
 modules/orchestrator/orchestrator-core/pom.xml  |    2 +-
 .../validator/impl/BatchQueueValidator.java     |    2 +-
 .../cpi/impl/AbstractOrchestrator.java          |    2 +-
 .../core/OrchestratorTestWithGRAM.java          |   15 -
 .../core/OrchestratorTestWithMyProxyAuth.java   |   16 -
 .../orchestrator/core/ValidatorTest.java        |    2 +-
 .../orchestrator/core/util/Initialize.java      |    5 +-
 modules/registry/airavata-jpa-registry/pom.xml  |  151 -
 .../persistance/registry/jpa/JPAConstants.java  |   33 -
 .../persistance/registry/jpa/Resource.java      |   71 -
 .../persistance/registry/jpa/ResourceType.java  |   50 -
 .../persistance/registry/jpa/ResourceUtils.java |  525 ---
 .../registry/jpa/impl/ExperimentRegistry.java   | 2983 ------------------
 .../registry/jpa/impl/GatewayRegistry.java      |  115 -
 .../registry/jpa/impl/LoggingRegistryImpl.java  |   97 -
 .../registry/jpa/impl/ProjectRegistry.java      |  303 --
 .../registry/jpa/impl/RegistryFactory.java      |   80 -
 .../registry/jpa/impl/RegistryImpl.java         |  735 -----
 .../persistance/registry/jpa/impl/UserReg.java  |   42 -
 .../jpa/model/AdvancedInputDataHandling.java    |  113 -
 .../jpa/model/AdvancedOutputDataHandling.java   |  104 -
 .../registry/jpa/model/ApplicationInput.java    |  165 -
 .../registry/jpa/model/ApplicationInput_PK.java |   65 -
 .../registry/jpa/model/ApplicationOutput.java   |  142 -
 .../jpa/model/ApplicationOutput_PK.java         |   64 -
 .../Computational_Resource_Scheduling.java      |  174 -
 .../registry/jpa/model/Configuration.java       |   80 -
 .../registry/jpa/model/Configuration_PK.java    |   74 -
 .../registry/jpa/model/DataTransferDetail.java  |   92 -
 .../registry/jpa/model/ErrorDetail.java         |  176 --
 .../registry/jpa/model/Experiment.java          |  300 --
 .../jpa/model/ExperimentConfigData.java         |  143 -
 .../registry/jpa/model/Experiment_Input.java    |  170 -
 .../registry/jpa/model/Experiment_Input_PK.java |   64 -
 .../registry/jpa/model/Experiment_Output.java   |  143 -
 .../jpa/model/Experiment_Output_PK.java         |   64 -
 .../persistance/registry/jpa/model/Gateway.java |   76 -
 .../registry/jpa/model/Gateway_Worker.java      |   82 -
 .../registry/jpa/model/Gateway_Worker_PK.java   |   64 -
 .../registry/jpa/model/JobDetail.java           |  136 -
 .../registry/jpa/model/JobDetails_PK.java       |   64 -
 .../registry/jpa/model/NodeInput.java           |  163 -
 .../registry/jpa/model/NodeInput_PK.java        |   64 -
 .../registry/jpa/model/NodeOutput.java          |  140 -
 .../registry/jpa/model/NodeOutput_PK.java       |   64 -
 .../registry/jpa/model/Notification_Email.java  |   81 -
 .../persistance/registry/jpa/model/Project.java |  125 -
 .../registry/jpa/model/ProjectUser.java         |   81 -
 .../registry/jpa/model/ProjectUser_PK.java      |   64 -
 .../registry/jpa/model/QosParam.java            |  103 -
 .../persistance/registry/jpa/model/Status.java  |  146 -
 .../registry/jpa/model/TaskDetail.java          |  223 --
 .../persistance/registry/jpa/model/Users.java   |   55 -
 .../registry/jpa/model/WorkflowNodeDetail.java  |  157 -
 .../jpa/resources/AbstractResource.java         |  317 --
 .../AdvanceInputDataHandlingResource.java       |  162 -
 .../AdvancedOutputDataHandlingResource.java     |  152 -
 .../jpa/resources/ApplicationInputResource.java |  231 --
 .../resources/ApplicationOutputResource.java    |  209 --
 .../ComputationSchedulingResource.java          |  223 --
 .../jpa/resources/ConfigDataResource.java       |  195 --
 .../jpa/resources/ConfigurationResource.java    |  208 --
 .../resources/DataTransferDetailResource.java   |  276 --
 .../jpa/resources/ErrorDetailResource.java      |  218 --
 .../jpa/resources/ExperimentInputResource.java  |  226 --
 .../jpa/resources/ExperimentOutputResource.java |  205 --
 .../jpa/resources/ExperimentResource.java       |  831 -----
 .../resources/ExperimentSummaryResource.java    |  134 -
 .../registry/jpa/resources/GatewayResource.java |  437 ---
 .../jpa/resources/JobDetailResource.java        |  376 ---
 .../jpa/resources/NodeInputResource.java        |  228 --
 .../jpa/resources/NodeOutputResource.java       |  208 --
 .../resources/NotificationEmailResource.java    |  119 -
 .../registry/jpa/resources/ProjectResource.java |  508 ---
 .../jpa/resources/ProjectUserResource.java      |  123 -
 .../jpa/resources/QosParamResource.java         |  146 -
 .../registry/jpa/resources/StatusResource.java  |  181 --
 .../jpa/resources/TaskDetailResource.java       |  748 -----
 .../registry/jpa/resources/UserResource.java    |  186 --
 .../registry/jpa/resources/Utils.java           | 1014 ------
 .../registry/jpa/resources/WorkerResource.java  |  725 -----
 .../resources/WorkflowNodeDetailResource.java   |  515 ---
 .../registry/jpa/utils/QueryGenerator.java      |  128 -
 .../jpa/utils/ThriftDataModelConversion.java    |  686 ----
 .../src/main/resources/META-INF/persistence.xml |   65 -
 .../src/main/resources/registry-derby.sql       |  391 ---
 .../src/main/resources/registry-mysql.sql       |  392 ---
 .../registry/jpa/AbstractResourceTest.java      |   91 -
 .../jpa/ComputationalSchedulingTest.java        |   84 -
 .../registry/jpa/ConfigurationResourceTest.java |   58 -
 .../jpa/ExecutionErrorResourceTest.java         |   95 -
 .../jpa/ExperimentDataResourceTest.java         |  107 -
 .../jpa/ExperimentInputResourceTest.java        |   75 -
 .../jpa/ExperimentMetadataResourceTest.java     |   87 -
 .../jpa/ExperimentOutputResourceTest.java       |   76 -
 .../registry/jpa/ExperimentResourceTest.java    |   78 -
 .../registry/jpa/GFacJobDataResourceTest.java   |   77 -
 .../registry/jpa/GFacJobStatusResourceTest.java |   87 -
 .../registry/jpa/GatewayResourceTest.java       |  120 -
 .../registry/jpa/GramDataResourceTest.java      |   72 -
 .../registry/jpa/NodeDataResourceTest.java      |   72 -
 .../jpa/OrchestratorDataResourceTest.java       |   69 -
 .../registry/jpa/RegistryUseCaseTest.java       |  296 --
 .../registry/jpa/TaskDetailResourceTest.java    |   93 -
 .../registry/jpa/UserResourceTest.java          |   54 -
 .../registry/jpa/WorkerResourceTest.java        |  122 -
 .../registry/jpa/WorkflowDataResourceTest.java  |  106 -
 .../jpa/WorkflowNodeDetailResourceTest.java     |   85 -
 .../registry/jpa/util/Initialize.java           |  334 --
 .../airavata/provenance/test/JpaTest.java       |  151 -
 .../src/test/resources/registry-derby.sql       |  391 ---
 modules/registry/experiment-catalog/pom.xml     |  151 +
 .../experiment/catalog/JPAConstants.java        |   33 +
 .../airavata/experiment/catalog/Resource.java   |   71 +
 .../experiment/catalog/ResourceType.java        |   50 +
 .../experiment/catalog/ResourceUtils.java       |  525 +++
 .../catalog/impl/ExperimentRegistry.java        | 2983 ++++++++++++++++++
 .../catalog/impl/GatewayRegistry.java           |  115 +
 .../catalog/impl/LoggingRegistryImpl.java       |   97 +
 .../catalog/impl/ProjectRegistry.java           |  303 ++
 .../catalog/impl/RegistryFactory.java           |   80 +
 .../experiment/catalog/impl/RegistryImpl.java   |  735 +++++
 .../experiment/catalog/impl/UserReg.java        |   41 +
 .../model/AdvancedInputDataHandling.java        |  113 +
 .../model/AdvancedOutputDataHandling.java       |  104 +
 .../catalog/model/ApplicationInput.java         |  165 +
 .../catalog/model/ApplicationInput_PK.java      |   65 +
 .../catalog/model/ApplicationOutput.java        |  142 +
 .../catalog/model/ApplicationOutput_PK.java     |   64 +
 .../Computational_Resource_Scheduling.java      |  174 +
 .../experiment/catalog/model/Configuration.java |   80 +
 .../catalog/model/Configuration_PK.java         |   74 +
 .../catalog/model/DataTransferDetail.java       |   91 +
 .../experiment/catalog/model/ErrorDetail.java   |  176 ++
 .../experiment/catalog/model/Experiment.java    |  299 ++
 .../catalog/model/ExperimentConfigData.java     |  142 +
 .../catalog/model/Experiment_Input.java         |  170 +
 .../catalog/model/Experiment_Input_PK.java      |   64 +
 .../catalog/model/Experiment_Output.java        |  143 +
 .../catalog/model/Experiment_Output_PK.java     |   64 +
 .../experiment/catalog/model/Gateway.java       |   76 +
 .../catalog/model/Gateway_Worker.java           |   82 +
 .../catalog/model/Gateway_Worker_PK.java        |   64 +
 .../experiment/catalog/model/JobDetail.java     |  135 +
 .../experiment/catalog/model/JobDetails_PK.java |   64 +
 .../experiment/catalog/model/NodeInput.java     |  163 +
 .../experiment/catalog/model/NodeInput_PK.java  |   64 +
 .../experiment/catalog/model/NodeOutput.java    |  140 +
 .../experiment/catalog/model/NodeOutput_PK.java |   64 +
 .../catalog/model/Notification_Email.java       |   81 +
 .../experiment/catalog/model/Project.java       |  125 +
 .../experiment/catalog/model/ProjectUser.java   |   81 +
 .../catalog/model/ProjectUser_PK.java           |   64 +
 .../experiment/catalog/model/QosParam.java      |  103 +
 .../experiment/catalog/model/Status.java        |  146 +
 .../experiment/catalog/model/TaskDetail.java    |  221 ++
 .../experiment/catalog/model/Users.java         |   55 +
 .../catalog/model/WorkflowNodeDetail.java       |  155 +
 .../catalog/resources/AbstractResource.java     |  317 ++
 .../AdvanceInputDataHandlingResource.java       |  160 +
 .../AdvancedOutputDataHandlingResource.java     |  150 +
 .../resources/ApplicationInputResource.java     |  230 ++
 .../resources/ApplicationOutputResource.java    |  208 ++
 .../ComputationSchedulingResource.java          |  221 ++
 .../catalog/resources/ConfigDataResource.java   |  194 ++
 .../resources/ConfigurationResource.java        |  204 ++
 .../resources/DataTransferDetailResource.java   |  276 ++
 .../catalog/resources/ErrorDetailResource.java  |  215 ++
 .../resources/ExperimentInputResource.java      |  225 ++
 .../resources/ExperimentOutputResource.java     |  204 ++
 .../catalog/resources/ExperimentResource.java   |  831 +++++
 .../resources/ExperimentSummaryResource.java    |  134 +
 .../catalog/resources/GatewayResource.java      |  437 +++
 .../catalog/resources/JobDetailResource.java    |  376 +++
 .../catalog/resources/NodeInputResource.java    |  227 ++
 .../catalog/resources/NodeOutputResource.java   |  207 ++
 .../resources/NotificationEmailResource.java    |  119 +
 .../catalog/resources/ProjectResource.java      |  508 +++
 .../catalog/resources/ProjectUserResource.java  |  123 +
 .../catalog/resources/QosParamResource.java     |  144 +
 .../catalog/resources/StatusResource.java       |  181 ++
 .../catalog/resources/TaskDetailResource.java   |  748 +++++
 .../catalog/resources/UserResource.java         |  186 ++
 .../experiment/catalog/resources/Utils.java     | 1011 ++++++
 .../catalog/resources/WorkerResource.java       |  725 +++++
 .../resources/WorkflowNodeDetailResource.java   |  515 +++
 .../catalog/utils/QueryGenerator.java           |  128 +
 .../utils/ThriftDataModelConversion.java        |  686 ++++
 .../src/main/resources/META-INF/persistence.xml |   65 +
 .../src/main/resources/registry-derby.sql       |  391 +++
 .../src/main/resources/registry-mysql.sql       |  392 +++
 .../catalog/AbstractResourceTest.java           |   91 +
 .../catalog/ComputationalSchedulingTest.java    |   84 +
 .../catalog/ConfigurationResourceTest.java      |   58 +
 .../catalog/ExecutionErrorResourceTest.java     |   95 +
 .../catalog/ExperimentDataResourceTest.java     |  107 +
 .../catalog/ExperimentInputResourceTest.java    |   75 +
 .../catalog/ExperimentMetadataResourceTest.java |   87 +
 .../catalog/ExperimentOutputResourceTest.java   |   76 +
 .../catalog/ExperimentResourceTest.java         |   77 +
 .../catalog/GFacJobDataResourceTest.java        |   77 +
 .../catalog/GFacJobStatusResourceTest.java      |   87 +
 .../experiment/catalog/GatewayResourceTest.java |  120 +
 .../catalog/GramDataResourceTest.java           |   72 +
 .../catalog/NodeDataResourceTest.java           |   72 +
 .../catalog/OrchestratorDataResourceTest.java   |   69 +
 .../experiment/catalog/RegistryUseCaseTest.java |  296 ++
 .../catalog/TaskDetailResourceTest.java         |   93 +
 .../experiment/catalog/UserResourceTest.java    |   54 +
 .../experiment/catalog/WorkerResourceTest.java  |  122 +
 .../catalog/WorkflowDataResourceTest.java       |  106 +
 .../catalog/WorkflowNodeDetailResourceTest.java |   85 +
 .../experiment/catalog/util/Initialize.java     |  333 ++
 .../src/test/resources/registry-derby.sql       |  391 +++
 modules/registry/pom.xml                        |    2 +-
 modules/workflow-model/workflow-engine/pom.xml  |    2 +-
 .../workflow/engine/WorkflowEngineImpl.java     |    2 +-
 .../engine/interpretor/WorkflowInterpreter.java |    3 +-
 modules/workflow/workflow-core/pom.xml          |    2 +-
 .../core/SimpleWorkflowInterpreter.java         |    2 +-
 .../core/parser/AiravataWorkflowParser.java     |    2 +-
 modules/xbaya-gui/pom.xml                       |    2 +-
 .../dialogs/registry/NewRegistryUserDialog.java |   10 +-
 pom.xml                                         |    2 +-
 248 files changed, 22727 insertions(+), 22986 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/22a76f8a/modules/registry/experiment-catalog/src/main/java/org/apache/airavata/experiment/catalog/resources/WorkerResource.java
----------------------------------------------------------------------
diff --cc modules/registry/experiment-catalog/src/main/java/org/apache/airavata/experiment/catalog/resources/WorkerResource.java
index 0000000,51ba04f..6b4a6a5
mode 000000,100644..100644
--- a/modules/registry/experiment-catalog/src/main/java/org/apache/airavata/experiment/catalog/resources/WorkerResource.java
+++ b/modules/registry/experiment-catalog/src/main/java/org/apache/airavata/experiment/catalog/resources/WorkerResource.java
@@@ -1,0 -1,727 +1,725 @@@
+ /*
+  *
+  * 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.experiment.catalog.resources;
+ 
+ import org.apache.airavata.model.workspace.experiment.ExperimentState;
+ import org.apache.airavata.experiment.catalog.Resource;
+ import org.apache.airavata.experiment.catalog.ResourceType;
+ import org.apache.airavata.experiment.catalog.ResourceUtils;
+ import org.apache.airavata.experiment.catalog.model.*;
+ import org.apache.airavata.experiment.catalog.utils.QueryGenerator;
+ import org.apache.airavata.registry.cpi.RegistryException;
+ import org.apache.airavata.registry.cpi.ResultOrderType;
+ import org.apache.airavata.registry.cpi.utils.Constants;
+ import org.apache.airavata.registry.cpi.utils.StatusType;
+ import org.apache.openjpa.persistence.OpenJPAPersistence;
+ import org.apache.openjpa.persistence.OpenJPAQuery;
+ import org.apache.openjpa.persistence.jdbc.FetchMode;
+ import org.apache.openjpa.persistence.jdbc.JDBCFetchPlan;
+ 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;
+ import java.util.Map;
+ import java.util.UUID;
+ 
+ public class WorkerResource extends AbstractResource {
+     private final static Logger logger = LoggerFactory.getLogger(WorkerResource.class);
+     private String user;
+ 	private String gatewayId;
+ 
+     public WorkerResource() {
+     }
+ 
+     public WorkerResource(String user, String gatewayId) {
+         this.user = user;
+         this.gatewayId = gatewayId;
+     }
+ 
+     public String getGatewayId() {
+         return gatewayId;
+     }
+ 
+     public void setGatewayId(String gatewayId) {
+         this.gatewayId = gatewayId;
+     }
+ 
+     /**
+      * Gateway worker can create child data structures such as projects and user workflows
+      * @param type child resource type
+      * @return  child resource
+      */
+ 	public Resource create(ResourceType type) throws RegistryException{
+ 		Resource result = null;
+ 		switch (type) {
+ 			case PROJECT:
+ 				ProjectResource projectResource = new ProjectResource();
+ 				projectResource.setWorker(this);
+ 				projectResource.setGatewayId(gatewayId);
+ 				result=projectResource;
+ 				break;
+             case EXPERIMENT:
+                 ExperimentResource experimentResource = new ExperimentResource();
+                 experimentResource.setExecutionUser(user);
+                 experimentResource.setGatewayId(gatewayId);
+                 result = experimentResource;
+                 break;
+ 			default:
+                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
+                 throw new IllegalArgumentException("Unsupported resource type for worker resource.");
+ 
+ 		}
+ 		return result;
+ 	}
+ 
+     /**
+      *
+      * @param type child resource type
+      * @param name child resource name
+      */
+ 	public void remove(ResourceType type, Object name) throws RegistryException{
+         EntityManager em = null;
+         try {
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             Query q;
+             QueryGenerator generator;
+             switch (type) {
+                 case PROJECT:
+                     generator = new QueryGenerator(PROJECT);
+                     generator.setParameter(ProjectConstants.PROJECT_ID, 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 worker resource.", new IllegalArgumentException());
+                     break;
+             }
+             em.getTransaction().commit();
+             em.close();
+         } catch (Exception e) {
+             logger.error(e.getMessage(), e);
+             throw new RegistryException(e.getMessage());
+         } finally {
+             if (em != null && em.isOpen()) {
+                 if (em.getTransaction().isActive()){
+                     em.getTransaction().rollback();
+                 }
+                 em.close();
+             }
+         }
+     }
+ 
+     /**
+      *
+      * @param type child resource type
+      * @param name child resource name
+      * @return child resource
+      */
+ 	public Resource get(ResourceType type, Object name) throws RegistryException{
+         Resource result = null;
+         EntityManager em = null;
+         try {
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             QueryGenerator generator;
+             Query q;
+             switch (type) {
+                 case PROJECT:
+                     generator = new QueryGenerator(PROJECT);
+                     generator.setParameter(ProjectConstants.PROJECT_ID, name);
+                     q = generator.selectQuery(em);
+                     Project project = (Project) q.getSingleResult();
+                     result = Utils.getResource(ResourceType.PROJECT, project);
+                     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;
+             }
+             em.getTransaction().commit();
+             em.close();
+         } catch (Exception e) {
+             throw new RegistryException(e);
+         } finally {
+             if (em != null && em.isOpen()) {
+                 if (em.getTransaction().isActive()){
+                     em.getTransaction().rollback();
+                 }
+                 em.close();
+             }
+         }
+         return result;
+     }
+ 
+ //	public List<GFacJobDataResource> getGFacJobs(String serviceDescriptionId, String hostDescriptionId, String applicationDescriptionId){
+ //		List<GFacJobDataResource> result = new ArrayList<GFacJobDataResource>();
+ //        EntityManager em = ResourceUtils.getEntityManager();
+ //        em.getTransaction().begin();
+ //        QueryGenerator generator;
+ //        Query q;
+ //        generator = new QueryGenerator(GFAC_JOB_DATA);
+ //        generator.setParameter(GFacJobDataConstants.SERVICE_DESC_ID, serviceDescriptionId);
+ //        generator.setParameter(GFacJobDataConstants.HOST_DESC_ID, hostDescriptionId);
+ //        generator.setParameter(GFacJobDataConstants.APP_DESC_ID, applicationDescriptionId);
+ //        q = generator.selectQuery(em);
+ //        for (Object o : q.getResultList()) {
+ //            GFac_Job_Data gFacJobData = (GFac_Job_Data)o;
+ //            result.add((GFacJobDataResource)Utils.getResource(ResourceType.GFAC_JOB_DATA, gFacJobData));
+ //        }
+ //        em.getTransaction().commit();
+ //        em.close();
+ //		return result;
+ //	}
+ //
+ //	public List<GFacJobStatusResource> getGFacJobStatuses(String jobId){
+ //		List<GFacJobStatusResource> resourceList = new ArrayList<GFacJobStatusResource>();
+ //        EntityManager em = ResourceUtils.getEntityManager();
+ //        em.getTransaction().begin();
+ //        QueryGenerator generator;
+ //        Query q;
+ //        generator = new QueryGenerator(GFAC_JOB_STATUS);
+ //        generator.setParameter(GFacJobStatusConstants.LOCAL_JOB_ID, jobId);
+ //        q = generator.selectQuery(em);
+ //        for (Object result : q.getResultList()) {
+ //            GFac_Job_Status gFacJobStatus = (GFac_Job_Status) result;
+ //            GFacJobStatusResource gFacJobStatusResource =
+ //                    (GFacJobStatusResource)Utils.getResource(ResourceType.GFAC_JOB_STATUS, gFacJobStatus);
+ //            resourceList.add(gFacJobStatusResource);
+ //        }
+ //        return resourceList;
+ //	}
+ 
+     /**
+      * Method get all results of the given child resource type
+      *
+      * @param type child resource type
+      * @return list of child resources
+      */
+     public List<Resource> get(ResourceType type) throws RegistryException{
+         return get(type, -1, -1, null, null);
+     }
+ 
+     /**
+      * Method get all results of the given child resource type with paginaltion and ordering
+      *
+      * @param type child resource type
+      * @param limit
+      * @param offset
+      * @param orderByIdentifier
+      * @param resultOrderType
+      * @return list of child resources
+      * @throws RegistryException
+      */
+     public List<Resource> get(ResourceType type, int limit, int offset, Object orderByIdentifier,
+                               ResultOrderType resultOrderType) throws RegistryException{
+         List<Resource> result = new ArrayList<Resource>();
+         EntityManager em = null;
+         try {
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             QueryGenerator generator;
+             Query q;
+             switch (type) {
+                 case PROJECT:
+                     generator = new QueryGenerator(PROJECT);
+                     Users users = em.find(Users.class, getUser());
+                     Gateway gatewayModel = em.find(Gateway.class, gatewayId);
+                     generator.setParameter("users", users);
+                     if (gatewayModel != null){
+                         generator.setParameter("gateway", gatewayModel);
+                     }
+ 
+                     //ordering - only supported only by CREATION_TIME
+                     if(orderByIdentifier != null && resultOrderType != null
+                             && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)) {
+                         q = generator.selectQuery(em, ProjectConstants.CREATION_TIME, resultOrderType);
+                     }else{
+                         q = generator.selectQuery(em);
+                     }
+ 
+                     //pagination
+                     if(limit>0 && offset>=0){
+                         q.setFirstResult(offset);
+                         q.setMaxResults(limit);
+                     }
+ 
+                     for (Object o : q.getResultList()) {
+                         Project project = (Project) o;
+                         ProjectResource projectResource = (ProjectResource) Utils.getResource(ResourceType.PROJECT, project);
+                         result.add(projectResource);
+                     }
+                     break;
+                 case EXPERIMENT:
+                     generator = new QueryGenerator(EXPERIMENT);
+                     generator.setParameter(ExperimentConstants.EXECUTION_USER, getUser());
+ 
+                     //ordering - only supported only by CREATION_TIME
+                     if(orderByIdentifier != null && resultOrderType != null
+                             && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)) {
+                         q = generator.selectQuery(em, ExperimentConstants.CREATION_TIME, resultOrderType);
+                     }else{
+                         q = generator.selectQuery(em);
+                     }
+ 
+                     //pagination
+                     if(limit>0 && offset>=0){
+                         q.setFirstResult(offset);
+                         q.setMaxResults(limit);
+                     }
+                     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;
+             }
+             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 result;
+     }
+ 
+     /**
+      * save gateway worker to database
+      */
+ 	public void save() throws RegistryException{
+         EntityManager em = null;
+         try {
+             em = ResourceUtils.getEntityManager();
+             Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gatewayId, user));
+             em.close();
+ 
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             Gateway_Worker gatewayWorker = new Gateway_Worker();
+             Users existingUser = em.find(Users.class, this.user);
+             gatewayWorker.setUser(existingUser);
+             gatewayWorker.setUser_name(existingUser.getUser_name());
+             gatewayWorker.setGateway_id(gatewayId);
+             if (existingWorker != null) {
+                 existingWorker.setUser_name(existingUser.getUser_name());
+                 existingWorker.setUser(existingUser);
+                 existingWorker.setGateway_id(gatewayId);
+                 gatewayWorker = em.merge(existingWorker);
+             } else {
+                 em.persist(gatewayWorker);
+             }
+             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 user name
+      */
+ 	public String getUser() {
+ 		return user;
+ 	}
+ 
+     /**
+      *
+      * @param user user name
+      */
+     public void setUser(String user) {
+ 		this.user = user;
+ 	}
+ 
+     /**
+      *
+      * @param id  project id
+      * @return whether the project is available under the user
+      */
+     public boolean isProjectExists(String id) throws RegistryException{
+ 		return isExists(ResourceType.PROJECT, id);
+ 	}
+ 
+     /**
+      *
+      * @param projectId project id
+      * @return project resource for the user
+      */
+ 	public ProjectResource createProject(String projectId) throws RegistryException{
+ 		ProjectResource project=(ProjectResource)create(ResourceType.PROJECT);
+         project.setId(projectId);
+ 		return project;
+ 	}
+ 
+     public String getProjectID(String projectName) {
+         String pro = projectName.replaceAll("\\s", "");
+         return pro + "_" + UUID.randomUUID();
+     }
+ 
+     /**
+      *
+      * @param id project id
+      * @return project resource
+      */
+ 	public ProjectResource getProject(String id) throws RegistryException{
+ 		return (ProjectResource)get(ResourceType.PROJECT, id);
+ 	}
+ 
+     /**
+      *
+      * @param id project id
+      */
+ 	public void removeProject(String id) throws RegistryException{
+ 		remove(ResourceType.PROJECT, id);
+ 	}
+ 
+     /**
+      * Get projects list of user
+      * @return  list of projects for the user
+      */
+     public List<ProjectResource> getProjects() throws RegistryException{
+ 		return getProjects(-1, -1, null, null);
+ 	}
+ 
+ 
+     /**
+      * Get projects list of user with pagination and ordering
+      *
+      * @return  list of projects for the user
+      */
+     public List<ProjectResource> getProjects(int limit, int offset, Object orderByIdentifier,
+                                              ResultOrderType resultOrderType) throws RegistryException{
+         List<ProjectResource> result=new ArrayList<ProjectResource>();
+         List<Resource> list = get(ResourceType.PROJECT, limit, offset, orderByIdentifier, resultOrderType);
+         for (Resource resource : list) {
+             result.add((ProjectResource) resource);
+         }
+         return result;
+     }
+ 
+     /**
+      *
+      * @param name experiment name
+      * @return whether experiment is already exist for the given user
+      */
+ 	public boolean isExperimentExists(String name) throws RegistryException{
+ 		return isExists(ResourceType.EXPERIMENT, name);
+ 	}
+ 	
+ 
+     /**
+      *
+      * @param name experiment name
+      * @return experiment resource
+      */
+     public ExperimentResource getExperiment(String name) throws RegistryException{
+ 		return (ExperimentResource)get(ResourceType.EXPERIMENT, name);
+ 	}
+ //
+ //    public GFacJobDataResource getGFacJob(String jobId){
+ //    	return (GFacJobDataResource)get(ResourceType.GFAC_JOB_DATA,jobId);
+ //    }
+ 
+     /**
+      * Method to get list of expeirments of user
+      * @return list of experiments for the user
+      */
+ 	public List<ExperimentResource> getExperiments() throws RegistryException{
+ 		return getExperiments(-1, -1, null, null);
+ 	}
+ 
+     /**
+      * Method to get list of experiments of user with pagination and ordering
+      * @param limit
+      * @param offset
+      * @param orderByIdentifier
+      * @param resultOrderType
+      * @return
+      * @throws RegistryException
+      */
+     public List<ExperimentResource> getExperiments(int limit, int offset, Object orderByIdentifier,
+                                                    ResultOrderType resultOrderType) throws RegistryException{
+         List<ExperimentResource> result=new ArrayList<ExperimentResource>();
+         List<Resource> list = get(ResourceType.EXPERIMENT, limit, offset, orderByIdentifier, resultOrderType);
+         for (Resource resource : list) {
+             result.add((ExperimentResource) resource);
+         }
+         return result;
+     }
+ 
+     /**
+      *
+      * @param experimentId  experiment name
+      */
+ 	public void removeExperiment(String experimentId) throws RegistryException{
+ 		remove(ResourceType.EXPERIMENT, experimentId);
+ 	}
+ 
+     /**
+      * To search the projects of user with the given filter criteria and retrieve the results with
+      * pagination support. Results can be ordered based on an identifier (i.e column) either ASC or
+      * DESC. But in the current implementation ordering is only supported based on the project
+      * creation time
+      *
+      * @param filters
+      * @param limit
+      * @param offset
+      * @param orderByIdentifier
+      * @param resultOrderType
+      * @return
+      * @throws RegistryException
+      */
+     public List<ProjectResource> searchProjects(Map<String, String> filters, int limit,
+              int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
+         List<ProjectResource> result = new ArrayList<ProjectResource>();
+         EntityManager em = null;
+         try {
+             String query = "SELECT p from Project p WHERE ";
+             if (filters != null && filters.size() != 0) {
+                 for (String field : filters.keySet()) {
+                     String filterVal = filters.get(field);
+                     if (field.equals(ProjectConstants.USERNAME)) {
+                         query += "p." + field + "= '" + filterVal + "' AND ";
+                     }else if (field.equals(ProjectConstants.GATEWAY_ID)) {
+                         query += "p." + field + "= '" + filterVal + "' AND ";
+                     }else {
+                         if (filterVal.contains("*")){
+                             filterVal = filterVal.replaceAll("\\*", "");
+                         }
+                         query += "p." + field + " LIKE '%" + filterVal + "%' AND ";
+                     }
+                 }
+             }
+             query = query.substring(0, query.length() - 5);
+ 
+             //ordering
+             if( orderByIdentifier != null && resultOrderType != null
+                     && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)){
+                 String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : "DESC";
+                 query += " ORDER BY p." + ProjectConstants.CREATION_TIME + " " + order;
+             }
+ 
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             Query q;
+ 
+             //pagination
+             if(offset>=0 && limit >=0){
+                 q = em.createQuery(query).setFirstResult(offset).setMaxResults(limit);
+             }else{
+                 q = em.createQuery(query);
+             }
+ 
+             List resultList = q.getResultList();
+             for (Object o : resultList) {
+                 Project project = (Project) o;
+                 ProjectResource projectResource =
+                         (ProjectResource) Utils.getResource(ResourceType.PROJECT, project);
+                 result.add(projectResource);
+             }
+             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 result;
+     }
+ 
+     /**
+      * To search the experiments of user with the given time period and filter criteria and retrieve the results with
+      * pagination support. Results can be ordered based on an identifier (i.e column) either ASC or
+      * DESC. But in the current implementation ordering is only supported based on creationTime. Also if
+      * time period values i.e fromTime and toTime are null they will be ignored.
+      *
+      * @param fromTime
+      * @param toTime
+      * @param filters
+      * @param limit
+      * @param offset
+      * @param orderByIdentifier
+      * @param resultOrderType
+      * @return
+      * @throws RegistryException
+      */
+     public List<ExperimentSummaryResource> searchExperiments(Timestamp fromTime, Timestamp toTime, Map<String, String> filters, int limit,
+                                                       int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
+         List<ExperimentSummaryResource> result = new ArrayList();
+         EntityManager em = null;
+         try {
 -            String query;
++            String query = "SELECT e, s FROM Experiment e " +
++                    ",Status s WHERE e.expId=s.expId AND " +
++                    "s.statusType='" + StatusType.EXPERIMENT + "' AND ";
+             if(filters.get(StatusConstants.STATE) != null) {
 -                query = "SELECT DISTINCT (e) FROM Experiment e " +
 -                        "JOIN e.statuses s LEFT JOIN FETCH e.statuses WHERE " +
 -                        "s.statusType='" + StatusType.EXPERIMENT + "' AND ";
+                 String experimentState = ExperimentState.valueOf(filters.get(StatusConstants.STATE)).toString();
+                 query += "s.state='" + experimentState + "' AND ";
 -            }else{
 -                query = "SELECT e FROM Experiment e " +
 -                        "LEFT JOIN FETCH e.statuses WHERE ";
+             }
+ 
+             if(toTime != null && fromTime != null && toTime.after(fromTime)){
+                 query += "e.creationTime > '" + fromTime +  "' " + "AND e.creationTime <'" + toTime + "' AND ";
+             }
+ 
+             filters.remove(StatusConstants.STATE);
+             if (filters != null && filters.size() != 0) {
+                 for (String field : filters.keySet()) {
+                     String filterVal = filters.get(field);
+                     if (field.equals(ExperimentConstants.EXECUTION_USER)) {
+                         query += "e." + field + "= '" + filterVal + "' AND ";
+                     }else if (field.equals(ExperimentConstants.GATEWAY_ID)) {
+                         query += "e." + field + "= '" + filterVal + "' AND ";
+                     } else if (field.equals(ExperimentConstants.PROJECT_ID)) {
+                         query += "e." + field + "= '" + filterVal + "' AND ";
+                     } else {
+                         if (filterVal.contains("*")){
+                             filterVal = filterVal.replaceAll("\\*", "");
+                         }
+                         query += "e." + field + " LIKE '%" + filterVal + "%' AND ";
+                     }
+                 }
+             }
+             query = query.substring(0, query.length() - 5);
+ 
+             //ordering
+             if( orderByIdentifier != null && resultOrderType != null
+                     && orderByIdentifier.equals(Constants.FieldConstants.ExperimentConstants.CREATION_TIME)){
+                 String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : "DESC";
+                 query += " ORDER BY e." + ExperimentConstants.CREATION_TIME + " " + order;
+             }
+ 
+             em = ResourceUtils.getEntityManager();
+             em.getTransaction().begin();
+             Query q;
+ 
+             //pagination
+             if(offset>=0 && limit >=0){
+                 q = em.createQuery(query).setFirstResult(offset).setMaxResults(limit);
+             }else{
+                 q = em.createQuery(query);
+             }
+             OpenJPAQuery kq = OpenJPAPersistence.cast(q);
+             JDBCFetchPlan fetch = (JDBCFetchPlan) kq.getFetchPlan();
+             fetch.setEagerFetchMode(FetchMode.JOIN);
+ 
+             List resultList = q.getResultList();
+             for (Object o : resultList) {
 -                Experiment experiment = (Experiment) o;
++                Experiment experiment = (Experiment) ((Object[])o)[0];
++                Status experimentStatus = (Status) ((Object[])o)[1];
++                experiment.setExperimentStatus(experimentStatus);
+                 ExperimentSummaryResource experimentSummaryResource =
+                         (ExperimentSummaryResource) Utils.getResource(ResourceType.EXPERIMENT_SUMMARY, experiment);
+                 result.add(experimentSummaryResource);
+             }
+             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 result;
+     }
+ 
+     /**
+      *
+      * @return list of experiments for the user
+      */
+     public List<ExperimentResource> getExperimentsByCaching(String user) throws RegistryException{
+         List<ExperimentResource> result = new ArrayList<ExperimentResource>();
+         EntityManager em = null;
+         try {
+             String query = "SELECT e from Experiment e WHERE e.executionUser = '" + user + "'";
+             em = ResourceUtils.getEntityManager();
+ //        OpenJPAEntityManagerFactory oemf = OpenJPAPersistence.cast(em.getEntityManagerFactory());
+ //        QueryResultCache qcache = oemf.getQueryResultCache();
+             // qcache.evictAll(Experiment.class);
+             em.getTransaction().begin();
+             Query q = em.createQuery(query);
+             List resultList = q.getResultList();
+             for (Object o : resultList) {
+                 Experiment experiment = (Experiment) o;
+                 ExperimentResource experimentResource = (ExperimentResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                 result.add(experimentResource);
+             }
+             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 result;
+     }
+ }