branch feature/7458 updated (7f8a9fc -> ebf58da)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git from 7f8a9fc add route service (refs #7458). new 983991b Correction to context to binder new 1068bbd Ajout du type sur une référence new bd5b868 Création d'un paquetage builder pour y mettre tous les types de builders new ebf58da Deplacement de code réutilisable dans le service de base + mise en place de la transformation dto vers entite (à finir) The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit ebf58daf77949cafa19b3d75218277d58a9f6f4a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:05:04 2015 +0200 Deplacement de code réutilisable dans le service de base + mise en place de la transformation dto vers entite (à finir) commit bd5b868e25ff6701fda79304400ca9b168bfcd59 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:04:15 2015 +0200 Création d'un paquetage builder pour y mettre tous les types de builders commit 1068bbd0eb79acf93ef121598cdf2a6aabbd9403 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:03:14 2015 +0200 Ajout du type sur une référence commit 983991baaf9f300841899eb6d327739abd967a5d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:02:09 2015 +0200 Correction to context to binder Summary of changes: .../fr/ird/observe/services/dto/ReferenceDto.java | 4 + .../dto/referential/ReferentialReferenceDto.java | 3 +- .../ird/observe/services/ObserveServiceTopia.java | 57 ++++++ .../services/builder/DtoToEntityBuilder.java | 222 +++++++++++++++++++++ .../{dto => builder}/EntityToDtoBuilder.java | 109 ++++++---- .../builder/EntityToReferenceDtoBuilder.java | 49 +++++ .../EntityToReferentialReferenceDtoBuilder.java} | 32 +-- .../observe/services/dto/ObserveDtoBinders.java | 6 +- .../services/service/ReferentialServiceTopia.java | 52 +---- .../services/builder/DtoToEntityBuilderTest.java | 117 +++++++++++ .../dto => builder}/EntityToDtoBuilderTest.java | 3 +- 11 files changed, 538 insertions(+), 116 deletions(-) create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java rename observe-services-topia/src/main/java/fr/ird/observe/services/{dto => builder}/EntityToDtoBuilder.java (67%) create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferenceDtoBuilder.java rename observe-services-topia/src/main/java/fr/ird/observe/services/{dto/EntityToReferenceDtoBuilder.java => builder/EntityToReferentialReferenceDtoBuilder.java} (53%) create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java rename observe-services-topia/src/test/java/fr/ird/observe/services/{service/dto => builder}/EntityToDtoBuilderTest.java (98%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit 983991baaf9f300841899eb6d327739abd967a5d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:02:09 2015 +0200 Correction to context to binder --- .../main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java index fc11b56..a153321 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java @@ -28,11 +28,11 @@ public class ObserveDtoBinders { } public static <R extends IdDto> Binder<R, R> newDtoToReferenceBinder(Class<R> dtoType) { - return BinderFactory.newBinder(dtoType, DTO_TO_ENTITY); + return BinderFactory.newBinder(dtoType, DTO_TO_REFERENCE); } - public static <E extends TopiaEntity> Binder<E, E> newEntityToReferenceBinder(Class<E> entityType) { - return BinderFactory.newBinder(entityType, DTO_TO_ENTITY); + public static <E extends TopiaEntity, R extends IdDto> Binder<E, R> newEntityToReferenceBinder(Class<E> entityType, Class<R> dtoType) { + return BinderFactory.newBinder(entityType,dtoType, ENTITY_TO_REFERENCE); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit 1068bbd0eb79acf93ef121598cdf2a6aabbd9403 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:03:14 2015 +0200 Ajout du type sur une référence --- .../src/main/java/fr/ird/observe/services/dto/ReferenceDto.java | 4 ++++ .../ird/observe/services/dto/referential/ReferentialReferenceDto.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java index b043935..a9431ea 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java @@ -15,6 +15,10 @@ public class ReferenceDto<D extends IdDto> extends AbstractReferenceDto { protected Serializable[] labelPropertyValues; + public Class<D> getType() { + return type; + } + protected void init(Class<D> type, Iterable<String> labelPropertyNames) { this.type = type; this.labelPropertyNames = ImmutableList.copyOf(labelPropertyNames); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java index 8d9bbe9..d8fe8c9 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java @@ -24,8 +24,9 @@ public class ReferentialReferenceDto<D extends ReferentialDto> extends AbstractR I18nReferentialDto.PROPERTY_LABEL8 ); + @Override public Class<D> getType() { - return type; + return super.getType(); } public void setPropertyValue(ReferentialLocale referentialLocale, String propertyName, Serializable propertyValue) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit bd5b868e25ff6701fda79304400ca9b168bfcd59 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:04:15 2015 +0200 Création d'un paquetage builder pour y mettre tous les types de builders --- .../services/builder/DtoToEntityBuilder.java | 222 +++++++++++++++++++++ .../{dto => builder}/EntityToDtoBuilder.java | 109 ++++++---- .../builder/EntityToReferenceDtoBuilder.java | 49 +++++ .../EntityToReferentialReferenceDtoBuilder.java} | 32 +-- .../services/builder/DtoToEntityBuilderTest.java | 117 +++++++++++ .../dto => builder}/EntityToDtoBuilderTest.java | 3 +- 6 files changed, 469 insertions(+), 63 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java new file mode 100644 index 0000000..b6a04b4 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java @@ -0,0 +1,222 @@ +package fr.ird.observe.services.builder; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; +import fr.ird.observe.entities.Set; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ObserveDtoBinders; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.constants.GearType; +import fr.ird.observe.services.dto.constants.ReferenceStatus; +import fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource; +import fr.ird.observe.services.dto.constants.seine.Ownership; +import fr.ird.observe.services.dto.constants.seine.SchoolType; +import fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; + +import java.io.Closeable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; + +/** + * Created on 19/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DtoToEntityBuilder<D extends IdDto, E extends TopiaEntity> implements Closeable { + + protected final Binder<D, E> binder; + + private final ObserveServiceTopia serviceTopia; + + public static <E extends TopiaEntity, D extends IdDto> DtoToEntityBuilder<D, E> create(Class<D> dtoType, Class<E> entityType, ObserveServiceTopia serviceTopia) { + + Preconditions.checkNotNull(dtoType, "'dtoType' can't be null."); + Preconditions.checkNotNull(entityType, "'entityType' can't be null."); + Preconditions.checkNotNull(serviceTopia, "'serviceTopia' can't be null."); + + Binder<D, E> binder = ObserveDtoBinders.newDtoToEntityBinder(dtoType, entityType); + + Preconditions.checkNotNull(binder, "DtoToEntityBinder<" + dtoType.getName() + ", " + entityType.getName() + "> not found."); + + DtoToEntityBuilder<D, E> builder = new DtoToEntityBuilder<>(binder, serviceTopia); + return builder; + + } + + public void build(D dto, E entity) { + + Preconditions.checkNotNull(dto, "'dto' can't be null."); + Preconditions.checkNotNull(entity, "'entity' can't be null."); + + Map<String, Object> dtoProperties = binder.obtainProperties(dto); + + ImmutableMap.Builder<String, Object> entityProperties = new ImmutableMap.Builder<>(); + + for (Map.Entry<String, Object> entry : dtoProperties.entrySet()) { + + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + + if (isCollectionProperty(propertyValue)) { + + Class<?> collectionType = binder.getTargetPropertyType(propertyName); + + Collection<Object> entityCollection = newCollection(collectionType); + + Collection collection = (Collection) propertyValue; + + if (!collection.isEmpty()) { + + Object o1 = Iterables.get(collection, 0); + + if (o1 instanceof ReferenceDto) { + + Collection<ReferenceDto> referenceDtos = (Collection<ReferenceDto>) collection; + + for (ReferenceDto referenceDto : referenceDtos) { + + TopiaEntity propertyEntity = toEntity(referenceDto); + entityCollection.add(propertyEntity); + } + + } else if (o1 instanceof IdDto) { + + Collection<IdDto> idDtos = (Collection<IdDto>) collection; + + for (IdDto idDto : idDtos) { + + TopiaEntity propertyEntity = toEntity(idDto); + entityCollection.add(propertyEntity); + } + + } else { + + entityCollection.addAll(collection); + + } + + } + + entityProperties.put(propertyName, entityCollection); + continue; + + } + + if (propertyValue instanceof ReferenceDto) { + + propertyValue = toEntity((ReferenceDto) propertyValue); + entityProperties.put(propertyName, propertyValue); + continue; + + } + + if (propertyValue instanceof IdDto) { + + propertyValue = toEntity((IdDto) propertyValue); + entityProperties.put(propertyName, propertyValue); + continue; + + } + + // simple property + addProperty(propertyName, propertyValue, entityProperties); + + } + + binder.injectProperties(entityProperties.build(), entity); + + } + + protected TopiaEntity toEntity(ReferenceDto referenceDto) { + return serviceTopia.getEntityFromReference(referenceDto); + } + + protected TopiaEntity toEntity(IdDto idDto) { + + Class<IdDto> aClass = (Class<IdDto>) idDto.getClass(); + Class<TopiaEntity> entityType = ObserveServiceTopia.getEntityType(aClass); + TopiaEntity entity = serviceTopia.newEntity(entityType); + + DtoToEntityBuilder<IdDto, TopiaEntity> builder = create(aClass, entityType, serviceTopia); + builder.build(idDto, entity); + + return entity; + } + + @Override + public void close() { + + } + + protected DtoToEntityBuilder(Binder<D, E> binder, ObserveServiceTopia serviceTopia) { + this.binder = binder; + this.serviceTopia = serviceTopia; + } + + protected boolean isCollectionProperty(Object propertyValue) { + return propertyValue instanceof Collection; + } + + protected Collection<Object> newCollection(Object propertyValue) { + + Collection<Object> propertyValueCollection = null; + if (propertyValue instanceof Set) { + propertyValueCollection = new LinkedHashSet<>(); + } else + if (propertyValue instanceof Collection) { + propertyValueCollection = new LinkedHashSet<>(); + } + if (propertyValue instanceof List) { + propertyValueCollection = new ArrayList<>(); + } + return propertyValueCollection; + } + + protected void addProperty(String propertyName, Object propertyValue, ImmutableMap.Builder<String, Object> entitiesPropertiesBuilder) { + + if (ReferentialDto.PROPERTY_ID.equals(propertyName)) { + propertyName = TopiaEntity.TOPIA_ID; + } else if (propertyValue instanceof GearType) { + + GearType entityGearType = (GearType) propertyValue; + propertyValue = fr.ird.observe.entities.constants.GearType.valueOf(entityGearType.name()); + + } else if (propertyValue instanceof ReferenceStatus) { + + ReferenceStatus referenceStatus = (ReferenceStatus) propertyValue; + propertyValue = fr.ird.observe.entities.constants.ReferenceStatus.valueOf(referenceStatus.name()); + + } else if (propertyValue instanceof Ownership) { + + Ownership ownership = (Ownership) propertyValue; + propertyValue = Ownership.valueOf(ownership.name()); + + } else if (propertyValue instanceof SchoolType) { + + SchoolType schoolType = (SchoolType) propertyValue; + propertyValue = fr.ird.observe.entities.constants.seine.SchoolType.valueOf(schoolType.name()); + + } else if (propertyValue instanceof TypeTransmittingBuoyOperation) { + + TypeTransmittingBuoyOperation typeTransmittingBuoyOperation = (TypeTransmittingBuoyOperation) propertyValue; + propertyValue = fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation.valueOf(typeTransmittingBuoyOperation.name()); + + } else if (propertyValue instanceof NonTargetCatchComputedValueSource) { + + NonTargetCatchComputedValueSource nonTargetCatchComputedValueSource = (NonTargetCatchComputedValueSource) propertyValue; + propertyValue = fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource.valueOf(nonTargetCatchComputedValueSource.name()); + + } + + entitiesPropertiesBuilder.put(propertyName, propertyValue); + + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java similarity index 67% rename from observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java rename to observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java index 7f7d2d2..8ce3a8e 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.dto; +package fr.ird.observe.services.builder; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; @@ -13,15 +13,19 @@ import fr.ird.observe.entities.constants.seine.Ownership; import fr.ird.observe.entities.constants.seine.SchoolType; import fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ObserveDtoBinders; +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.beans.Binder; import java.io.Closeable; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.Map; /** @@ -37,15 +41,11 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen private ImmutableSet<Class<? extends IdDto>> referencesTypes; - public EntityToDtoBuilder(D result, Binder<E, D> binder) { - this.result = result; - this.binder = binder; - } - public static <E extends TopiaEntity, D extends ReferentialDto> EntityToDtoBuilder<E, D> create(Class<E> entityType, Class<D> dtoType) { - Preconditions.checkNotNull(entityType, "entityType can't be null."); - Preconditions.checkNotNull(dtoType, "dtoType can't be null."); + Preconditions.checkNotNull(entityType, "'entityType' can't be null."); + Preconditions.checkNotNull(dtoType, "'dtoType' can't be null."); + D result; try { result = dtoType.newInstance(); @@ -54,12 +54,19 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen } Binder<E, D> binder = ObserveDtoBinders.newEntityToDtoBinder(entityType, dtoType); + + Preconditions.checkNotNull(binder, "EntityToDtoBinder<" + entityType.getName() + ", " + dtoType.getName() + "> not found."); + EntityToDtoBuilder<E, D> builder = new EntityToDtoBuilder<>(result, binder); return builder; + } public D build(ReferentialLocale referentialLocale, E entity) { + Preconditions.checkNotNull(referentialLocale, "'referentialLocale' can't be null."); + Preconditions.checkNotNull(entity, "'entity' can't be null."); + ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder = new ImmutableSet.Builder<>(); Map<String, Object> entityProperties = binder.obtainProperties(entity, false); @@ -67,47 +74,46 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen ImmutableMap.Builder<String, Object> dtoPropertiesBuilder = new ImmutableMap.Builder<>(); for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { + String propertyName = entry.getKey(); Object propertyValue = entry.getValue(); - Collection<Object> propertyValueCollection = null; - if (propertyValue instanceof Set) { + if (isCollectionProperty(propertyValue)) { - propertyValueCollection = new LinkedHashSet<>(); - } - if (propertyValue instanceof Collection) { - propertyValueCollection = new LinkedList<>(); - } + Collection collection = (Collection) propertyValue; - if (propertyValueCollection != null) { + Class<?> collectionType = binder.getTargetPropertyType(propertyName); - Collection collection = (Collection) propertyValue; - if (collection.isEmpty()) { - continue; - } - Object valueToAdd = collection; + Collection<Object> dtoCollection = newCollection(collectionType); + + if (!collection.isEmpty()) { - Object o1 = Iterables.get(collection, 0); + Object o1 = Iterables.get(collection, 0); - if (o1 instanceof TopiaEntity) { + if (o1 instanceof TopiaEntity) { - Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf((TopiaEntity)o1).getContract(); + Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf((TopiaEntity) o1).getContract(); - Class dtoType = ObserveServiceTopia.getDtoType(entityType); + Class dtoType = ObserveServiceTopia.getDtoType(entityType); - Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) collection; - LinkedHashSet<ReferenceDto> references = new LinkedHashSet<>(topiaEntities.size()); - for (TopiaEntity entityValue : topiaEntities) { + Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) collection; + + for (TopiaEntity entityValue : topiaEntities) { + + dtoCollection.add(entityToRef(referentialLocale, dtoType, entityValue, referenceTypesBuilder)); + } + + } else { + + dtoCollection.addAll(collection); - references.add(entityToRef(referentialLocale, dtoType, entityValue, referenceTypesBuilder)); } - valueToAdd = references; } - addProperty(propertyName, valueToAdd, dtoPropertiesBuilder); - + addProperty(propertyName, dtoCollection, dtoPropertiesBuilder); continue; + } if (propertyValue instanceof TopiaEntity) { @@ -117,9 +123,12 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf(entityValue).getContract(); Class dtoType = ObserveServiceTopia.getDtoType(entityType); propertyValue = entityToRef(referentialLocale, dtoType, entityValue, referenceTypesBuilder); + addProperty(propertyName, propertyValue, dtoPropertiesBuilder); + continue; } + // simple property addProperty(propertyName, propertyValue, dtoPropertiesBuilder); } @@ -133,7 +142,33 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen } - private void addProperty(String propertyName, Object propertyValue, ImmutableMap.Builder<String, Object> dtoPropertiesBuilder) { + public ImmutableSet<Class<? extends IdDto>> getReferenceTypes() { + return referencesTypes; + } + + protected EntityToDtoBuilder(D result, Binder<E, D> binder) { + this.result = result; + this.binder = binder; + } + + protected boolean isCollectionProperty(Object propertyValue) { + return propertyValue instanceof Collection; + } + + protected Collection<Object> newCollection(Class<?> collectionType) { + + Collection<Object> propertyValueCollection = null; + if (LinkedHashSet.class.isAssignableFrom(collectionType)) { + propertyValueCollection = new LinkedHashSet<>(); + } else if (Set.class.isAssignableFrom(collectionType)) { + propertyValueCollection = new HashSet<>(); + } else if (Collection.class.isAssignableFrom(collectionType)) { + propertyValueCollection = new ArrayList<>(); + } + return propertyValueCollection; + } + + protected void addProperty(String propertyName, Object propertyValue, ImmutableMap.Builder<String, Object> dtoPropertiesBuilder) { if (TopiaEntity.TOPIA_ID.equals(propertyName)) { propertyName = ReferentialDto.PROPERTY_ID; @@ -180,7 +215,7 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen ReferenceDto<R> label; if (ReferentialDto.class.isAssignableFrom(dtoType)) { - label = EntityToReferenceDtoBuilder.buildReferential((Class) dtoType, referentialLocale, entityValue); + label = EntityToReferentialReferenceDtoBuilder.build((Class) dtoType, referentialLocale, entityValue); } else { label = EntityToReferenceDtoBuilder.build(dtoType, entityValue); @@ -195,8 +230,4 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen public void close() { } - - public ImmutableSet<Class<? extends IdDto>> getReferenceTypes() { - return referencesTypes; - } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferenceDtoBuilder.java new file mode 100644 index 0000000..a9e9cc2 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferenceDtoBuilder.java @@ -0,0 +1,49 @@ +package fr.ird.observe.services.builder; + +import com.google.common.base.Preconditions; +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ObserveDtoBinders; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceDtos; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; + +import java.io.Serializable; +import java.util.Map; +import java.util.Set; + +/** + * Created on 19/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EntityToReferenceDtoBuilder<E extends TopiaEntity, D extends IdDto> { + + public static <E extends TopiaEntity, D extends IdDto> ReferenceDto<D> build(Class<D> dtoType, E entity) { + + Preconditions.checkNotNull(dtoType, "'dtoType' can't be null"); + Preconditions.checkArgument(ReferentialDto.class.isAssignableFrom(dtoType), "'dtoType' can't be of type ReferentialDto, use the method buildReferential insteadnull"); + Preconditions.checkNotNull(entity, "'entity' can't be null"); + + Class<E> entityType = (Class<E>) ObserveEntityEnum.valueOf(entity).getContract(); + Binder<E, D> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType, dtoType); + + Preconditions.checkNotNull(binder, "EntityToReferenceBinder<" + entityType.getName() + ", " + dtoType.getName() + "> not found."); + + Map<String, Object> entityProperties = binder.obtainProperties(entity); + Set<String> propertyNames = entityProperties.keySet(); + + ReferenceDto<D> result = ReferenceDtos.newReferenceDto(dtoType, propertyNames); + + for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + result.setPropertyValue(propertyName, (Serializable) propertyValue); + } + return result; + + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java similarity index 53% rename from observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java rename to observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java index 0c8d288..4b9d625 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToReferentialReferenceDtoBuilder.java @@ -1,6 +1,8 @@ -package fr.ird.observe.services.dto; +package fr.ird.observe.services.builder; +import com.google.common.base.Preconditions; import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.services.dto.ObserveDtoBinders; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; @@ -17,31 +19,17 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public class EntityToReferenceDtoBuilder<E extends TopiaEntity, D extends IdDto> { +public class EntityToReferentialReferenceDtoBuilder<E extends TopiaEntity, D extends ReferentialDto> { - public static <E extends TopiaEntity, D extends IdDto> ReferenceDto<D> build(Class<D> dtoType, E entity) { + public static <E extends TopiaEntity, D extends ReferentialDto> ReferentialReferenceDto<D> build(Class<D> dtoType, ReferentialLocale referentialLocale, E entity) { - Class<E> entityType = (Class<E>) ObserveEntityEnum.valueOf(entity).getContract(); - Binder<E, E> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType); - - Map<String, Object> entityProperties = binder.obtainProperties(entity); - Set<String> propertyNames = entityProperties.keySet(); - - ReferenceDto<D> result = ReferenceDtos.newReferenceDto(dtoType, propertyNames); - - for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { - String propertyName = entry.getKey(); - Object propertyValue = entry.getValue(); - result.setPropertyValue(propertyName, (Serializable) propertyValue); - } - return result; - - } - - public static <E extends TopiaEntity, D extends ReferentialDto> ReferentialReferenceDto<D> buildReferential(Class<D> dtoType, ReferentialLocale referentialLocale, E entity) { + Preconditions.checkNotNull(dtoType, "'dtoType' can't be null"); + Preconditions.checkNotNull(referentialLocale, "'referentialLocale' can't be null"); + Preconditions.checkNotNull(entity, "'entity' can't be null"); Class<E> entityType = (Class<E>) ObserveEntityEnum.valueOf(entity).getContract(); - Binder<E, E> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType); + Binder<E, D> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType, dtoType); + Preconditions.checkNotNull(binder, "EntityToReferenceBinder<" + entityType.getName() + ", " + dtoType.getName() + "> not found."); Map<String, Object> entityProperties = binder.obtainProperties(entity); Set<String> propertyNames = entityProperties.keySet(); diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java new file mode 100644 index 0000000..72ca1a0 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java @@ -0,0 +1,117 @@ +package fr.ird.observe.services.builder; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.entities.referentiel.Organism; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.constants.GearType; +import fr.ird.observe.services.dto.constants.ReferenceStatus; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.I18nReferentialDto; +import fr.ird.observe.services.dto.referential.OrganismDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.DateUtil; + +/** + * Created on 19/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DtoToEntityBuilderTest { + + @BeforeClass + public static void setUp() throws Exception { + ObserveServiceTopia.init(); + } + + @Test + public void testCopy() { + + ObserveServiceTopia service = new ObserveServiceTopia() { + + @Override + protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { + E e = newEntity(entityType); + e.setTopiaId(id); + return e; + } + + @Override + public <E extends TopiaEntity> E newEntity(Class<E> entityType) { + + try { + return (E) ObserveEntityEnum.valueOf(entityType).getImplementation().newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("could not create instance of " + entityType.getName()); + } + } + }; + + ProgramDto programDto = new ProgramDto(); + programDto.setCode("code"); + programDto.setNeedComment(true); + programDto.setStatus(ReferenceStatus.enabled); + programDto.setLabel1("label1"); + programDto.setLabel2("label2"); + programDto.setLabel3("label3"); + programDto.setLabel4("label4"); + programDto.setLabel5("label5"); + programDto.setLabel6("label6"); + programDto.setLabel7("label7"); + programDto.setLabel8("label8"); + programDto.setId("Program1"); + programDto.setStartDate(DateUtil.createDate(1, 1, 1)); + programDto.setEndDate(DateUtil.createDate(1, 1, 2)); + programDto.setGearType(GearType.seine); + programDto.setTargetDiscardsObservation(1); + + ReferentialReferenceDto organismDto = ReferentialReferenceDtos.newReferentialReferenceDto(OrganismDto.class, ReferentialLocale.FR, + ImmutableSet.of( + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_CODE + )); + organismDto.setId("Organism1"); + organismDto.setPropertyValue(ReferentialLocale.FR, I18nReferentialDto.PROPERTY_LABEL2, "organism2"); + organismDto.setPropertyValue(I18nReferentialDto.PROPERTY_CODE, "organismCode"); + programDto.setOrganism(organismDto); + + DtoToEntityBuilder<ProgramDto, Program> builder = DtoToEntityBuilder.create(ProgramDto.class, Program.class, service); + + Program program = service.newEntity(Program.class); + builder.build(programDto, program); + + // On vérife que le program a bien été copié + Assert.assertEquals(programDto.getCode(), program.getCode()); + Assert.assertEquals(programDto.isNeedComment(), program.isNeedComment()); + Assert.assertNotNull(program.getStatus()); + Assert.assertEquals(programDto.getStatus().name(), program.getStatus().name()); + + Assert.assertEquals(programDto.getLabel1(), program.getLabel1()); + Assert.assertEquals(programDto.getLabel2(), program.getLabel2()); + Assert.assertEquals(programDto.getLabel3(), program.getLabel3()); + Assert.assertEquals(programDto.getLabel4(), program.getLabel4()); + Assert.assertEquals(programDto.getLabel5(), program.getLabel5()); + Assert.assertEquals(programDto.getLabel6(), program.getLabel6()); + Assert.assertEquals(programDto.getLabel7(), program.getLabel7()); + Assert.assertEquals(programDto.getLabel8(), program.getLabel8()); + Assert.assertEquals(programDto.getId(), program.getTopiaId()); + Assert.assertNotNull(program.getGearType()); + Assert.assertEquals(programDto.getGearType().name(), program.getGearType().name()); + Assert.assertEquals(programDto.getTargetDiscardsObservation(), program.getTargetDiscardsObservation()); + + // On vérife que la référence sur l'organisme a bien été trouvée + Organism organism = program.getOrganism(); + Assert.assertNotNull(organism); + Assert.assertEquals(organismDto.getId(), organism.getTopiaId()); + + } + +} \ No newline at end of file diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java similarity index 98% rename from observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java rename to observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java index c587a10..1005eef 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.service.dto; +package fr.ird.observe.services.builder; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.constants.GearType; @@ -8,7 +8,6 @@ import fr.ird.observe.entities.referentiel.OrganismImpl; import fr.ird.observe.entities.referentiel.Program; import fr.ird.observe.entities.referentiel.ProgramImpl; import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.dto.EntityToDtoBuilder; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceValueNotFoundException; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit ebf58daf77949cafa19b3d75218277d58a9f6f4a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 14:05:04 2015 +0200 Deplacement de code réutilisable dans le service de base + mise en place de la transformation dto vers entite (à finir) --- .../ird/observe/services/ObserveServiceTopia.java | 57 ++++++++++++++++++++++ .../services/service/ReferentialServiceTopia.java | 52 ++------------------ 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index bf2d0da..b0836f7 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -3,11 +3,18 @@ package fr.ird.observe.services; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableSet; +import fr.ird.observe.ObserveDAOHelper; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ObserveDtosInitializer; import fr.ird.observe.services.dto.ObserveModelInitializerRunner; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.DataNotFoundException; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; +import java.util.List; import java.util.Map; /** @@ -56,4 +63,54 @@ public class ObserveServiceTopia implements ObserveService { return DTO_TO_ENTITY_TYPES.entrySet(); } + public TopiaEntity getEntityFromReference(ReferenceDto referenceDto) { + Preconditions.checkNotNull(referenceDto,"'referenceDto' can't be null"); + String id = referenceDto.getId(); + Class entityType = getEntityType(referenceDto.getType()); + TopiaEntity entity = loadEntity(referenceDto.getType(), entityType, id); + return entity; + } + + protected <E extends TopiaEntity> List<E> loadEntities(Class<E> entityType) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + List<E> entities = dao.findAll(); + return entities; + } + + protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + E entity = dao.findByTopiaId(id); + if (entity == null) { + throw new DataNotFoundException(dtoType, id); + } + return entity; + } + + public <E extends TopiaEntity> E newEntity(Class<E> entityType) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + E entity = dao.newInstance(); + return entity; + } + + protected <E extends TopiaEntity> E saveEntity(Class<E> entityType, E entity) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + entity = dao.update(entity); + return entity; + } + + protected <D extends ReferentialDto, E extends TopiaEntity> void deleteEntity(Class<D> dtoType, Class<E> entityType, Iterable<String> ids) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + for (String id : ids) { + E entity = dao.findByTopiaId(id); + if (entity == null) { + throw new DataNotFoundException(dtoType, id); + } + dao.delete(entity); + } + } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java index 393cd4a..402947f 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java @@ -1,10 +1,9 @@ package fr.ird.observe.services.service; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.ObserveDAOHelper; import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.dto.EntityToDtoBuilder; -import fr.ird.observe.services.dto.EntityToReferenceDtoBuilder; +import fr.ird.observe.services.builder.EntityToDtoBuilder; +import fr.ird.observe.services.builder.EntityToReferentialReferenceDtoBuilder; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.FormDtos; import fr.ird.observe.services.dto.IdDto; @@ -12,8 +11,6 @@ import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import java.util.Collection; @@ -35,7 +32,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe LinkedHashSet<ReferentialReferenceDto<D>> labels = new LinkedHashSet<>(); for (TopiaEntity entity : entities) { - ReferentialReferenceDto<D> dto = EntityToReferenceDtoBuilder.buildReferential(dtoType, serviceContext.getReferentialLocale(), entity); + ReferentialReferenceDto<D> dto = EntityToReferentialReferenceDtoBuilder.build(dtoType, serviceContext.getReferentialLocale(), entity); labels.add(dto); } @@ -90,49 +87,6 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe deleteEntity(dtoType, entityType, ids); } - protected <E extends TopiaEntity> List<E> loadEntities(Class<E> entityType) { - TopiaContext transaction = serviceContext.getTransaction(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); - List<E> entities = dao.findAll(); - return entities; - } - - protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { - TopiaContext transaction = serviceContext.getTransaction(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); - E entity = dao.findByTopiaId(id); - if (entity == null) { - throw new DataNotFoundException(dtoType, id); - } - return entity; - } - - protected <E extends TopiaEntity> E newEntity(Class<E> entityType) { - TopiaContext transaction = serviceContext.getTransaction(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); - E entity = dao.newInstance(); - return entity; - } - - protected <E extends TopiaEntity> E saveEntity(Class<E> entityType, E entity) { - TopiaContext transaction = serviceContext.getTransaction(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); - entity = dao.update(entity); - return entity; - } - - protected <D extends ReferentialDto, E extends TopiaEntity> void deleteEntity(Class<D> dtoType, Class<E> entityType, Iterable<String> ids) { - TopiaContext transaction = serviceContext.getTransaction(); - TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); - for (String id : ids) { - E entity = dao.findByTopiaId(id); - if (entity == null) { - throw new DataNotFoundException(dtoType, id); - } - dao.delete(entity); - } - } - protected <E extends TopiaEntity, D extends ReferentialDto> FormDto<D> entityToEditReferentialFormDto(Class<D> dtoType, Class<E> entityType, E entity) { try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm