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>.