branch feature/7458-3 updated (e5d026a -> dda1a96)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7458-3 in repository observe. See http://git.codelutin.com/observe.git from e5d026a use reference for section basket and branchline in catchLongline an Tdr (refs #7458). new dda1a96 add trip seine service topia implement and test (refs #7458). The 1 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 dda1a96ac1564e5bc818d3567f2316e2914996b2 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Aug 21 18:01:36 2015 +0200 add trip seine service topia implement and test (refs #7458). Summary of changes: .../src/test/resources/db/4.0.1/test.sql.gz | Bin 0 -> 5044065 bytes .../ird/observe/services/dto/ReferenceSetDtos.java | 21 ++ observe-services-runner/pom.xml | 4 +- .../ird/observe/services/ObserveServiceTopia.java | 127 +++++++++++- .../services/builder/EntityToDtoBuilder.java | 110 +++++----- .../services/service/ReferentialServiceTopia.java | 69 +------ .../service/seine/TripSeineServiceTopia.java | 107 ++++++++++ .../services/ObserveServiceContextTopiaTaiste.java | 18 ++ .../services/ObserveServiceFactoryTopiaTaiste.java | 16 ++ .../services/builder/DtoToEntityBuilderTest.java | 4 +- .../service/ApplicationContextResource.java | 4 +- .../service/seine/TripSeineServiceTopiaTest.java | 225 +++++++++++++++++++++ 12 files changed, 589 insertions(+), 116 deletions(-) create mode 100644 observe-business/src/test/resources/db/4.0.1/test.sql.gz create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java -- 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-3 in repository observe. See http://git.codelutin.com/observe.git commit dda1a96ac1564e5bc818d3567f2316e2914996b2 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Aug 21 18:01:36 2015 +0200 add trip seine service topia implement and test (refs #7458). --- .../src/test/resources/db/4.0.1/test.sql.gz | Bin 0 -> 5044065 bytes .../ird/observe/services/dto/ReferenceSetDtos.java | 21 ++ observe-services-runner/pom.xml | 4 +- .../ird/observe/services/ObserveServiceTopia.java | 127 +++++++++++- .../services/builder/EntityToDtoBuilder.java | 110 +++++----- .../services/service/ReferentialServiceTopia.java | 69 +------ .../service/seine/TripSeineServiceTopia.java | 107 ++++++++++ .../services/ObserveServiceContextTopiaTaiste.java | 18 ++ .../services/ObserveServiceFactoryTopiaTaiste.java | 16 ++ .../services/builder/DtoToEntityBuilderTest.java | 4 +- .../service/ApplicationContextResource.java | 4 +- .../service/seine/TripSeineServiceTopiaTest.java | 225 +++++++++++++++++++++ 12 files changed, 589 insertions(+), 116 deletions(-) diff --git a/observe-business/src/test/resources/db/4.0.1/test.sql.gz b/observe-business/src/test/resources/db/4.0.1/test.sql.gz new file mode 100644 index 0000000..a094b0a Binary files /dev/null and b/observe-business/src/test/resources/db/4.0.1/test.sql.gz differ diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetDtos.java index 98dfbf8..86ae4ae 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetDtos.java @@ -1,9 +1,13 @@ package fr.ird.observe.services.dto; +import com.google.common.base.Function; + import java.util.LinkedHashSet; public class ReferenceSetDtos extends AbstractReferenceSetDtos { + protected static final Function<ReferenceSetDto, Class> TYPE_FUNCTION = newTypeFunction(); + public static <D extends IdDto> ReferenceSetDto<D> newEmptyReferenceSetDto(Class<D> type) { ReferenceSetDto<D> dto = new ReferenceSetDto<>(type); dto.setReference(new LinkedHashSet<ReferenceDto>()); @@ -17,4 +21,21 @@ public class ReferenceSetDtos extends AbstractReferenceSetDtos { return dto; } + public static <BeanType extends ReferenceSetDto> Function<BeanType, Class> getTypeFunction() { + return (Function<BeanType, Class>) TYPE_FUNCTION; + + } + + public static <BeanType extends ReferenceSetDto> Function<BeanType, Class> newTypeFunction() { + return new Function<BeanType, Class>() { + + @Override + public Class apply(BeanType input) { + return input.getType(); + } + }; + + } + + } diff --git a/observe-services-runner/pom.xml b/observe-services-runner/pom.xml index 354853d..0a90592 100644 --- a/observe-services-runner/pom.xml +++ b/observe-services-runner/pom.xml @@ -35,13 +35,13 @@ </dependency> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>observe-services-configuration-rest-client</artifactId> + <artifactId>observe-services-configuration-rest</artifactId> <version>${project.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>observe-services-rest-client</artifactId> + <artifactId>observe-services-rest</artifactId> <version>${project.version}</version> <scope>runtime</scope> </dependency> 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 51cb177..da58219 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 @@ -4,17 +4,32 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.entities.constants.ReferenceLocale; +import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.services.builder.DtoToEntityBuilder; +import fr.ird.observe.services.builder.EntityToDtoBuilder; +import fr.ird.observe.services.builder.EntityToReferenceDtoBuilder; +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; 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.ReferenceSetDto; +import fr.ird.observe.services.dto.ReferenceSetDtos; +import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.DataNotFoundException; +import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; +import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Locale; import java.util.Map; /** @@ -66,6 +81,13 @@ public class ObserveServiceTopia implements ObserveService { return DTO_TO_ENTITY_TYPES.entrySet(); } + public ReferenceLocale getReferenceLocale() { + ReferentialLocale referentialLocale = serviceContext.getReferentialLocale(); + Locale locale = referentialLocale.getLocale(); + ReferenceLocale referenceLocale = ReferenceLocale.valueOf(locale); + return referenceLocale; + } + public <E extends TopiaEntity> E getEntityFromReference(Class<E> entityType, ReferenceDto referenceDto) { Preconditions.checkNotNull(referenceDto, "'referenceDto' can't be null"); String id = referenceDto.getId(); @@ -73,6 +95,12 @@ public class ObserveServiceTopia implements ObserveService { return entity; } + protected <E extends TopiaEntity> TopiaDAO<E> getDao(Class<E> entityType) { + TopiaContext transaction = serviceContext.getTransaction(); + TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); + return dao; + } + protected <E extends TopiaEntity> List<E> loadEntities(Class<E> entityType) { TopiaContext transaction = serviceContext.getTransaction(); TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); @@ -80,7 +108,7 @@ public class ObserveServiceTopia implements ObserveService { return entities; } - protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { + protected <D extends IdDto, 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); @@ -115,4 +143,101 @@ public class ObserveServiceTopia implements ObserveService { dao.delete(entity); } } + + protected <E extends TopiaEntity, D extends IdDto> FormDto<D> entityToReadFormDto(Class<D> dtoType, Class<E> entityType, E entity) { + try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { + + // copy entity + D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity); + + // build label sets detected while copy (keep the reference for each label, or nothing if value not set) + ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); + ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); + for (Class<? extends IdDto> referentialDtoType : referentialDtoTypes) { + + ReferenceSetDto referentialLabelSet = ReferenceSetDtos.newEmptyReferenceSetDto(referentialDtoType); + labels.add(referentialLabelSet); + + } + FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); + return form; + + } + } + + protected <E extends TopiaEntity, D extends IdDto> FormDto<D> entityToEditFormDto(Class<D> dtoType, Class<E> entityType, E entity) { + try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { + + // copy entity + D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity); + + // build label sets detected while copy + ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); + ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); + for (Class<? extends IdDto> referenceDtoType : referentialDtoTypes) { + ReferenceSetDto referenceSet = getReferenceSet((Class<ReferentialDto>) referenceDtoType); + labels.add(referenceSet); + } + FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); + return form; + + } + } + + protected <E extends TopiaEntity, D extends IdDto> E dtoToEntity(Class<D> dtoType, Class<E> entityType, D dto) { + + E entity; + + if (StringUtils.isBlank(dto.getId())) { + + entity = newEntity(entityType); + + } else { + + + entity = loadEntity(dtoType, entityType, dto.getId()); + + } + + try (DtoToEntityBuilder<D, E> entityBuilder = DtoToEntityBuilder.create(dtoType, entityType, this)) { + + entityBuilder.build(dto, entity); + + } + + return entity; + + + + } + + protected <D extends ReferentialDto> ReferenceSetDto<D> getReferenceSet(Class<D> dtoType) { + Class<TopiaEntity> entityType = getEntityType(dtoType); + List<TopiaEntity> entities = loadEntities(entityType); + LinkedHashSet<ReferenceDto<D>> labels = new LinkedHashSet<>(); + for (TopiaEntity entity : entities) { + + ReferenceDto<D> dto; + + if (entity instanceof ReferenceEntity) { + + dto = EntityToReferentialReferenceDtoBuilder.build(dtoType, serviceContext.getReferentialLocale(), entity); + + } else { + + dto = EntityToReferenceDtoBuilder.build(dtoType, entity); + + } + + labels.add(dto); + + } + ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, labels); + return labelSetDto; + } + + protected Date now() { + return serviceContext.now(); + } + } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java index 0bf4d24..259076f 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/EntityToDtoBuilder.java @@ -64,7 +64,7 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder = new ImmutableSet.Builder<>(); - Map<String, Object> entityProperties = binder.obtainProperties(entity, false); + Map<String, Object> entityProperties = binder.obtainProperties(entity, true); ImmutableMap.Builder<String, Object> dtoPropertiesBuilder = new ImmutableMap.Builder<>(); @@ -73,83 +73,101 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen String propertyName = entry.getKey(); Object propertyValue = entry.getValue(); - if (isCollectionProperty(propertyValue)) { - Collection collection = (Collection) propertyValue; + if (propertyValue == null) { + if (! TopiaEntity.TOPIA_ID.equals(propertyName)) { + Class dtoType = binder.getTargetPropertyType(propertyName); + if (ReferenceDto.class.isAssignableFrom(dtoType)) { - Type collectionGenericType = binder.getTargetPropertyGenericType(propertyName); + Type typeToken = binder.getTargetPropertyGenericType(propertyName); + ParameterizedType type = (ParameterizedType) typeToken; + dtoType = (Class) type.getActualTypeArguments()[0]; - Class<?> collectionType = TypeToken.of(collectionGenericType).getRawType(); + referenceTypesBuilder.add(dtoType); + } + } + } else { - Collection<Object> dtoCollection = newCollection(collectionType); - if (!collection.isEmpty()) { + if (isCollectionProperty(propertyValue)) { - ParameterizedType collectionGenericTypeType = (ParameterizedType) collectionGenericType; - Type type1 = collectionGenericTypeType.getActualTypeArguments()[0]; - Class type; - boolean useReference = false; - if (type1 instanceof Class) { - type = (Class) type1; - } else { - type = (Class) ((ParameterizedType) type1).getActualTypeArguments()[0]; - useReference = true; - } + Collection collection = (Collection) propertyValue; - if (IdDto.class.isAssignableFrom(type)) { + Type collectionGenericType = binder.getTargetPropertyGenericType(propertyName); - Class dtoType = type; + Class<?> collectionType = TypeToken.of(collectionGenericType).getRawType(); - for (Object entityValue : collection) { + Collection<Object> dtoCollection = newCollection(collectionType); - IdDto dto = addEntity(dtoType, (TopiaEntity) entityValue, referentialLocale, useReference, referenceTypesBuilder); - dtoCollection.add(dto); + if (!collection.isEmpty()) { + ParameterizedType collectionGenericTypeType = (ParameterizedType) collectionGenericType; + Type type1 = collectionGenericTypeType.getActualTypeArguments()[0]; + Class type; + boolean useReference = false; + if (type1 instanceof Class) { + type = (Class) type1; + } else { + type = (Class) ((ParameterizedType) type1).getActualTypeArguments()[0]; + useReference = true; } - } else { + if (IdDto.class.isAssignableFrom(type)) { + + Class dtoType = type; + + for (Object entityValue : collection) { + + IdDto dto = addEntity(dtoType, (TopiaEntity) entityValue, referentialLocale, useReference, referenceTypesBuilder); + dtoCollection.add(dto); + + } - dtoCollection.addAll(collection); + } else { + + dtoCollection.addAll(collection); + + } } + addProperty(propertyName, dtoCollection, dtoPropertiesBuilder); + continue; + } - addProperty(propertyName, dtoCollection, dtoPropertiesBuilder); - continue; + if (propertyValue instanceof TopiaEntity) { - } + TopiaEntity entityValue = (TopiaEntity) propertyValue; + + Type typeToken = binder.getTargetPropertyGenericType(propertyName); + Class<?> rawType = TypeToken.of(typeToken).getRawType(); - if (propertyValue instanceof TopiaEntity) { + Class dtoType; + boolean useReference = false; - TopiaEntity entityValue = (TopiaEntity) propertyValue; + if (rawType.isAssignableFrom(ReferenceDto.class) || rawType.isAssignableFrom(ReferentialReferenceDto.class)) { + Preconditions.checkArgument(typeToken instanceof ParameterizedType, "Un type générique devrait être mis sur une référence de dto: " + result.getClass().getName() + "." + propertyName); - Type typeToken = binder.getTargetPropertyGenericType(propertyName); - Class<?> rawType = TypeToken.of(typeToken).getRawType(); + ParameterizedType type = (ParameterizedType) typeToken; + dtoType = (Class) type.getActualTypeArguments()[0]; + useReference = true; + } else { + dtoType = rawType; + } - Class dtoType; - boolean useReference = false; + propertyValue = addEntity(dtoType, entityValue, referentialLocale, useReference, referenceTypesBuilder); - if (rawType.isAssignableFrom(ReferenceDto.class) || rawType.isAssignableFrom(ReferentialReferenceDto.class)) { - Preconditions.checkArgument(typeToken instanceof ParameterizedType, "Un type générique devrait être mis sur une référence de dto: " + result.getClass().getName() + "." + propertyName ); + addProperty(propertyName, propertyValue, dtoPropertiesBuilder); + continue; - ParameterizedType type = (ParameterizedType) typeToken; - dtoType = (Class) type.getActualTypeArguments()[0]; - useReference = true; - } else { - dtoType = rawType; } - propertyValue = addEntity(dtoType, entityValue, referentialLocale, useReference, referenceTypesBuilder); + // simple property addProperty(propertyName, propertyValue, dtoPropertiesBuilder); - continue; - } - // simple property - addProperty(propertyName, propertyValue, dtoPropertiesBuilder); - } ImmutableMap<String, Object> properties = dtoPropertiesBuilder.build(); 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 402947f..6d60f2c 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,22 +1,13 @@ package fr.ird.observe.services.service; -import com.google.common.collect.ImmutableSet; import fr.ird.observe.services.ObserveServiceTopia; -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; 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.persistence.TopiaEntity; import java.util.Collection; import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; /** * Created on 16/08/15. @@ -27,24 +18,14 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe @Override public <D extends ReferentialDto> ReferenceSetDto<D> getReferentialReferenceSet(Class<D> dtoType) { - Class<TopiaEntity> entityType = getEntityType(dtoType); - List<TopiaEntity> entities = loadEntities(entityType); - LinkedHashSet<ReferentialReferenceDto<D>> labels = new LinkedHashSet<>(); - for (TopiaEntity entity : entities) { - - ReferentialReferenceDto<D> dto = EntityToReferentialReferenceDtoBuilder.build(dtoType, serviceContext.getReferentialLocale(), entity); - labels.add(dto); - - } - ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, labels); - return labelSetDto; + return getReferenceSet(dtoType); } @Override public <D extends ReferentialDto> FormDto<D> loadToRead(Class<D> dtoType, String id) { Class<TopiaEntity> entityType = getEntityType(dtoType); TopiaEntity entity = loadEntity(dtoType, entityType, id); - FormDto<D> form = entityToReadReferentialFormDto(dtoType, entityType, entity); + FormDto<D> form = entityToReadFormDto(dtoType, entityType, entity); return form; } @@ -53,7 +34,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe public <D extends ReferentialDto> FormDto<D> loadToEdit(Class<D> dtoType, String id) { Class<TopiaEntity> entityType = getEntityType(dtoType); TopiaEntity entity = loadEntity(dtoType, entityType, id); - FormDto<D> form = entityToEditReferentialFormDto(dtoType, entityType, entity); + FormDto<D> form = entityToEditFormDto(dtoType, entityType, entity); return form; } @@ -62,7 +43,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe Class<TopiaEntity> entityType = getEntityType(dtoType); TopiaEntity entity = newEntity(entityType); //TODO Voir selon le type d'entité si il y a des valeurs par défaut à utiliser - FormDto<D> form = entityToEditReferentialFormDto(dtoType, entityType, entity); + FormDto<D> form = entityToEditFormDto(dtoType, entityType, entity); return form; } @@ -71,7 +52,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe TopiaEntity entity = referentialDtoToEntity(form.getForm()); Class<TopiaEntity> entityType = getEntityType(dtoType); entity = saveEntity(entityType, entity); - FormDto<D> model = entityToEditReferentialFormDto(dtoType, entityType, entity); + FormDto<D> model = entityToEditFormDto(dtoType, entityType, entity); return model.getForm().getId(); } @@ -87,46 +68,6 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe deleteEntity(dtoType, entityType, ids); } - 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)) { - - // copy entity - D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity); - - // build label sets detected while copy - ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); - ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends IdDto> referenceDtoType : referentialDtoTypes) { - ReferenceSetDto referenceSet = getReferentialReferenceSet((Class<ReferentialDto>) referenceDtoType); - labels.add(referenceSet); - } - FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); - return form; - - } - } - - protected <E extends TopiaEntity, D extends ReferentialDto> FormDto<D> entityToReadReferentialFormDto(Class<D> dtoType, Class<E> entityType, E entity) { - try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { - - // copy entity - D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity); - - // build label sets detected while copy (keep the reference for each label, or nothing if value not set) - ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); - ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends IdDto> referentialDtoType : referentialDtoTypes) { - - ReferenceSetDto referentialLabelSet = ReferenceSetDtos.newEmptyReferenceSetDto(referentialDtoType); - labels.add(referentialLabelSet); - - } - FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); - return form; - - } - } - protected <D extends ReferentialDto, E extends TopiaEntity> E referentialDtoToEntity(D dto) { Class<D> aClass = (Class<D>) dto.getClass(); Class<TopiaEntity> entityType = getEntityType(aClass); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java new file mode 100644 index 0000000..5e20d2f --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TripSeineServiceTopia.java @@ -0,0 +1,107 @@ +package fr.ird.observe.services.service.seine; + +import com.google.common.collect.Lists; +import fr.ird.observe.entities.constants.ReferenceLocale; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.seine.TripSeine; +import fr.ird.observe.entities.seine.TripSeineDAO; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.builder.EntityToReferenceDtoBuilder; +import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; +import org.nuiton.util.DateUtil; + +import java.util.Date; +import java.util.List; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class TripSeineServiceTopia extends ObserveServiceTopia implements TripSeineService { + + protected TripSeineDAO getDao() { + return (TripSeineDAO) getDao(TripSeine.class); + } + + @Override + public List<ReferenceDto<TripSeineDto>> getTripSeineByProgram(String programId) { + + ReferenceLocale referenceLocale = getReferenceLocale(); + + List<TripSeine> tripSeines = getDao().findAllStubByProgramId(programId, referenceLocale); + + List<ReferenceDto<TripSeineDto>> result = Lists.newLinkedList(); + + for (TripSeine tripSeine : tripSeines) { + + ReferenceDto<TripSeineDto> dto = EntityToReferenceDtoBuilder.build(TripSeineDto.class, tripSeine); + result.add(dto); + + } + + return result; + } + + @Override + public FormDto<TripSeineDto> loadToRead(String tripSeineId) { + + TripSeine tripSeine = loadEntity(TripSeineDto.class, TripSeine.class, tripSeineId); + + FormDto<TripSeineDto> form = entityToReadFormDto(TripSeineDto.class, TripSeine.class, tripSeine); + + return form; + } + + @Override + public FormDto<TripSeineDto> loadToEdit(String tripSeineId) { + + TripSeine tripSeine = loadEntity(TripSeineDto.class, TripSeine.class, tripSeineId); + + FormDto<TripSeineDto> form = entityToEditFormDto(TripSeineDto.class, TripSeine.class, tripSeine); + + return form; + } + + @Override + public FormDto<TripSeineDto> preCreate(String programId) { + + TripSeine tripSeine = newEntity(TripSeine.class); + + Program program = loadEntity(ProgramDto.class, Program.class, programId); + + TripSeine preCreated = getDao().newInstance(); + + Date date = DateUtil.getDay(now()); + + preCreated.setStartDate(date); + + preCreated.setEndDate(date); + + preCreated.setProgram(program); + + FormDto<TripSeineDto> form = entityToEditFormDto(TripSeineDto.class, TripSeine.class, tripSeine); + + return form; + } + + @Override + public String save(FormDto<TripSeineDto> form) { + + TripSeine tripSeine = dtoToEntity(TripSeineDto.class, TripSeine.class, form.getForm()); + + tripSeine = saveEntity(TripSeine.class, tripSeine); + + return tripSeine.getTopiaId(); + } + + @Override + public void delete(String tripSeineId) { + + TripSeine tripSeine = loadEntity(TripSeineDto.class, TripSeine.class, tripSeineId); + + getDao().delete(tripSeine); + + } +} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java new file mode 100644 index 0000000..7d49eb5 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java @@ -0,0 +1,18 @@ +package fr.ird.observe.services; + +import org.nuiton.util.DateUtil; + +import java.util.Date; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveServiceContextTopiaTaiste extends ObserveServiceContextTopia { + + public static final Date DATE = DateUtil.createDate(36, 15, 17, 21, 8, 2015); + + @Override + public Date now() { + return DATE; + } +} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java index 2b22b88..1360cc7 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java @@ -34,4 +34,20 @@ public class ObserveServiceFactoryTopiaTaiste extends ObserveServiceFactoryTopia return dataSource; } + + @Override + protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + + ObserveServiceContextTopia serviceContext = new ObserveServiceContextTopiaTaiste(); + serviceContext.setApplicationContext(applicationContext); + ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopia = dataSourceConfiguration; + + serviceContext.setDataSourceConfiguration(dataSourceConfigurationTopia); + + DataSource dataSource = getDataSource(dataSourceConfigurationTopia); + serviceContext.setDataSource(dataSource); + return serviceContext; + + } + } 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 index f5f8e92..6dbf900 100644 --- 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 @@ -7,6 +7,7 @@ import fr.ird.observe.entities.referentiel.Program; import fr.ird.observe.entities.seine.GearUseFeaturesMeasurementSeine; import fr.ird.observe.entities.seine.GearUseFeaturesSeine; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.constants.GearType; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.constants.ReferentialLocale; @@ -15,7 +16,6 @@ import fr.ird.observe.services.dto.referential.GearDto; 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 fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; @@ -170,7 +170,7 @@ public class DtoToEntityBuilderTest { class ObserveServiceTopiaMock extends ObserveServiceTopia { @Override - protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { + protected <D extends IdDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { E e = newEntity(entityType); e.setTopiaId(id); return e; diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java index 04ab6ca..618e9e9 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java @@ -32,7 +32,9 @@ public class ApplicationContextResource implements TestRule { public ApplicationContextResource(Version databaseVersion) { this.databaseVersion = databaseVersion; - this.serviceApplicationContext = new ObserveServiceApplicationContext(); + this.serviceApplicationContext = new ObserveServiceApplicationContext() { + + }; this.serviceFactory = new ObserveServiceFactoryTopiaTaiste(); } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java new file mode 100644 index 0000000..2736fa2 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java @@ -0,0 +1,225 @@ +package fr.ird.observe.services.service.seine; + +import com.google.common.collect.Collections2; +import fr.ird.observe.db.DataSourceException; +import fr.ird.observe.entities.migration.H2DataSourceMigration; +import fr.ird.observe.entities.seine.TripSeine; +import fr.ird.observe.services.ObserveServiceApplicationContext; +import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.dto.ReferenceSetDtos; +import fr.ird.observe.services.dto.referential.HarbourDto; +import fr.ird.observe.services.dto.referential.OceanDto; +import fr.ird.observe.services.dto.referential.PersonDto; +import fr.ird.observe.services.dto.referential.VesselDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; +import fr.ird.observe.services.service.ApplicationContextResource; +import fr.ird.observe.services.service.DataSourceResource; +import fr.ird.observe.services.service.ReferentialService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Collection; +import java.util.List; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class TripSeineServiceTopiaTest { + + private static final Log log = LogFactory.getLog(TripSeineServiceTopiaTest.class); + + @ClassRule + public static final ApplicationContextResource applicationContextResource = new ApplicationContextResource(H2DataSourceMigration.V_4_0_1); + + public static final String TRIP_SEINE_ID = "fr.ird.observe.entities.seine.TripSeine#1412004815781#0.2859887799862254"; + + public static final String PROGRAM_ID = "fr.ird.observe.entities.referentiel.Program#1239832686262#0.31033946454061234"; + + @Rule + public final DataSourceResource dataSourceResource = new DataSourceResource(applicationContextResource, applicationContextResource.getScriptPath("test")); + + protected TripSeineService service; + protected ReferentialService referentialService; + + @Before + public void setUp() throws Exception { + + ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); + + ObserveServiceApplicationContext serviceApplicationContext = applicationContextResource.getServiceApplicationContext(); + + ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration = dataSourceResource.getDataSourceConfiguration(); + + service = serviceFactory.newService(serviceApplicationContext, dataSourceConfiguration, TripSeineService.class); + + referentialService = serviceFactory.newService(serviceApplicationContext, dataSourceConfiguration, ReferentialService.class); + + } + + @Test + public void getTripSeineByProgramTest() { + + List<ReferenceDto<TripSeineDto>> tripSeineDtos = service.getTripSeineByProgram(PROGRAM_ID); + + Assert.assertNotNull(tripSeineDtos); + Assert.assertEquals(13, tripSeineDtos.size()); + + + } + + @Test + public void loadToReadTest() throws Exception { + + TripSeine tripSeine = findById(TripSeine.class, TRIP_SEINE_ID); + FormDto<TripSeineDto> formDto = service.loadToRead(TRIP_SEINE_ID); + + Assert.assertNotNull(formDto); + TripSeineDto tripSeineDto = formDto.getForm(); + + assertEntityEqualsReferenceDto(tripSeine.getCaptain(), tripSeineDto.getCaptain()); + assertEntityEqualsReferenceDto(tripSeine.getObserver(), tripSeineDto.getObserver()); + assertEntityEqualsReferenceDto(tripSeine.getDataEntryOperator(), tripSeineDto.getDataEntryOperator()); + assertEntityEqualsReferenceDto(tripSeine.getVessel(), tripSeineDto.getVessel()); + assertEntityEqualsReferenceDto(tripSeine.getOcean(), tripSeineDto.getOcean()); + assertEntityEqualsReferenceDto(tripSeine.getDepartureHarbour(), tripSeineDto.getDepartureHarbour()); + assertEntityEqualsReferenceDto(tripSeine.getLandingHarbour(), tripSeineDto.getLandingHarbour()); + Assert.assertEquals(tripSeine.getErsId(), tripSeineDto.getErsId()); + Assert.assertEquals(tripSeine.getStartDate(), tripSeineDto.getStartDate()); + Assert.assertEquals(tripSeine.getEndDate(), tripSeineDto.getEndDate()); + Assert.assertEquals(tripSeine.getFormsUrl(), tripSeineDto.getFormsUrl()); + Assert.assertEquals(tripSeine.getReportsUrl(), tripSeineDto.getReportsUrl()); + Assert.assertEquals(tripSeine.getComment(), tripSeineDto.getComment()); + + Assert.assertNotNull(formDto.getLabels()); + + Collection<Class> types = Collections2.transform(formDto.getLabels(), ReferenceSetDtos.getTypeFunction()); + Assert.assertTrue(types.contains(PersonDto.class)); + Assert.assertTrue(types.contains(VesselDto.class)); + Assert.assertTrue(types.contains(OceanDto.class)); + Assert.assertTrue(types.contains(HarbourDto.class)); + Assert.assertEquals(formDto.sizeLabels(), 4); + + for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { + + Assert.assertEquals(0, referenceSetDto.sizeReference()); + + } + + } + + @Test + public void loadToEditTest() throws Exception { + + TripSeine tripSeine = findById(TripSeine.class, TRIP_SEINE_ID); + FormDto<TripSeineDto> formDto = service.loadToEdit(TRIP_SEINE_ID); + + Assert.assertNotNull(formDto); + TripSeineDto tripSeineDto = formDto.getForm(); + + assertEntityEqualsReferenceDto(tripSeine.getCaptain(), tripSeineDto.getCaptain()); + assertEntityEqualsReferenceDto(tripSeine.getObserver(), tripSeineDto.getObserver()); + assertEntityEqualsReferenceDto(tripSeine.getDataEntryOperator(), tripSeineDto.getDataEntryOperator()); + assertEntityEqualsReferenceDto(tripSeine.getVessel(), tripSeineDto.getVessel()); + assertEntityEqualsReferenceDto(tripSeine.getOcean(), tripSeineDto.getOcean()); + assertEntityEqualsReferenceDto(tripSeine.getDepartureHarbour(), tripSeineDto.getDepartureHarbour()); + assertEntityEqualsReferenceDto(tripSeine.getLandingHarbour(), tripSeineDto.getLandingHarbour()); + Assert.assertEquals(tripSeine.getErsId(), tripSeineDto.getErsId()); + Assert.assertEquals(tripSeine.getStartDate(), tripSeineDto.getStartDate()); + Assert.assertEquals(tripSeine.getEndDate(), tripSeineDto.getEndDate()); + Assert.assertEquals(tripSeine.getFormsUrl(), tripSeineDto.getFormsUrl()); + Assert.assertEquals(tripSeine.getReportsUrl(), tripSeineDto.getReportsUrl()); + Assert.assertEquals(tripSeine.getComment(), tripSeineDto.getComment()); + + Assert.assertNotNull(formDto.getLabels()); + + Collection<Class> types = Collections2.transform(formDto.getLabels(), ReferenceSetDtos.getTypeFunction()); + Assert.assertTrue(types.contains(PersonDto.class)); + Assert.assertTrue(types.contains(VesselDto.class)); + Assert.assertTrue(types.contains(OceanDto.class)); + Assert.assertTrue(types.contains(HarbourDto.class)); + Assert.assertEquals(formDto.sizeLabels(), 4); + + for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { + + Assert.assertTrue(referenceSetDto.sizeReference() > 0); + + } + + } + + @Test + public void preCreateTest() { + FormDto<TripSeineDto> formDto = service.preCreate(PROGRAM_ID); + + Assert.assertNotNull(formDto); + TripSeineDto tripSeineDto = formDto.getForm(); + + Assert.assertNull(tripSeineDto.getCaptain()); + Assert.assertNull(tripSeineDto.getObserver()); + Assert.assertNull(tripSeineDto.getDataEntryOperator()); + Assert.assertNull(tripSeineDto.getVessel()); + Assert.assertNull(tripSeineDto.getOcean()); + Assert.assertNull(tripSeineDto.getDepartureHarbour()); + Assert.assertNull(tripSeineDto.getLandingHarbour()); + Assert.assertNull(tripSeineDto.getErsId()); +// Assert.assertEquals(DateUtil.getDay(ObserveServiceContextTopiaTaiste.DATE), tripSeineDto.getStartDate()); +// Assert.assertEquals(DateUtil.getDay(ObserveServiceContextTopiaTaiste.DATE), tripSeineDto.getEndDate()); + Assert.assertNull(tripSeineDto.getFormsUrl()); + Assert.assertNull(tripSeineDto.getReportsUrl()); + Assert.assertNull(tripSeineDto.getComment()); + + Assert.assertNotNull(formDto.getLabels()); + + Collection<Class> types = Collections2.transform(formDto.getLabels(), ReferenceSetDtos.getTypeFunction()); + Assert.assertTrue(types.contains(PersonDto.class)); + Assert.assertTrue(types.contains(VesselDto.class)); + Assert.assertTrue(types.contains(OceanDto.class)); + Assert.assertTrue(types.contains(HarbourDto.class)); + Assert.assertEquals(formDto.sizeLabels(), 4); + + for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { + + Assert.assertTrue(referenceSetDto.sizeReference() > 0); + + } + + + } + + protected <E extends TopiaEntity> E findById(Class<E> entityType, String id) throws DataSourceException { + + TopiaContext tx = dataSourceResource.newTransaction("testGetReferentialLabelSet"); + + TopiaDAO<E> dao = dataSourceResource.getDAO(tx, entityType); + E entity = dao.findByTopiaId(id); + + return entity; + + } + + protected void assertEntityEqualsReferenceDto(TopiaEntity entity, ReferenceDto referenceDto) { + if (entity == null) { + Assert.assertNull(referenceDto); + } else { + Assert.assertEquals(entity.getTopiaId(), referenceDto.getId()); + } + + } + + + + + +} -- 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