Return-Path: X-Original-To: apmail-airavata-commits-archive@www.apache.org Delivered-To: apmail-airavata-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 951BC1850F for ; Sun, 7 Jun 2015 17:00:44 +0000 (UTC) Received: (qmail 93462 invoked by uid 500); 7 Jun 2015 17:00:44 -0000 Delivered-To: apmail-airavata-commits-archive@airavata.apache.org Received: (qmail 93271 invoked by uid 500); 7 Jun 2015 17:00:44 -0000 Mailing-List: contact commits-help@airavata.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airavata.apache.org Delivered-To: mailing list commits@airavata.apache.org Received: (qmail 92473 invoked by uid 99); 7 Jun 2015 17:00:43 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 07 Jun 2015 17:00:43 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id BBF9EE0B33; Sun, 7 Jun 2015 17:00:43 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: scnakandala@apache.org To: commits@airavata.apache.org Date: Sun, 07 Jun 2015 17:01:02 -0000 Message-Id: <2ea2b0d34a034a22a5481fc84d338858@git.apache.org> In-Reply-To: <9a9adeb952bf416abcc2b68d3031ff60@git.apache.org> References: <9a9adeb952bf416abcc2b68d3031ff60@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [21/44] airavata git commit: Adding mongo-registry WIP Adding mongo-registry WIP Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/e13d90da Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/e13d90da Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/e13d90da Branch: refs/heads/mongo-registry Commit: e13d90da792ba825dc9e279c66f79130b4a955ff Parents: fed06c2 Author: Supun Nakandala Authored: Wed May 27 00:16:12 2015 +0530 Committer: Supun Nakandala Committed: Wed May 27 00:16:14 2015 +0530 ---------------------------------------------------------------------- .../persistance/registry/jpa/JPAConstants.java | 33 + .../persistance/registry/jpa/Resource.java | 71 + .../persistance/registry/jpa/ResourceType.java | 49 + .../persistance/registry/jpa/ResourceUtils.java | 525 ++++++ .../registry/jpa/impl/ExperimentRegistry.java | 1773 ++++++++++++++++++ .../registry/jpa/impl/GatewayRegistry.java | 115 ++ .../registry/jpa/impl/LoggingRegistryImpl.java | 97 + .../registry/jpa/impl/ProjectRegistry.java | 305 +++ .../registry/jpa/impl/RegistryFactory.java | 80 + .../persistance/registry/jpa/impl/UserReg.java | 41 + .../jpa/model/AdvancedInputDataHandling.java | 129 ++ .../jpa/model/AdvancedOutputDataHandling.java | 119 ++ .../registry/jpa/model/ApplicationInput.java | 173 ++ .../registry/jpa/model/ApplicationInput_PK.java | 65 + .../registry/jpa/model/ApplicationOutput.java | 150 ++ .../jpa/model/ApplicationOutput_PK.java | 64 + .../Computational_Resource_Scheduling.java | 190 ++ .../registry/jpa/model/Configuration.java | 80 + .../registry/jpa/model/Configuration_PK.java | 74 + .../registry/jpa/model/DataTransferDetail.java | 88 + .../registry/jpa/model/ErrorDetail.java | 196 ++ .../registry/jpa/model/Experiment.java | 211 +++ .../jpa/model/ExperimentConfigData.java | 106 ++ .../registry/jpa/model/Experiment_Input.java | 178 ++ .../registry/jpa/model/Experiment_Input_PK.java | 64 + .../registry/jpa/model/Experiment_Output.java | 151 ++ .../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 | 120 ++ .../registry/jpa/model/JobDetails_PK.java | 64 + .../registry/jpa/model/NodeInput.java | 171 ++ .../registry/jpa/model/NodeInput_PK.java | 64 + .../registry/jpa/model/NodeOutput.java | 148 ++ .../registry/jpa/model/NodeOutput_PK.java | 64 + .../registry/jpa/model/Notification_Email.java | 97 + .../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 | 119 ++ .../persistance/registry/jpa/model/Status.java | 174 ++ .../registry/jpa/model/TaskDetail.java | 119 ++ .../persistance/registry/jpa/model/Users.java | 55 + .../registry/jpa/model/WorkflowNodeDetail.java | 107 ++ .../registry/jpa/mongo/ExperimentRegistry.java | 28 + .../persistance/registry/jpa/mongo/Test.java | 81 + .../conversion/AbstractThriftDeserializer.java | 152 ++ .../conversion/AbstractThriftSerializer.java | 122 ++ .../mongo/conversion/ModelConversionHelper.java | 218 +++ .../idot/InputDataObjectTypeDeserializer.java | 44 + .../idot/InputDataObjectTypeSerializer.java | 41 + .../odot/OutputDataObjectTypeDeserializer.java | 44 + .../odot/OutputDataObjectTypeSerializer.java | 41 + .../experiment/ExperimentDeserializer.java | 44 + .../experiment/ExperimentSerializer.java | 41 + .../AdvancedInputDataHandlingDeserializer.java | 44 + .../AdvancedInputDataHandlingSerializer.java | 41 + .../AdvancedOutputDataHandlingDeserializer.java | 44 + .../AdvancedOutputDataHandlingSerializer.java | 41 + .../ApplicationStatusDeserializer.java | 44 + .../appstatus/ApplicationStatusSerializer.java | 42 + ...utationalResourceSchedulingDeserializer.java | 44 + ...mputationalResourceSchedulingSerializer.java | 41 + .../DataTransferDetailsDeserializer.java | 44 + .../DataTransferDetailsSerializer.java | 41 + .../errdetails/ErrorDetailsDeserializer.java | 44 + .../errdetails/ErrorDetailsSerializer.java | 41 + .../expstatus/ExperimentStatusDeserializer.java | 44 + .../expstatus/ExperimentStatusSerializer.java | 41 + .../ExperimentSummaryDeserializer.java | 44 + .../expsummary/ExperimentSummarySerializer.java | 41 + .../jobdetails/JobDetailsDeserializer.java | 44 + .../jobdetails/JobDetailsSerializer.java | 41 + .../jobstatus/JobStatusDeserializer.java | 44 + .../jobstatus/JobStatusSerializer.java | 41 + .../QualityOfServiceParamsDeserializer.java | 44 + .../qosp/QualityOfServiceParamsSerializer.java | 41 + .../taskdetails/TaskDetailsDeserializer.java | 44 + .../taskdetails/TaskDetailsSerializer.java | 41 + .../taskstatus/TaskStatusDeserializer.java | 44 + .../taskstatus/TaskStatusSerializer.java | 41 + .../trstatus/TransferStatusDeserializer.java | 44 + .../trstatus/TransferStatusSerializer.java | 41 + .../UserConfigurationDataDeserializer.java | 44 + .../ucdata/UserConfigurationDataSerializer.java | 41 + .../ValidationResultsDeserializer.java | 44 + .../ValidationResultsSerializer.java | 41 + .../ValidatorResultDeserializer.java | 44 + .../ValidatorResultSerializer.java | 41 + .../wfnd/WorkflowNodeDetailsDeserializer.java | 44 + .../wfnd/WorkflowNodeDetailsSerializer.java | 41 + .../wfns/WorkflowNodeStatusDeserializer.java | 44 + .../wfns/WorkflowNodeStatusSerializer.java | 41 + .../conversion/gateway/GatewayDeserializer.java | 44 + .../conversion/gateway/GatewaySerializer.java | 41 + .../conversion/group/GroupDeserializer.java | 44 + .../mongo/conversion/group/GroupSerializer.java | 41 + .../conversion/project/ProjectDeserializer.java | 44 + .../conversion/project/ProjectSerializer.java | 40 + .../mongo/conversion/user/UserDeserializer.java | 44 + .../mongo/conversion/user/UserSerializer.java | 40 + .../registry/jpa/mongo/dao/ExperimentDao.java | 346 ++++ .../registry/jpa/mongo/utils/MongoUtil.java | 70 + .../jpa/resources/AbstractResource.java | 317 ++++ .../AdvanceInputDataHandlingResource.java | 168 ++ .../AdvancedOutputDataHandlingResource.java | 159 ++ .../jpa/resources/ApplicationInputResource.java | 235 +++ .../resources/ApplicationOutputResource.java | 213 +++ .../ComputationSchedulingResource.java | 229 +++ .../jpa/resources/ConfigDataResource.java | 162 ++ .../jpa/resources/ConfigurationResource.java | 208 ++ .../resources/DataTransferDetailResource.java | 272 +++ .../jpa/resources/ErrorDetailResource.java | 229 +++ .../jpa/resources/ExperimentInputResource.java | 229 +++ .../jpa/resources/ExperimentOutputResource.java | 209 +++ .../jpa/resources/ExperimentResource.java | 777 ++++++++ .../registry/jpa/resources/GatewayResource.java | 436 +++++ .../jpa/resources/JobDetailResource.java | 361 ++++ .../jpa/resources/NodeInputResource.java | 231 +++ .../jpa/resources/NodeOutputResource.java | 211 +++ .../resources/NotificationEmailResource.java | 125 ++ .../registry/jpa/resources/ProjectResource.java | 531 ++++++ .../jpa/resources/ProjectUserResource.java | 123 ++ .../jpa/resources/QosParamResource.java | 152 ++ .../registry/jpa/resources/StatusResource.java | 195 ++ .../jpa/resources/TaskDetailResource.java | 661 +++++++ .../registry/jpa/resources/UserResource.java | 186 ++ .../registry/jpa/resources/Utils.java | 824 ++++++++ .../registry/jpa/resources/WorkerResource.java | 908 +++++++++ .../resources/WorkflowNodeDetailResource.java | 473 +++++ .../registry/jpa/utils/QueryGenerator.java | 128 ++ .../jpa/utils/ThriftDataModelConversion.java | 714 +++++++ .../src/main/resources/META-INF/persistence.xml | 65 + .../main/resources/airavata-server.properties | 280 +++ .../src/main/resources/registry-derby.sql | 391 ++++ .../src/main/resources/registry-mysql.sql | 392 ++++ .../registry/mongo/ExperimentDaoTest.java | 268 +++ .../registry/RegistryUseCaseTest.java | 291 +++ modules/registry/pom.xml | 1 + 140 files changed, 21565 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/e13d90da/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/JPAConstants.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/JPAConstants.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/JPAConstants.java new file mode 100644 index 0000000..deb3ba2 --- /dev/null +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/JPAConstants.java @@ -0,0 +1,33 @@ +/* + * + * 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.persistance.registry.jpa; + +public class JPAConstants { + public static final String KEY_JDBC_URL = "registry.jdbc.url"; + public static final String KEY_JDBC_USER = "registry.jdbc.user"; + public static final String KEY_JDBC_PASSWORD = "registry.jdbc.password"; + public static final String KEY_JDBC_DRIVER = "registry.jdbc.driver"; + public static final String KEY_DERBY_START_ENABLE = "start.derby.server.mode"; + public static final String VALIDATION_QUERY = "validationQuery"; + public static final String JPA_CACHE_SIZE = "jpa.cache.size"; + public static final String ENABLE_CACHING = "cache.enable"; +} http://git-wip-us.apache.org/repos/asf/airavata/blob/e13d90da/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/Resource.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/Resource.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/Resource.java new file mode 100644 index 0000000..640f771 --- /dev/null +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/Resource.java @@ -0,0 +1,71 @@ +/* + * + * 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.persistance.registry.jpa; + +import org.apache.airavata.registry.cpi.RegistryException; + +import java.util.List; + +public interface Resource { + /** + * This method will create associate resource objects for the given resource type. + * @param type child resource type + * @return associate child resource + */ + Resource create(ResourceType type) throws RegistryException, RegistryException; + + /** + * This method will remove the given child resource from the database + * @param type child resource type + * @param name child resource name + */ + void remove(ResourceType type, Object name) throws RegistryException; + + /** + * This method will return the given child resource from the database + * @param type child resource type + * @param name child resource name + * @return associate child resource + */ + Resource get(ResourceType type, Object name) throws RegistryException; + + /** + * This method will list all the child resources for the given resource type + * @param type child resource type + * @return list of child resources of the given child resource type + */ + List get(ResourceType type) throws RegistryException; + + /** + * This method will saveExperiment the resource to the database. + */ + void save() throws RegistryException; + + /** + * This method will check whether an entry from the given resource type and resource name + * exists in the database + * @param type child resource type + * @param name child resource name + * @return whether the entry exists in the database or not + */ + boolean isExists(ResourceType type, Object name) throws RegistryException; + +} http://git-wip-us.apache.org/repos/asf/airavata/blob/e13d90da/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java new file mode 100644 index 0000000..0a38664 --- /dev/null +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java @@ -0,0 +1,49 @@ +/* + * + * 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.persistance.registry.jpa; + +public enum ResourceType { + GATEWAY, + PROJECT, + USER, + PROJECT_USER, + CONFIGURATION, + GATEWAY_WORKER, + EXPERIMENT, + NOTIFICATION_EMAIL, + EXPERIMENT_INPUT, + EXPERIMENT_OUTPUT, + WORKFLOW_NODE_DETAIL, + TASK_DETAIL, + ERROR_DETAIL, + APPLICATION_INPUT, + APPLICATION_OUTPUT, + NODE_INPUT, + NODE_OUTPUT, + JOB_DETAIL, + DATA_TRANSFER_DETAIL, + STATUS, + CONFIG_DATA, + COMPUTATIONAL_RESOURCE_SCHEDULING, + ADVANCE_INPUT_DATA_HANDLING, + ADVANCE_OUTPUT_DATA_HANDLING, + QOS_PARAM +} http://git-wip-us.apache.org/repos/asf/airavata/blob/e13d90da/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceUtils.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceUtils.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceUtils.java new file mode 100644 index 0000000..4b6fc80 --- /dev/null +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceUtils.java @@ -0,0 +1,525 @@ +/* + * + * 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.persistance.registry.jpa; + +import org.apache.airavata.persistance.registry.jpa.model.*; +import org.apache.airavata.persistance.registry.jpa.resources.*; +import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator; +import org.apache.airavata.registry.cpi.RegistryException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.Query; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ResourceUtils { + private final static Logger logger = LoggerFactory.getLogger(ResourceUtils.class); + private static final String PERSISTENCE_UNIT_NAME = "airavata_data"; + protected static EntityManagerFactory factory; + + public static void reset(){ + factory=null; + } + + public static EntityManager getEntityManager(){ + if (factory == null) { + String connectionProperties = "DriverClassName=" + Utils.getJDBCDriver() + "," + "Url=" + Utils.getJDBCURL() + "?autoReconnect=true,," + + "Username=" + Utils.getJDBCUser() + "," + "Password=" + Utils.getJDBCPassword() + ",validationQuery=" + + Utils.getValidationQuery(); + System.out.println(connectionProperties); + Map properties = new HashMap(); + properties.put("openjpa.ConnectionDriverName", "org.apache.commons.dbcp.BasicDataSource"); + properties.put("openjpa.ConnectionProperties", connectionProperties); + properties.put("openjpa.DynamicEnhancementAgent", "true"); + properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported"); + properties.put("openjpa.DataCache","" + Utils.isCachingEnabled() + "(CacheSize=" + Utils.getJPACacheSize() + ", SoftReferenceSize=0)"); + properties.put("openjpa.QueryCache","" + Utils.isCachingEnabled() + "(CacheSize=" + Utils.getJPACacheSize() + ", SoftReferenceSize=0)"); + properties.put("openjpa.RemoteCommitProvider","sjvm"); + properties.put("openjpa.Log","DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=INFO"); + properties.put("openjpa.jdbc.DBDictionary","SupportsMultipleNontransactionalResultSets=false"); +// properties.put("openjpa.ReadLockLevel", "none"); +// properties.put("openjpa.WriteLockLevel", "none"); +// properties.put("openjpa.LockTimeout", "30000"); +// properties.put("openjpa.LockManager", "none"); + properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)"); + properties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=31536000, autoReconnect=true"); + properties.put("openjpa.jdbc.QuerySQLCache", "false"); + factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties); + } + return factory.createEntityManager(); + } + + /** + * @param gatewayId + * @return + */ + public static Resource createGateway(String gatewayId) throws RegistryException { + if (!isGatewayExist(gatewayId)) { + GatewayResource gatewayResource = new GatewayResource(); + gatewayResource.setGatewayId(gatewayId); + return gatewayResource; + }else { + return getGateway(gatewayId); + } + } + + public static UserResource createUser(String username, String password) throws RegistryException { + if (!isUserExist(username)) { + UserResource userResource = new UserResource(); + userResource.setUserName(username); + userResource.setPassword(password); + return userResource; + }else { + return (UserResource)getUser(username); + } + + } + + public static Resource getGateway(String gatewayId) throws RegistryException{ + EntityManager em = null; + try { + if (isGatewayExist(gatewayId)) { + em = getEntityManager(); + Gateway gateway = em.find(Gateway.class, gatewayId); + GatewayResource gatewayResource = (GatewayResource)Utils.getResource(ResourceType.GATEWAY, gateway); + em.close(); + return gatewayResource; + } + }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 null; + } + + public static void addUser (String userName, String password) throws RegistryException{ + UserResource resource = new UserResource(); + resource.setUserName(userName); + resource.setPassword(password); + resource.save(); + } + + public static boolean isUserExist (String username) throws RegistryException{ + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.USERS); + generator.setParameter(AbstractResource.UserConstants.USERNAME, username); + Query q = generator.selectQuery(em); + int size = q.getResultList().size(); + em.getTransaction().commit(); + em.close(); + return size>0; + } 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 static Resource getUser(String userName) throws RegistryException{ + EntityManager em = null; + try { + if (isUserExist(userName)) { + em = getEntityManager(); + Users user = em.find(Users.class, userName); + UserResource userResource = (UserResource)Utils.getResource(ResourceType.USER, user); + em.close(); + return userResource; + } + }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 null; + + } + + public static Resource getWorker(String gatewayId, String userName) throws RegistryException{ + EntityManager em = null; + try { + em = getEntityManager(); + Gateway_Worker gatewayWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gatewayId, userName)); + WorkerResource workerResource = (WorkerResource) Utils.getResource(ResourceType.GATEWAY_WORKER, gatewayWorker); + em.close(); + return workerResource; + }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 gatewayId + * @return + */ + public static boolean isGatewayExist(String gatewayId) throws RegistryException{ + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.GATEWAY); + generator.setParameter(AbstractResource.GatewayConstants.GATEWAY_ID, gatewayId); + Query q = generator.selectQuery(em); + int size = q.getResultList().size(); + em.getTransaction().commit(); + em.close(); + return size>0; + }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 static List getAllGateways() throws RegistryException{ + List resourceList = new ArrayList(); + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.GATEWAY); + Query q = generator.selectQuery(em); + List results = q.getResultList(); + if (results.size() != 0) { + for (Object result : results) { + Gateway gateway = (Gateway) result; + GatewayResource gatewayResource = + (GatewayResource) Utils.getResource(ResourceType.GATEWAY, gateway); + resourceList.add(gatewayResource); + } + } + 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; + } + + /** + * @param gatewayId + * @return + */ + public static boolean removeGateway(String gatewayId) { + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.GATEWAY); + generator.setParameter(AbstractResource.GatewayConstants.GATEWAY_ID, gatewayId); + Query q = generator.deleteQuery(em); + q.executeUpdate(); + em.getTransaction().commit(); + em.close(); + return true; + } catch (Exception e) { + logger.error(e.getMessage(), e); + return false; + }finally { + if (em != null && em.isOpen()){ + if (em.getTransaction().isActive()){ + em.getTransaction().rollback(); + } + em.close(); + } + } + } + + /** + * @param gatewayResource + * @param userResource + */ + public static WorkerResource addGatewayWorker(GatewayResource gatewayResource, UserResource userResource) throws RegistryException{ + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + if (!isGatewayExist(gatewayResource.getGatewayName())){ + gatewayResource.save(); + } + if (!isUserExist(userResource.getUserName())){ + userResource.save(); + } + Gateway gateway = em.find(Gateway.class, gatewayResource.getGatewayId()); + Users user = em.find(Users.class, userResource.getUserName()); + Gateway_Worker gatewayWorker = new Gateway_Worker(); + gatewayWorker.setGateway(gateway); + gatewayWorker.setUser(user); + em.persist(gatewayWorker); + em.getTransaction().commit(); + em.close(); + return (WorkerResource)Utils.getResource(ResourceType.GATEWAY_WORKER, gatewayWorker); + } 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 gatewayResource + * @param userResource + * @return + */ + public static boolean removeGatewayWorker(GatewayResource gatewayResource, UserResource userResource) { + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.GATEWAY_WORKER); + generator.setParameter(AbstractResource.GatewayWorkerConstants.GATEWAY_ID, + gatewayResource.getGatewayName()); + generator.setParameter(AbstractResource.UserConstants.USERNAME, userResource.getUserName()); + Query q = generator.deleteQuery(em); + q.executeUpdate(); + em.getTransaction().commit(); + em.close(); + return true; + } catch (Exception e) { + logger.error(e.getMessage(), e); + return false; + }finally { + if (em != null && em.isOpen()){ + if (em.getTransaction().isActive()){ + em.getTransaction().rollback(); + } + em.close(); + } + } + + } + + /** + * @param configKey + * @return + */ + public static List getConfigurations(String configKey){ + List list = new ArrayList(); + EntityManager em = null; + try { + em = getEntityManager(); + em.getTransaction().begin(); + QueryGenerator generator = new QueryGenerator(AbstractResource.CONFIGURATION); + generator.setParameter(AbstractResource.ConfigurationConstants.CONFIG_KEY, configKey); + Query q = generator.selectQuery(em); + List resultList = q.getResultList(); + if (resultList.size() != 0) { + for (Object result : resultList) { + ConfigurationResource configurationResource = createConfigurationResourceObject(result); + list.add(configurationResource); + } + } + em.getTransaction().commit(); + em.close(); + }catch (Exception e) { + logger.error(e.getMessage(), e); + }finally { + if (em != null && em.isOpen()){ + if (em.getTransaction().isActive()){ + em.getTransaction().rollback(); + } + em.close(); + } + } + return list; + } + + /** + * @param configKey + * @return + */ + public static ConfigurationResource getConfiguration(String configKey){ + List configurations = getConfigurations(configKey); + return (configurations != null && configurations.size() > 0) ? configurations.get(0) : null; + } + + /** + * @param configKey + * @return + */ + public static boolean isConfigurationExist(String configKey){ + List configurations = getConfigurations(configKey); + return (configurations != null && configurations.size() > 0); + } + + /** + * @param configKey + * @return + */ + public static ConfigurationResource createConfiguration(String configKey) { + ConfigurationResource config = new ConfigurationResource(); + config.setConfigKey(configKey); + return config; + } + + /** + * @param result + * @return + */ + private static ConfigurationResource createConfigurationResourceObject( + Object result) { + Configuration configuration = (Configuration) result; + ConfigurationResource configurationResource = new ConfigurationResource(configuration.getConfig_key(), configuration.getConfig_val()); + configurationResource.setExpireDate(configuration.getExpire_date()); + return configurationResource; + } + + /** + * @param configkey + * @param configValue + */ + public static void removeConfiguration(String configkey, String configValue) throws RegistryException{ + QueryGenerator queryGenerator = new QueryGenerator(AbstractResource.CONFIGURATION); + queryGenerator.setParameter(AbstractResource.ConfigurationConstants.CONFIG_KEY, configkey); + queryGenerator.setParameter(AbstractResource.ConfigurationConstants.CONFIG_VAL, configValue); + EntityManager em = null; + try { + if(isConfigurationExists(configkey, configValue)){ + em = getEntityManager(); + em.getTransaction().begin(); + Query q = queryGenerator.deleteQuery(em); + q.executeUpdate(); + 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 configkey + */ + public static void removeConfiguration(String configkey) throws RegistryException{ + QueryGenerator queryGenerator = new QueryGenerator(AbstractResource.CONFIGURATION); + queryGenerator.setParameter(AbstractResource.ConfigurationConstants.CONFIG_KEY, configkey); + EntityManager em = null; + try { + if(isConfigurationExist(configkey)){ + em = getEntityManager(); + em.getTransaction().begin(); + Query q = queryGenerator.deleteQuery(em); + q.executeUpdate(); + 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(); + } + } + } + + public static boolean isConfigurationExists(String configKey, String configVal) throws RegistryException{ + EntityManager em = null; + try{ + //Currently categoryID is hardcoded value + em = ResourceUtils.getEntityManager(); + Configuration existing = em.find(Configuration.class, new Configuration_PK(configKey, configVal, AbstractResource.ConfigurationConstants.CATEGORY_ID_DEFAULT_VALUE)); + em.close(); + return existing!= null; + } 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(); + } + } + } +}