From 94f3763e32493340d5f775b217e85c7a0c3ed5bb Mon Sep 17 00:00:00 2001 From: miciele Ghiorghis Date: Tue, 26 Mar 2013 15:56:12 +0100 Subject: [PATCH] jira and tim-connector: Constraints for JobSchedulerConfiguration --- .../libreplan/business/common/Registry.java | 15 +++++++ .../daos/IJobSchedulerConfigurationDAO.java | 40 +++++++++++++++++++ .../daos/JobSchedulerConfigurationDAO.java | 31 ++++++++++++++ .../entities/JobSchedulerConfiguration.java | 22 ++++++++++ 4 files changed, 108 insertions(+) diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/Registry.java b/libreplan-business/src/main/java/org/libreplan/business/common/Registry.java index bcbe9dafa..441e6d264 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/Registry.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/Registry.java @@ -30,6 +30,7 @@ import org.libreplan.business.calendars.daos.ICalendarExceptionTypeDAO; import org.libreplan.business.common.daos.IConfigurationDAO; import org.libreplan.business.common.daos.IConnectorDAO; import org.libreplan.business.common.daos.IEntitySequenceDAO; +import org.libreplan.business.common.daos.IJobSchedulerConfigurationDAO; import org.libreplan.business.costcategories.daos.ICostCategoryDAO; import org.libreplan.business.costcategories.daos.IHourCostDAO; import org.libreplan.business.costcategories.daos.IResourcesCostCategoryAssignmentDAO; @@ -45,6 +46,7 @@ import org.libreplan.business.materials.daos.IUnitTypeDAO; import org.libreplan.business.orders.daos.IHoursGroupDAO; import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.daos.IOrderElementDAO; +import org.libreplan.business.orders.daos.IOrderSyncInfoDAO; import org.libreplan.business.planner.daos.ITaskElementDAO; import org.libreplan.business.qualityforms.daos.IQualityFormDAO; import org.libreplan.business.resources.daos.ICriterionDAO; @@ -207,6 +209,12 @@ public class Registry { @Autowired private IConnectorDAO connectorDAO; + @Autowired + private IOrderSyncInfoDAO orderSyncInfoDAO; + + @Autowired + private IJobSchedulerConfigurationDAO jobSchedulerConfigurationDAO; + @Autowired private IAdHocTransactionService transactionServiceDAO; @@ -387,4 +395,11 @@ public class Registry { return getInstance().connectorDAO; } + public static IOrderSyncInfoDAO getOrderSyncInfoDAO() { + return getInstance().orderSyncInfoDAO; + } + + public static IJobSchedulerConfigurationDAO getJobSchedulerConfigurationDAO() { + return getInstance().jobSchedulerConfigurationDAO; + } } diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/IJobSchedulerConfigurationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/IJobSchedulerConfigurationDAO.java index 0e0cfbd4d..4f1bfe23a 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/daos/IJobSchedulerConfigurationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/IJobSchedulerConfigurationDAO.java @@ -31,10 +31,50 @@ import org.libreplan.business.common.entities.JobSchedulerConfiguration; public interface IJobSchedulerConfigurationDAO extends IGenericDAO { + /** + * Returns all {@link JobSchedulerConfiguration} + */ List getAll(); + /** + * Searches and returns {@link JobSchedulerConfiguration} for the given + * connectorName + * + * @param connectorName + * the name of the connector + */ List findByConnectorName(String connectorName); + /** + * Searches and returns {@link JobSchedulerConfiguration} for the given + * jobGroup and jobName + * + * @param jobGroup + * @param jobName + */ JobSchedulerConfiguration findByJobGroupAndJobName(String jobGroup, String jobName); + + /** + * Returns true if there exists other @{link JobSchedulerConfiguration} with + * the same {@link JobSchedulerConfiguration#getJobGroup()} and + * {@link JobSchedulerConfiguration#getJobName() + * + * @param jobSchedulerConfiguration + * the {@link JobSchedulerConfiguration} + */ + boolean existsByJobGroupAndJobNameAnotherTransaction( + JobSchedulerConfiguration jobSchedulerConfiguration); + + /** + * Returns unique {@link JobSchedulerConfiguration} for the specified + * JobGroup and JobName + * + * @param jobGroup + * the jobGroup + * @param jobName + * the jobName + */ + JobSchedulerConfiguration findUniqueByJobGroupAndJobNameAnotherTransaction( + String jobGroup, String jobName); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/JobSchedulerConfigurationDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/JobSchedulerConfigurationDAO.java index b07db6648..f07ad1fce 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/daos/JobSchedulerConfigurationDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/JobSchedulerConfigurationDAO.java @@ -24,9 +24,11 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import org.libreplan.business.common.entities.JobSchedulerConfiguration; +import org.libreplan.business.orders.entities.OrderSyncInfo; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** @@ -66,4 +68,33 @@ public class JobSchedulerConfigurationDAO extends return ((List) c.list()); } + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public boolean existsByJobGroupAndJobNameAnotherTransaction( + JobSchedulerConfiguration jobSchedulerConfiguration) { + return existsOtherJobByGroupAndName(jobSchedulerConfiguration); + } + + /** + * Returns true if other {@link JobSchedulerConfiguration} which is the same + * as the given {@link OrderSyncInfo} already exists + * + * @param jobSchedulerConfiguration + * the {@link JobSchedulerConfiguration} + */ + private boolean existsOtherJobByGroupAndName( + JobSchedulerConfiguration jobSchedulerConfiguration) { + JobSchedulerConfiguration found = findByJobGroupAndJobName( + jobSchedulerConfiguration.getJobGroup(), + jobSchedulerConfiguration.getJobName()); + return found != null && found != jobSchedulerConfiguration; + } + + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public JobSchedulerConfiguration findUniqueByJobGroupAndJobNameAnotherTransaction( + String jobGroup, String jobName) { + return findByJobGroupAndJobName(jobGroup, jobName); + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/JobSchedulerConfiguration.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/JobSchedulerConfiguration.java index c801225d2..d9f970d8a 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/JobSchedulerConfiguration.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/JobSchedulerConfiguration.java @@ -19,9 +19,13 @@ package org.libreplan.business.common.entities; +import org.apache.commons.lang.StringUtils; +import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; import org.libreplan.business.common.BaseEntity; import org.libreplan.business.common.IHumanIdentifiable; +import org.libreplan.business.common.Registry; +import org.libreplan.business.common.daos.IJobSchedulerConfigurationDAO; /** * JobSchedulerConfiguration entity, represents parameters for the jobs to be @@ -115,4 +119,22 @@ public class JobSchedulerConfiguration extends BaseEntity implements public String getHumanId() { return jobGroup == null ? "" : jobGroup; } + + @AssertTrue(message = "job group and name are already being used") + public boolean checkConstraintUniqueJobGroupAndName() { + if (StringUtils.isBlank(jobGroup) && StringUtils.isBlank(jobName)) { + return true; + } + IJobSchedulerConfigurationDAO jobSchedulerConfigurationDAO = Registry + .getJobSchedulerConfigurationDAO(); + if (isNewObject()) { + return !jobSchedulerConfigurationDAO + .existsByJobGroupAndJobNameAnotherTransaction(this); + } else { + JobSchedulerConfiguration found = jobSchedulerConfigurationDAO + .findUniqueByJobGroupAndJobNameAnotherTransaction(jobGroup, + jobName); + return found == null || found.getId().equals(getId()); + } + } }