From 889f42ef64b4a7ce5dc44cfb178bbdfeceb70495 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 13 Oct 2010 22:41:13 +0200 Subject: [PATCH] It adds a new functionality to EntitySequenceDAO to skip repeated code sequences. If code sequence is added by importation services , this functionality lets skip repeated codes and update the last value of the entity code sequence. FEA :ItEr61S04NavalPlanEntities --- .../common/daos/EntitySequenceDAO.java | 14 ++++++- .../common/entities/EntityNameEnum.java | 37 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/EntitySequenceDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/EntitySequenceDAO.java index 6d19dcb31..85f1c6fc7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/EntitySequenceDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/daos/EntitySequenceDAO.java @@ -98,10 +98,20 @@ public class EntitySequenceDAO extends public String getNextEntityCode(EntityNameEnum entityName) { for (int i = 0; i < 5; i++) { try { + String code; + Integer cont = 0; EntitySequence entitySequence = getActiveEntitySequence(entityName); - entitySequence.incrementLastValue(); + + do { + entitySequence.incrementLastValue(); + code = entitySequence.getCode(); + cont++; + } while (entityName.getIntegrationEntityDAO() + .existsByCode(code) + && cont < 100); + save(entitySequence); - return entitySequence.getCode(); + return code; } catch (HibernateOptimisticLockingFailureException e) { // Do nothing (optimistic approach 5 attempts) } catch (InstanceNotFoundException e) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/EntityNameEnum.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/EntityNameEnum.java index aa0cc7f4d..f3f5f9bb0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/EntityNameEnum.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/EntityNameEnum.java @@ -22,6 +22,17 @@ package org.navalplanner.business.common.entities; import static org.navalplanner.business.i18n.I18nHelper._; +import org.navalplanner.business.calendars.entities.CalendarData; +import org.navalplanner.business.common.IntegrationEntity; +import org.navalplanner.business.common.Registry; +import org.navalplanner.business.common.daos.IIntegrationEntityDAO; +import org.navalplanner.business.labels.entities.LabelType; +import org.navalplanner.business.materials.entities.UnitType; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.resources.entities.CriterionType; +import org.navalplanner.business.resources.entities.Machine; +import org.navalplanner.business.resources.entities.Worker; + /** * It represents the entities which use code generation * @author Susana Montes Pedreira @@ -40,4 +51,30 @@ public enum EntityNameEnum { public String getDescription() { return this.description; } + + public IIntegrationEntityDAO getIntegrationEntityDAO() { + switch (this) { + case ORDER: + return (IIntegrationEntityDAO) Registry.getOrderDAO(); + case CRITERION: + return (IIntegrationEntityDAO) Registry + .getCriterionTypeDAO(); + case LABEL: + return (IIntegrationEntityDAO) Registry + .getLabelTypeDAO(); + case MACHINE: + return (IIntegrationEntityDAO) Registry.getMachineDAO(); + case WORKER: + return (IIntegrationEntityDAO) Registry.getWorkerDAO(); + case UNIT_TYPE: + return (IIntegrationEntityDAO) Registry.getUnitTypeDAO(); + case CALENDAR: + return (IIntegrationEntityDAO) Registry + .getCalendarDataDAO(); + default: + throw new RuntimeException("can't handle the code sequence of the " + + description); + } + } + }