This is an automated email from the git hooks/post-receive script. New commit to branch feature/7587-2 in repository observe. See http://git.codelutin.com/observe.git commit 94244a8794f3089aaaeda5eac453253b5524caa0 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Oct 7 17:06:57 2015 +0200 filtrer les liste de valeurs (combobox) coté service (refs #7587). --- .../observe/ui/content/ContentUIInitializer.java | 21 +---- .../ui/content/open/impl/seine/TripSeineUI.css | 5 -- .../entities/referentiel/ReferenceEntities.java | 11 ++- .../ird/observe/entities/referentiel/Vessels.java | 27 ++++++- .../java/fr/ird/observe/services/dto/FormDto.java | 18 ++++- .../ird/observe/services/dto/ReferenceSetDtos.java | 21 +++++ .../dto/ReferenceSetNotFoundException.java | 9 ++- .../ird/observe/services/ObserveServiceTopia.java | 56 ++++++++++--- .../services/builder/EntityToDtoBuilder.java | 45 ++++++----- .../observe/services/dto/ReferenceTypeName.java | 31 ++++++++ .../services/entity/ObserveEntitiesFilters.java | 93 ++++++++++++++++++++++ .../services/entity/ObserveEntityFilter.java | 72 +++++++++++++++++ .../ActivityLongLineEncouterServiceTopia.java | 6 +- .../ActivityLongLineSensorUsedServiceTopia.java | 8 +- .../GearUseFeaturesLonglineServiceTopia.java | 10 ++- .../longline/SetLonglineCatchServiceTopia.java | 30 ++++--- .../SetLonglineDetailCompositionServiceTopia.java | 15 ++-- .../SetLonglineGlobalCompositionServiceTopia.java | 19 +++-- .../services/service/longline/TdrServiceTopia.java | 16 ++-- .../seine/GearUseFeaturesSeineServiceTopia.java | 8 +- .../service/seine/NonTargetCatchServiceTopia.java | 5 +- .../seine/ObjectObservedSpeciesServiceTopia.java | 5 +- .../seine/ObjectSchoolEstimateServiceTopia.java | 5 +- .../service/seine/SchoolEstimateServiceTopia.java | 4 +- .../service/seine/TargetSampleServiceTopia.java | 4 +- .../TransmittingBuoyOperationServiceTopia.java | 6 +- .../services/builder/EntityToDtoBuilderTest.java | 18 +++-- .../service/seine/TripSeineServiceTopiaTest.java | 6 +- 28 files changed, 458 insertions(+), 116 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java index 116177a..da0148a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java @@ -33,7 +33,6 @@ import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialDtos; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.actions.shared.AbstractUIAction; import fr.ird.observe.ui.util.BooleanEditor; @@ -859,26 +858,10 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E data = new ArrayList<>(); // get complete data list from service - ReferenceSetDto<E> referenceSetDto = formDto.getReferenceSetDto(dtoClass); + ReferenceSetDto<E> referenceSetDto = formDto.getReferenceSetDto(dtoClass, comboBox.getProperty()); LinkedHashSet<ReferenceDto> reference = referenceSetDto.getReference(); - Predicate<ReferenceDto> predicate = (Predicate<ReferenceDto>) comboBox.getClientProperty(ObserveContentUI.CLIENT_PROPERTY_LIST_PREDICATE); - - if (predicate != null) { - - data.addAll(Collections2.filter(reference, predicate)); - } else { - - data.addAll(reference); - } - - } - - boolean referentialEntity = ReferentialDto.class.isAssignableFrom(dtoClass); - if (referentialEntity) { - - //TC-20100208 : on ne veut pas voir les elements du referentiel non actif - ReferentialDtos.filterReferentialReferenceListByStatus((List) data); + data.addAll(reference); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUI.css index 7eba914..960ce0d 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUI.css @@ -52,7 +52,6 @@ NumberEditor { #observer { property:{TripSeineDto.PROPERTY_OBSERVER}; selectedItem:{bean.getObserver()}; - _listPredicate:{PersonDtos.newObserverReferencePredicate(true)}; } #captainLabel { @@ -63,7 +62,6 @@ NumberEditor { #captain { property:{TripSeineDto.PROPERTY_CAPTAIN}; selectedItem:{bean.getCaptain()}; - _listPredicate:{PersonDtos.newCaptainReferencePredicate(true)}; } #dataEntryOperatorLabel { @@ -74,7 +72,6 @@ NumberEditor { #dataEntryOperator { property:{TripSeineDto.PROPERTY_DATA_ENTRY_OPERATOR}; selectedItem:{bean.getDataEntryOperator()}; - _listPredicate:{PersonDtos.newDataEntryOperatorReferencePredicate(true)}; } #vesselLabel { @@ -85,8 +82,6 @@ NumberEditor { #vessel { property:{TripSeineDto.PROPERTY_VESSEL}; selectedItem:{bean.getVessel()}; - //FIXME - //_listPredicate:{VesselDtos.newVesselByVesselTypeIdPredicate(getConfig().getSeineVesselTypeIds())}; } #oceanLabel { diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java index 35ff744..bf72832 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/ReferenceEntities.java @@ -57,7 +57,7 @@ public class ReferenceEntities { */ public static <E extends ReferenceEntity> void filterReferentielListByStatus( List<E> list) { - filterReferentielList(list, (Predicate<E>) IS_ACTIF_PREDICATE); + filterReferentielList(list, ReferenceEntities.<E>newEnablePredicate()); } @@ -95,6 +95,15 @@ public class ReferenceEntities { } }; + public static <R extends ReferenceEntity> Predicate<R> newEnablePredicate() { + return new Predicate<R>() { + @Override + public boolean apply(R r) { + return ReferenceStatus.disabled != r.getStatus(); + } + }; + } + public static void walk(ReferentielWalker walker) throws Exception { for (ObserveEntityEnum constant : Entities.REFERENCE_ENTITIES) { Class<? extends TopiaEntity> contractClass = constant.getContract(); diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Vessels.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Vessels.java index 7e841dd..1faa5d0 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Vessels.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Vessels.java @@ -23,6 +23,8 @@ package fr.ird.observe.entities.referentiel; */ import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; import java.util.Set; @@ -34,9 +36,30 @@ import java.util.Set; */ public class Vessels { - public static Predicate<Vessel> newVesselByVesselTypeIdPredicate(Set<String> vesselTypeIds) { + //FIXME + private static final ImmutableSet<String> LONGLINE_VESSEL_TYPE_IDS = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675736#0.8708229847859869", + "fr.ird.observe.entities.referentiel.VesselType#1239832686137#0.1")); - return new VesselByVesselTypeIdPredicate(vesselTypeIds); + //FIXME + private static final ImmutableSet<String> SEINE_VESSEL_TYPE_IDS = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.7380146830307519", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.9086075071905084", + "fr.ird.observe.entities.referentiel.VesselType#1239832675737#0.43324169605639407")); + + + public static Predicate<Vessel> newVesselLonglinePredicate() { + + return new VesselByVesselTypeIdPredicate(LONGLINE_VESSEL_TYPE_IDS); + + } + + public static Predicate<Vessel> newVesselSeinePredicate() { + + return new VesselByVesselTypeIdPredicate(SEINE_VESSEL_TYPE_IDS); } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/FormDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/FormDto.java index 56ee9aa..cafc603 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/FormDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/FormDto.java @@ -55,12 +55,28 @@ public class FormDto<R extends IdDto> extends AbstractFormDto { Optional<ReferenceSetDto> referenceSetDto = Iterables.tryFind(getLabels(), ReferenceSetDtos.newTypePredicate(type)); if (!referenceSetDto.isPresent()) { - throw new ReferenceSetNotFoundException(this, type); + throw new ReferenceSetNotFoundException(this, type, null); } return referenceSetDto.get(); } + public <D extends IdDto> ReferenceSetDto<D> getReferenceSetDto(Class<D> type, String name) { + + Optional<ReferenceSetDto> referenceSetDto = Iterables.tryFind(getLabels(), ReferenceSetDtos.newTypeNamePredicate(type, name)); + + if (!referenceSetDto.isPresent()) { + referenceSetDto = Iterables.tryFind(getLabels(), ReferenceSetDtos.newTypeNamePredicate(type, null)); + } + + if (!referenceSetDto.isPresent()) { + throw new ReferenceSetNotFoundException(this, type, name); + } + + return referenceSetDto.get(); + + } + public <D extends IdDto> ReferenceDto<D> getReferenceById(Class<D> type, String id) { ReferenceSetDto<D> referenceSetDto = getReferenceSetDto(type); 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 08acf5b..9800782 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 @@ -43,7 +43,16 @@ public class ReferenceSetDtos extends AbstractReferenceSetDtos { Class<D> type, LinkedHashSet<R> labels, Date lastUpdate) { + return newReferenceSetDto(type, null, labels, lastUpdate); + } + + public static <D extends IdDto, R extends ReferenceDto<D>> ReferenceSetDto<D> newReferenceSetDto( + Class<D> type, + String name, + LinkedHashSet<R> labels, + Date lastUpdate) { ReferenceSetDto<D> dto = new ReferenceSetDto<>(type); + dto.setName(name); dto.setReference((LinkedHashSet) labels); dto.setLastUpdate(lastUpdate); return dto; @@ -76,5 +85,17 @@ public class ReferenceSetDtos extends AbstractReferenceSetDtos { } + public static <D extends IdDto, BeanType extends ReferenceSetDto> Predicate<BeanType> newTypeNamePredicate(final Class<D> type, final String name) { + return new Predicate<BeanType>() { + + @Override + public boolean apply(BeanType input) { + return Objects.equals(type, input.getType()) + && Objects.equals(name, input.getName()); + } + }; + + } + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetNotFoundException.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetNotFoundException.java index 2a1e955..5694ce9 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetNotFoundException.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceSetNotFoundException.java @@ -33,11 +33,14 @@ public class ReferenceSetNotFoundException extends RuntimeException { protected final Class<?> dtoType; + protected final String name; + protected final FormDto formDto; - public ReferenceSetNotFoundException(FormDto formDto, Class<?> dtoType) { + public ReferenceSetNotFoundException(FormDto formDto, Class<?> dtoType, String name) { this.dtoType = dtoType; this.formDto = formDto; + this.name = name; } public Class<?> getDtoType() { @@ -47,4 +50,8 @@ public class ReferenceSetNotFoundException extends RuntimeException { public FormDto getFormDto() { return formDto; } + + public String getName() { + return name; + } } 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 034d079..e16d8d5 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 @@ -24,9 +24,13 @@ package fr.ird.observe.services; import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.Entities; @@ -53,8 +57,11 @@ 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.ReferenceTypeName; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.entity.ObserveEntitiesFilters; +import fr.ird.observe.services.entity.ObserveEntityFilter; import fr.ird.observe.services.service.ConcurrentModificationException; import fr.ird.observe.services.service.DataNotFoundException; import fr.ird.observe.services.service.DataSourceService; @@ -280,11 +287,11 @@ public class ObserveServiceTopia implements ObserveService { 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<ReferenceTypeName> referenceTypesNames = dtoBuilder.getReferenceTypesNames(); ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends IdDto> referentialDtoType : referentialDtoTypes) { + for (ReferenceTypeName referenceTypeName : referenceTypesNames) { - ReferenceSetDto referentialLabelSet = ReferenceSetDtos.newEmptyReferenceSetDto(referentialDtoType); + ReferenceSetDto referentialLabelSet = ReferenceSetDtos.newEmptyReferenceSetDto(referenceTypeName.getType()); labels.add(referentialLabelSet); } @@ -309,18 +316,38 @@ public class ObserveServiceTopia implements ObserveService { Class<D> dtoType, Class<E> entityType, E entity, - Class<? extends IdDto>... includeReferenceDtoTypes) { + ReferenceTypeName... includeReferenceDtoTypesNames) { try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { // copy entity - D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity, includeReferenceDtoTypes); + D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity, includeReferenceDtoTypesNames); // build label sets detected while copy - ImmutableSet<Class<? extends IdDto>> referenceDtoTypes = dtoBuilder.getReferenceTypes(); + ImmutableSet<ReferenceTypeName> referenceDtoTypesNames = dtoBuilder.getReferenceTypesNames(); + + + Set<ObserveEntityFilter> entitiesFilters = Sets.newHashSet(); + for (ReferenceTypeName referenceDtoTypeName : referenceDtoTypesNames) { + Class<TopiaEntity> entityParentType = getEntityType(referenceDtoTypeName.getParentType()); + Class<TopiaEntity> entityChildType = getEntityType(referenceDtoTypeName.getType()); + + ObserveEntityFilter filter = ObserveEntitiesFilters.getFilter( + entityParentType, + entityChildType, + referenceDtoTypeName.getType(), + referenceDtoTypeName.getProperty()); + entitiesFilters.add(filter); + + } + ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends IdDto> referenceDtoType : referenceDtoTypes) { - ReferenceSetDto referenceSet = getReferenceSet((Class<ReferentialDto>) referenceDtoType); + for (ObserveEntityFilter filter : entitiesFilters) { + ReferenceSetDto referenceSet = getReferenceSet( + filter.getDtoType(), + filter.getPropertyName(), + filter.getEntityType(), + filter.getFilter()); labels.add(referenceSet); } FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); @@ -388,7 +415,16 @@ public class ObserveServiceTopia implements ObserveService { protected <D extends IdDto> ReferenceSetDto<D> getReferenceSet(Class<D> dtoType) { Class<TopiaEntity> entityType = getEntityType(dtoType); - List<TopiaEntity> entities = loadEntities(entityType); + return getReferenceSet(dtoType, null, entityType, Predicates.alwaysTrue()); + + } + + protected <D extends IdDto, E extends TopiaEntity> ReferenceSetDto<D> getReferenceSet( + Class<D> dtoType, + String propertyName, + Class<E> entityType, + Predicate<? super E> filter) { + Iterable<E> entities = Iterables.filter(loadEntities(entityType), filter); LinkedHashSet<ReferenceDto<D>> labels = new LinkedHashSet<>(); for (TopiaEntity entity : entities) { @@ -399,7 +435,7 @@ public class ObserveServiceTopia implements ObserveService { Optional<Date> lastUpdateOptional = getLastUpdate(entityType); - ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, labels, lastUpdateOptional.orNull()); + ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, propertyName, labels, lastUpdateOptional.orNull()); return labelSetDto; } 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 83e7f96..14deb43 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 @@ -29,6 +29,7 @@ import com.google.common.reflect.TypeToken; 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.ReferenceTypeName; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; @@ -56,7 +57,7 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen private final Binder<E, D> binder; - private ImmutableSet<Class<? extends IdDto>> referencesTypes; + private ImmutableSet<ReferenceTypeName> referencesTypesNames; public static <E extends TopiaEntity, D extends IdDto> EntityToDtoBuilder<E, D> create(Class<E> entityType, Class<D> dtoType) { @@ -79,14 +80,14 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen } - public D build(ReferentialLocale referentialLocale, E entity, Class<? extends IdDto> ... includeReferenceDtoTypes) { + public D build(ReferentialLocale referentialLocale, E entity, ReferenceTypeName ... includeReferenceTypesNames) { 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<>(); + ImmutableSet.Builder<ReferenceTypeName> referenceTypesBuilder = new ImmutableSet.Builder<>(); - for (Class<? extends IdDto> includeReferenceDtoType : includeReferenceDtoTypes) { + for (ReferenceTypeName includeReferenceDtoType : includeReferenceTypesNames) { referenceTypesBuilder.add(includeReferenceDtoType); } @@ -109,7 +110,8 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen ParameterizedType type = (ParameterizedType) typeToken; dtoType = (Class) type.getActualTypeArguments()[0]; - referenceTypesBuilder.add(dtoType); + ReferenceTypeName referenceTypeName = new ReferenceTypeName(binder.getTargetType(), dtoType, propertyName); + referenceTypesBuilder.add(referenceTypeName); } else if (IdDto.class.isAssignableFrom(dtoType)) { @@ -147,7 +149,7 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen for (Object entityValue : collection) { - IdDto dto = addEntity(dtoType, (TopiaEntity) entityValue, referentialLocale, useReference, referenceTypesBuilder); + IdDto dto = addEntity(dtoType, propertyName, (TopiaEntity) entityValue, referentialLocale, useReference, referenceTypesBuilder); dtoCollection.add(dto); } @@ -185,7 +187,7 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen dtoType = rawType; } - propertyValue = addEntity(dtoType, entityValue, referentialLocale, useReference, referenceTypesBuilder); + propertyValue = addEntity(dtoType, propertyName, entityValue, referentialLocale, useReference, referenceTypesBuilder); addProperty(propertyName, propertyValue, dtoPropertiesBuilder); continue; @@ -202,17 +204,18 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen ImmutableMap<String, Object> properties = dtoPropertiesBuilder.build(); binder.injectProperties(properties, result); - referencesTypes = referenceTypesBuilder.build(); + referencesTypesNames = referenceTypesBuilder.build(); return result; } protected <EE extends TopiaEntity> IdDto addEntity(Class dtoType, - EE entityValue, + String propertyName, + TopiaEntity entityValue, ReferentialLocale referentialLocale, boolean useReference, - ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder) { + ImmutableSet.Builder<ReferenceTypeName> referenceTypesBuilder) { IdDto dto; boolean isReferential = ReferentialDto.class.isAssignableFrom(dtoType); @@ -222,11 +225,11 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen if (isReferential) { - dto = entityToReferentialRef(referentialLocale, dtoType, entityType, entityValue, referenceTypesBuilder); + dto = entityToReferentialRef(referentialLocale, dtoType, entityType, propertyName, entityValue, referenceTypesBuilder); } else { - dto = entityToRef(dtoType, referentialLocale, entityValue, referenceTypesBuilder); + dto = entityToRef(dtoType, referentialLocale, propertyName, entityValue, referenceTypesBuilder); } @@ -240,8 +243,8 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen } - public ImmutableSet<Class<? extends IdDto>> getReferenceTypes() { - return referencesTypes; + public ImmutableSet<ReferenceTypeName> getReferenceTypesNames() { + return referencesTypesNames; } protected EntityToDtoBuilder(D result, Binder<E, D> binder) { @@ -277,29 +280,31 @@ public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implemen } - protected <EE extends TopiaEntity, R extends IdDto> ReferenceDto<R> entityToRef(Class<R> dtoType, ReferentialLocale referentialLocale, EE entityValue, ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder) { + protected <EE extends TopiaEntity, R extends IdDto> ReferenceDto<R> entityToRef(Class dtoType, ReferentialLocale referentialLocale, String propertyName, TopiaEntity entityValue, ImmutableSet.Builder<ReferenceTypeName> referenceTypesBuilder) { - referenceTypesBuilder.add(dtoType); + ReferenceTypeName referenceTypeName = new ReferenceTypeName(binder.getTargetType(), dtoType, propertyName); + referenceTypesBuilder.add(referenceTypeName); ReferenceDto<R> dto = EntityToReferenceDtoBuilder.build(dtoType, referentialLocale, entityValue); dto.setId(entityValue.getTopiaId()); return dto; } - protected <EE extends TopiaEntity, R extends ReferentialDto> ReferentialReferenceDto<R> entityToReferentialRef(ReferentialLocale referentialLocale, Class<R> dtoType, Class<EE> entityType, EE entityValue, ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder) { + protected <EE extends TopiaEntity, R extends ReferentialDto> ReferentialReferenceDto<R> entityToReferentialRef(ReferentialLocale referentialLocale, Class dtoType, Class entityType, String propertyName, TopiaEntity entityValue, ImmutableSet.Builder<ReferenceTypeName> referenceTypesBuilder) { - referenceTypesBuilder.add(dtoType); + ReferenceTypeName referenceTypeName = new ReferenceTypeName(binder.getTargetType(), dtoType, propertyName); + referenceTypesBuilder.add(referenceTypeName); ReferentialReferenceDto<R> dto = EntityToReferentialReferenceDtoBuilder.build(dtoType, referentialLocale, entityValue); dto.setId(entityValue.getTopiaId()); return dto; } - protected <EE extends TopiaEntity, R extends IdDto> R entityToDto(ReferentialLocale referentialLocale, Class<R> dtoType, Class<EE> entityType, EE entityValue, ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder) { + protected <EE extends TopiaEntity, R extends IdDto> R entityToDto(ReferentialLocale referentialLocale, Class dtoType, Class entityType, EE entityValue, ImmutableSet.Builder<ReferenceTypeName> referenceTypesBuilder) { EntityToDtoBuilder<EE, R> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType); R dto = dtoBuilder.build(referentialLocale, entityValue); - referenceTypesBuilder.addAll(dtoBuilder.getReferenceTypes()); + referenceTypesBuilder.addAll(dtoBuilder.getReferenceTypesNames()); dto.setId(entityValue.getTopiaId()); return dto; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ReferenceTypeName.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ReferenceTypeName.java new file mode 100644 index 0000000..165cd06 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ReferenceTypeName.java @@ -0,0 +1,31 @@ +package fr.ird.observe.services.dto; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ReferenceTypeName { + + protected final Class<? extends IdDto> parentType; + + protected final Class<? extends IdDto> type; + + protected final String property; + + public ReferenceTypeName(Class<? extends IdDto> parentType, Class<? extends IdDto> type, String property) { + this.parentType = parentType; + this.type = type; + this.property = property; + } + + public Class<? extends IdDto> getParentType() { + return parentType; + } + + public Class<? extends IdDto> getType() { + return type; + } + + public String getProperty() { + return property; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java new file mode 100644 index 0000000..e96e87d --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java @@ -0,0 +1,93 @@ +package fr.ird.observe.services.entity; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Maps; +import fr.ird.observe.entities.referentiel.Persons; +import fr.ird.observe.entities.referentiel.ReferenceEntities; +import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.entities.referentiel.Vessels; +import fr.ird.observe.entities.seine.TripSeine; +import fr.ird.observe.services.dto.IdDto; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Map; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveEntitiesFilters { + + protected static Map<Class<? extends TopiaEntity>, Map<String, Predicate<? extends TopiaEntity>>> FILTERS = null; + + protected static <P extends TopiaEntity> void addFilter(Class<P> parentType, String propertyName, Predicate<? extends TopiaEntity> filter) { + + Map<String, Predicate<? extends TopiaEntity>> filterByProperty = FILTERS.get(parentType); + + if (filterByProperty == null) { + filterByProperty = Maps.newHashMap(); + FILTERS.put(parentType, filterByProperty); + } + + filterByProperty.put(propertyName, filter); + + } + + public static <P extends TopiaEntity, C extends TopiaEntity, D extends IdDto> ObserveEntityFilter<P, C, D> getFilter( + Class<P> parentType, + Class<C> propertyType, + Class<D> dtoType, + String propertyName) { + + if (FILTERS == null) { + init(); + } + + Predicate<C> predicate = null; + + Map<String, Predicate<? extends TopiaEntity>> filterByProperty = FILTERS.get(parentType); + + if (filterByProperty != null) { + predicate = (Predicate<C>) filterByProperty.get(propertyName); + } + + ObserveEntityFilter<P, C, D> observeEntityFilter; + + if (predicate == null) { + + if (ReferenceEntity.class.isAssignableFrom(propertyType)) { + + predicate = (Predicate<C>) ReferenceEntities.newEnablePredicate(); + + } else { + + predicate = Predicates.alwaysTrue(); + } + + observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, null, predicate); + + } else { + if (ReferenceEntity.class.isAssignableFrom(propertyType)) { + + predicate = Predicates.and(predicate, (Predicate<C>) ReferenceEntities.newEnablePredicate()); + + } + + observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, propertyName, predicate); + } + + return observeEntityFilter; + + } + + public static void init() { + FILTERS = Maps.newHashMap(); + // TripSeine + addFilter(TripSeine.class, TripSeine.PROPERTY_CAPTAIN, Persons.newCaptainPredicate()); + addFilter(TripSeine.class, TripSeine.PROPERTY_OBSERVER, Persons.newObserverPredicate()); + addFilter(TripSeine.class, TripSeine.PROPERTY_DATA_ENTRY_OPERATOR, Persons.newDataEntryOperatorPredicate()); + addFilter(TripSeine.class, TripSeine.PROPERTY_VESSEL, Vessels.newVesselSeinePredicate()); + + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java new file mode 100644 index 0000000..74d8d64 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java @@ -0,0 +1,72 @@ +package fr.ird.observe.services.entity; + +import com.google.common.base.Predicate; +import fr.ird.observe.services.dto.IdDto; +import org.nuiton.topia.persistence.TopiaEntity; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveEntityFilter<P extends TopiaEntity, C extends TopiaEntity, D extends IdDto> { + + protected final Class<P> parentType; + + protected final Class<C> entityType; + + protected final Class<D> dtoType; + + protected final String propertyName; + + protected final Predicate<C> filter; + + public ObserveEntityFilter(Class<P> parentType, Class<C> entityType, Class<D> dtoType, String propertyName, Predicate<C> filter) { + this.parentType = parentType; + this.entityType = entityType; + this.dtoType = dtoType; + this.propertyName = propertyName; + this.filter = filter; + } + + public Class<P> getParentType() { + return parentType; + } + + public Class<C> getEntityType() { + return entityType; + } + + public Class<D> getDtoType() { + return dtoType; + } + + public String getPropertyName() { + return propertyName; + } + + public Predicate<C> getFilter() { + return filter; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ObserveEntityFilter<?, ?, ?> filter = (ObserveEntityFilter<?, ?, ?>) o; + + if (!parentType.equals(filter.parentType)) return false; + if (!entityType.equals(filter.entityType)) return false; + if (!dtoType.equals(filter.dtoType)) return false; + return !(propertyName != null ? !propertyName.equals(filter.propertyName) : filter.propertyName != null); + + } + + @Override + public int hashCode() { + int result = parentType.hashCode(); + result = 31 * result + entityType.hashCode(); + result = 31 * result + dtoType.hashCode(); + result = 31 * result + (propertyName != null ? propertyName.hashCode() : 0); + return result; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineEncouterServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineEncouterServiceTopia.java index 7d18932..03e6aaa 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineEncouterServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineEncouterServiceTopia.java @@ -25,7 +25,9 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.longline.ActivityLonglineEncouterDto; +import fr.ird.observe.services.dto.longline.EncounterDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.longline.EncounterTypeDto; @@ -54,8 +56,8 @@ public class ActivityLongLineEncouterServiceTopia extends ObserveServiceTopia im ActivityLonglineEncouterDto.class, ActivityLongline.class, activityLongline, - EncounterTypeDto.class, - SpeciesDto.class); + new ReferenceTypeName(EncounterDto.class, EncounterTypeDto.class, EncounterDto.PROPERTY_ENCOUNTER_TYPE), + new ReferenceTypeName(EncounterDto.class, SpeciesDto.class, EncounterDto.PROPERTY_SPECIES)); return form; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineSensorUsedServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineSensorUsedServiceTopia.java index 975cc89..d44984a 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineSensorUsedServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/ActivityLongLineSensorUsedServiceTopia.java @@ -25,7 +25,9 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.longline.ActivityLonglineSensorUsedDto; +import fr.ird.observe.services.dto.longline.SensorUsedDto; import fr.ird.observe.services.dto.referential.longline.SensorBrandDto; import fr.ird.observe.services.dto.referential.longline.SensorDataFormatDto; import fr.ird.observe.services.dto.referential.longline.SensorTypeDto; @@ -55,9 +57,9 @@ public class ActivityLongLineSensorUsedServiceTopia extends ObserveServiceTopia ActivityLonglineSensorUsedDto.class, ActivityLongline.class, activityLongline, - SensorTypeDto.class, - SensorBrandDto.class, - SensorDataFormatDto.class); + new ReferenceTypeName(SensorUsedDto.class, SensorTypeDto.class, SensorUsedDto.PROPERTY_SENSOR_TYPE), + new ReferenceTypeName(SensorUsedDto.class, SensorBrandDto.class, SensorUsedDto.PROPERTY_SENSOR_BRAND), + new ReferenceTypeName(SensorUsedDto.class, SensorDataFormatDto.class, SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT)); return form; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/GearUseFeaturesLonglineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/GearUseFeaturesLonglineServiceTopia.java index f4a89fd..79a88d1 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/GearUseFeaturesLonglineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/GearUseFeaturesLonglineServiceTopia.java @@ -27,7 +27,9 @@ import fr.ird.observe.entities.longline.GearUseFeaturesLongline; import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; +import fr.ird.observe.services.dto.longline.GearUseFeaturesMeasurementLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.GearCaracteristicDto; import fr.ird.observe.services.dto.referential.GearDto; @@ -76,8 +78,8 @@ public class GearUseFeaturesLonglineServiceTopia extends ObserveServiceTopia imp GearUseFeaturesLonglineDto.class, GearUseFeaturesLongline.class, featuresLongline, - GearDto.class, - GearCaracteristicDto.class); + new ReferenceTypeName(GearUseFeaturesLonglineDto.class, GearDto.class, GearUseFeaturesLonglineDto.PROPERTY_GEAR), + new ReferenceTypeName(GearUseFeaturesMeasurementLonglineDto.class, GearCaracteristicDto.class, GearUseFeaturesMeasurementLonglineDto.PROPERTY_GEAR_CARACTERISTIC)); return form; } @@ -91,8 +93,8 @@ public class GearUseFeaturesLonglineServiceTopia extends ObserveServiceTopia imp GearUseFeaturesLonglineDto.class, GearUseFeaturesLongline.class, featuresLongline, - GearDto.class, - GearCaracteristicDto.class); + new ReferenceTypeName(GearUseFeaturesLonglineDto.class, GearDto.class, GearUseFeaturesLonglineDto.PROPERTY_GEAR), + new ReferenceTypeName(GearUseFeaturesMeasurementLonglineDto.class, GearCaracteristicDto.class, GearUseFeaturesMeasurementLonglineDto.PROPERTY_GEAR_CARACTERISTIC)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineCatchServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineCatchServiceTopia.java index ead0657..db7b96e 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineCatchServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineCatchServiceTopia.java @@ -25,10 +25,14 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.longline.BasketDto; import fr.ird.observe.services.dto.longline.BranchlineDto; +import fr.ird.observe.services.dto.longline.CatchLonglineDto; import fr.ird.observe.services.dto.longline.SectionDto; import fr.ird.observe.services.dto.longline.SetLonglineCatchDto; +import fr.ird.observe.services.dto.longline.SizeMeasureDto; +import fr.ird.observe.services.dto.longline.WeightMeasureDto; import fr.ird.observe.services.dto.referential.SexDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto; @@ -66,18 +70,20 @@ public class SetLonglineCatchServiceTopia extends ObserveServiceTopia implements SetLonglineCatchDto.class, SetLongline.class, setLongline, - SpeciesDto.class, - HealthnessDto.class, - HookPositionDto.class, - CatchFateLonglineDto.class, - StomacFullnessDto.class, - SexDto.class, - MaturityStatusDto.class, - SizeMeasureTypeDto.class, - WeightMeasureTypeDto.class, - SectionDto.class, - BasketDto.class, - BranchlineDto.class); + new ReferenceTypeName(CatchLonglineDto.class, SpeciesDto.class, CatchLonglineDto.PROPERTY_SPECIES_CATCH), + new ReferenceTypeName(CatchLonglineDto.class, HealthnessDto.class, CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS), + new ReferenceTypeName(CatchLonglineDto.class, HookPositionDto.class, CatchLonglineDto.PROPERTY_HOOK_POSITION), + new ReferenceTypeName(CatchLonglineDto.class, CatchFateLonglineDto.class, CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE), + new ReferenceTypeName(CatchLonglineDto.class, HealthnessDto.class, CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS), + new ReferenceTypeName(CatchLonglineDto.class, SpeciesDto.class, CatchLonglineDto.PROPERTY_PREDATOR), + new ReferenceTypeName(CatchLonglineDto.class, StomacFullnessDto.class, CatchLonglineDto.PROPERTY_STOMAC_FULLNESS), + new ReferenceTypeName(CatchLonglineDto.class, SexDto.class, CatchLonglineDto.PROPERTY_SEX), + new ReferenceTypeName(CatchLonglineDto.class, MaturityStatusDto.class, CatchLonglineDto.PROPERTY_MATURITY_STATUS), + new ReferenceTypeName(SizeMeasureDto.class, SizeMeasureTypeDto.class, SizeMeasureDto.PROPERTY_SIZE_MEASURE_TYPE), + new ReferenceTypeName(WeightMeasureDto.class, WeightMeasureTypeDto.class, WeightMeasureDto.PROPERTY_WEIGHT_MEASURE_TYPE), + new ReferenceTypeName(CatchLonglineDto.class, SectionDto.class, CatchLonglineDto.PROPERTY_SECTION), + new ReferenceTypeName(CatchLonglineDto.class, BasketDto.class, CatchLonglineDto.PROPERTY_BASKET), + new ReferenceTypeName(CatchLonglineDto.class, BranchlineDto.class, CatchLonglineDto.PROPERTY_BRANCHLINE)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineDetailCompositionServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineDetailCompositionServiceTopia.java index 5ca5342..96cea89 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineDetailCompositionServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineDetailCompositionServiceTopia.java @@ -25,6 +25,8 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; +import fr.ird.observe.services.dto.longline.BranchlineDto; import fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionDto; import fr.ird.observe.services.dto.referential.longline.BaitHaulingStatusDto; import fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto; @@ -60,12 +62,13 @@ public class SetLonglineDetailCompositionServiceTopia extends ObserveServiceTopi SetLonglineDetailCompositionDto.class, SetLongline.class, setLongline, - LineTypeDto.class, - HookTypeDto.class, - HookSizeDto.class, - BaitTypeDto.class, - BaitSettingStatusDto.class, - BaitHaulingStatusDto.class); + new ReferenceTypeName(BranchlineDto.class, LineTypeDto.class, BranchlineDto.PROPERTY_TOP_TYPE), + new ReferenceTypeName(BranchlineDto.class, LineTypeDto.class, BranchlineDto.PROPERTY_TRACELINE_TYPE), + new ReferenceTypeName(BranchlineDto.class, HookTypeDto.class, BranchlineDto.PROPERTY_HOOK_TYPE), + new ReferenceTypeName(BranchlineDto.class, HookSizeDto.class, BranchlineDto.PROPERTY_HOOK_SIZE), + new ReferenceTypeName(BranchlineDto.class, BaitTypeDto.class, BranchlineDto.PROPERTY_BAIT_TYPE), + new ReferenceTypeName(BranchlineDto.class, BaitSettingStatusDto.class, BranchlineDto.PROPERTY_BAIT_SETTING_STATUS), + new ReferenceTypeName(BranchlineDto.class, BaitHaulingStatusDto.class, BranchlineDto.PROPERTY_BAIT_HAULING_STATUS)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineGlobalCompositionServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineGlobalCompositionServiceTopia.java index 8e423bf..88f423f 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineGlobalCompositionServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/SetLonglineGlobalCompositionServiceTopia.java @@ -25,6 +25,11 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; +import fr.ird.observe.services.dto.longline.BaitsCompositionDto; +import fr.ird.observe.services.dto.longline.BranchlinesCompositionDto; +import fr.ird.observe.services.dto.longline.FloatlinesCompositionDto; +import fr.ird.observe.services.dto.longline.HooksCompositionDto; import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto; import fr.ird.observe.services.dto.referential.longline.BaitTypeDto; @@ -60,12 +65,14 @@ public class SetLonglineGlobalCompositionServiceTopia extends ObserveServiceTopi SetLonglineGlobalCompositionDto.class, SetLongline.class, setLongline, - LineTypeDto.class, - HookTypeDto.class, - HookSizeDto.class, - BaitSettingStatusDto.class, - BaitTypeDto.class, - MitigationTypeDto.class); + new ReferenceTypeName(FloatlinesCompositionDto.class, LineTypeDto.class, FloatlinesCompositionDto.PROPERTY_LINE_TYPE), + new ReferenceTypeName(BranchlinesCompositionDto.class, LineTypeDto.class, BranchlinesCompositionDto.PROPERTY_TOP_TYPE), + new ReferenceTypeName(BranchlinesCompositionDto.class, LineTypeDto.class, BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE), + new ReferenceTypeName(HooksCompositionDto.class, HookTypeDto.class, HooksCompositionDto.PROPERTY_HOOK_TYPE), + new ReferenceTypeName(HooksCompositionDto.class, HookSizeDto.class, HooksCompositionDto.PROPERTY_HOOK_SIZE), + new ReferenceTypeName(BaitsCompositionDto.class, BaitSettingStatusDto.class, BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS), + new ReferenceTypeName(BaitsCompositionDto.class, BaitTypeDto.class, BaitsCompositionDto.PROPERTY_BAIT_TYPE), + new ReferenceTypeName(SetLonglineGlobalCompositionDto.class, MitigationTypeDto.class, SetLonglineGlobalCompositionDto.PROPERTY_MITIGATION_TYPE)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TdrServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TdrServiceTopia.java index 1f5c8e7..3f56923 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TdrServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TdrServiceTopia.java @@ -25,10 +25,12 @@ package fr.ird.observe.services.service.longline; import fr.ird.observe.entities.longline.SetLongline; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.longline.BasketDto; import fr.ird.observe.services.dto.longline.BranchlineDto; import fr.ird.observe.services.dto.longline.SectionDto; import fr.ird.observe.services.dto.longline.SetLonglineTdrDto; +import fr.ird.observe.services.dto.longline.TdrDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.longline.ItemHorizontalPositionDto; import fr.ird.observe.services.dto.referential.longline.ItemVerticalPositionDto; @@ -61,13 +63,13 @@ public class TdrServiceTopia extends ObserveServiceTopia implements TdrService { SetLonglineTdrDto.class, SetLongline.class, setLongline, - SensorBrandDto.class, - ItemHorizontalPositionDto.class, - ItemVerticalPositionDto.class, - SpeciesDto.class, - SectionDto.class, - BasketDto.class, - BranchlineDto.class); + new ReferenceTypeName(TdrDto.class, SensorBrandDto.class, TdrDto.PROPERTY_SENSOR_BRAND), + new ReferenceTypeName(TdrDto.class, ItemHorizontalPositionDto.class, TdrDto.PROPERTY_ITEM_HORIZONTAL_POSITION), + new ReferenceTypeName(TdrDto.class, ItemVerticalPositionDto.class, TdrDto.PROPERTY_ITEM_VERTICAL_POSITION), + new ReferenceTypeName(TdrDto.class, SpeciesDto.class, TdrDto.PROPERTY_SPECIES), + new ReferenceTypeName(TdrDto.class, SectionDto.class, TdrDto.PROPERTY_SECTION), + new ReferenceTypeName(TdrDto.class, BasketDto.class, TdrDto.PROPERTY_BASKET), + new ReferenceTypeName(TdrDto.class, BranchlineDto.class, TdrDto.PROPERTY_BRANCHLINE)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/GearUseFeaturesSeineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/GearUseFeaturesSeineServiceTopia.java index 3fb5b79..f5430af 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/GearUseFeaturesSeineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/GearUseFeaturesSeineServiceTopia.java @@ -27,8 +27,10 @@ import fr.ird.observe.entities.seine.GearUseFeaturesSeine; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.GearCaracteristicDto; import fr.ird.observe.services.dto.referential.GearDto; +import fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.DataNotFoundException; @@ -76,7 +78,8 @@ public class GearUseFeaturesSeineServiceTopia extends ObserveServiceTopia implem GearUseFeaturesSeineDto.class, GearUseFeaturesSeine.class, featuresSeine, - GearDto.class, GearCaracteristicDto.class); + new ReferenceTypeName(GearUseFeaturesSeineDto.class, GearDto.class, GearUseFeaturesSeineDto.PROPERTY_GEAR), + new ReferenceTypeName(GearUseFeaturesMeasurementSeineDto.class, GearCaracteristicDto.class, GearUseFeaturesMeasurementSeineDto.PROPERTY_GEAR_CARACTERISTIC)); return form; } @@ -90,7 +93,8 @@ public class GearUseFeaturesSeineServiceTopia extends ObserveServiceTopia implem GearUseFeaturesSeineDto.class, GearUseFeaturesSeine.class, featuresSeine, - GearDto.class, GearCaracteristicDto.class); + new ReferenceTypeName(GearUseFeaturesSeineDto.class, GearDto.class, GearUseFeaturesSeineDto.PROPERTY_GEAR), + new ReferenceTypeName(GearUseFeaturesMeasurementSeineDto.class, GearCaracteristicDto.class, GearUseFeaturesMeasurementSeineDto.PROPERTY_GEAR_CARACTERISTIC)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java index a7db8ca..4aee275 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java @@ -25,8 +25,10 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto; import fr.ird.observe.services.dto.referential.seine.SpeciesFateDto; +import fr.ird.observe.services.dto.seine.NonTargetCatchDto; import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; /** @@ -53,7 +55,8 @@ public class NonTargetCatchServiceTopia extends ObserveServiceTopia implements N SetSeineNonTargetCatchDto.class, SetSeine.class, setSeine, - SpeciesFateDto.class, ReasonForDiscardDto.class); + new ReferenceTypeName(NonTargetCatchDto.class, SpeciesFateDto.class, NonTargetCatchDto.PROPERTY_SPECIES_FATE), + new ReferenceTypeName(NonTargetCatchDto.class, ReasonForDiscardDto.class, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectObservedSpeciesServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectObservedSpeciesServiceTopia.java index 034d26f..9e1b4f4 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectObservedSpeciesServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectObservedSpeciesServiceTopia.java @@ -25,9 +25,11 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.seine.SpeciesStatusDto; import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -60,7 +62,8 @@ public class ObjectObservedSpeciesServiceTopia extends ObserveServiceTopia imple FloatingObjectObservedSpeciesDto.class, FloatingObject.class, floatingObject, - SpeciesDto.class, SpeciesStatusDto.class); + new ReferenceTypeName(ObjectObservedSpeciesDto.class, SpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES), + new ReferenceTypeName(ObjectObservedSpeciesDto.class, SpeciesStatusDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES_STATUS)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java index 2c8626d..440a9e9 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java @@ -25,8 +25,11 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -56,7 +59,7 @@ public class ObjectSchoolEstimateServiceTopia extends ObserveServiceTopia implem FloatingObjectSchoolEstimateDto.class, FloatingObject.class, floatingObject, - SpeciesDto.class); + new ReferenceTypeName(ObjectSchoolEstimateDto.class, SpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/SchoolEstimateServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/SchoolEstimateServiceTopia.java index 143fc31..1ffa6e7 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/SchoolEstimateServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/SchoolEstimateServiceTopia.java @@ -25,7 +25,9 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.seine.SchoolEstimateDto; import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; /** @@ -51,7 +53,7 @@ public class SchoolEstimateServiceTopia extends ObserveServiceTopia implements S SetSeineSchoolEstimateDto.class, SetSeine.class, setSeine, - SpeciesDto.class); + new ReferenceTypeName(SchoolEstimateDto.class, SpeciesDto.class, SchoolEstimateDto.PROPERTY_SPECIES)); return form; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetSampleServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetSampleServiceTopia.java index 8d2e108..207c70b 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetSampleServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetSampleServiceTopia.java @@ -31,8 +31,10 @@ import fr.ird.observe.services.ObserveServiceTopia; 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.ReferenceTypeName; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.seine.SetSeineDto; +import fr.ird.observe.services.dto.seine.TargetLengthDto; import fr.ird.observe.services.dto.seine.TargetSampleDto; import java.util.Collection; @@ -89,7 +91,7 @@ public class TargetSampleServiceTopia extends ObserveServiceTopia implements Tar TargetSampleDto.class, TargetSample.class, targetSample, - SpeciesDto.class); + new ReferenceTypeName(TargetLengthDto.class, SpeciesDto.class, TargetLengthDto.PROPERTY_SPECIES)); // on filtre la list des espéces cibles Set<Species> speciesSet = Sets.newLinkedHashSet(); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TransmittingBuoyOperationServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TransmittingBuoyOperationServiceTopia.java index a505456..9503954 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TransmittingBuoyOperationServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TransmittingBuoyOperationServiceTopia.java @@ -25,9 +25,11 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyOperationDto; import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyTypeDto; import fr.ird.observe.services.dto.seine.FloatingObjectTransmittingBuoyDto; +import fr.ird.observe.services.dto.seine.TransmittingBuoyDto; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -57,8 +59,8 @@ public class TransmittingBuoyOperationServiceTopia extends ObserveServiceTopia i FloatingObjectTransmittingBuoyDto.class, FloatingObject.class, floatingObject, - TransmittingBuoyOperationDto.class, - TransmittingBuoyTypeDto.class); + new ReferenceTypeName(TransmittingBuoyDto.class, TransmittingBuoyOperationDto.class, TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_OPERATION), + new ReferenceTypeName(TransmittingBuoyDto.class, TransmittingBuoyTypeDto.class, TransmittingBuoyDto.PROPERTY_TRANSMITTING_BUOY_TYPE)); return form; } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java index 3330c86..16805b2 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/EntityToDtoBuilderTest.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.builder; * #L% */ +import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import fr.ird.observe.entities.constants.GearType; @@ -41,6 +42,7 @@ import fr.ird.observe.entities.seine.GearUseFeaturesSeineImpl; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.ReferenceValueNotFoundException; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.GearCaracteristicDto; @@ -105,13 +107,13 @@ public class EntityToDtoBuilderTest { EntityToDtoBuilder<Program, ProgramDto> builder = EntityToDtoBuilder.create(Program.class, ProgramDto.class); ProgramDto programDto = builder.build(ReferentialLocale.FR, program); - ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = builder.getReferenceTypes(); + ImmutableSet<ReferenceTypeName> referentialDtoTypes = builder.getReferenceTypesNames(); // On verifie les types de listes de labels détectées Assert.assertNotNull(referentialDtoTypes); Assert.assertEquals(1, referentialDtoTypes.size()); - Assert.assertTrue(referentialDtoTypes.contains(OrganismDto.class)); + Assert.assertEquals(OrganismDto.class, Iterables.get(referentialDtoTypes, 0).getType()); // On vérife que le program a bien été copié Assert.assertEquals(program.getCode(), programDto.getCode()); @@ -214,15 +216,21 @@ public class EntityToDtoBuilderTest { EntityToDtoBuilder<GearUseFeaturesSeine, GearUseFeaturesSeineDto> builder = EntityToDtoBuilder.create(GearUseFeaturesSeine.class, GearUseFeaturesSeineDto.class); GearUseFeaturesSeineDto featuresDto = builder.build(ReferentialLocale.FR, features); - ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = builder.getReferenceTypes(); + ImmutableSet<ReferenceTypeName> referentialDtoTypes = builder.getReferenceTypesNames(); // On verifie les types de listes de labels détectées Assert.assertNotNull(referentialDtoTypes); Assert.assertEquals(2, referentialDtoTypes.size()); - Assert.assertTrue(referentialDtoTypes.contains(GearDto.class)); - Assert.assertTrue(referentialDtoTypes.contains(GearCaracteristicDto.class)); + Iterable<Class<? extends IdDto>> types = Iterables.transform(referentialDtoTypes, new Function<ReferenceTypeName, Class<? extends IdDto>>() { + @Override + public Class<? extends IdDto> apply(ReferenceTypeName referenceTypeName) { + return referenceTypeName.getType(); + } + }); + Assert.assertTrue(Iterables.contains(types, GearDto.class)); + Assert.assertTrue(Iterables.contains(types, GearCaracteristicDto.class)); // On vérife que l'entité a bien été copié Assert.assertEquals(features.getTopiaId(), featuresDto.getId()); 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 index 7b01ea1..add020f 100644 --- 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 @@ -150,7 +150,7 @@ public class TripSeineServiceTopiaTest extends AbstractServiceTopiaTest { Assert.assertTrue(types.contains(VesselDto.class)); Assert.assertTrue(types.contains(OceanDto.class)); Assert.assertTrue(types.contains(HarbourDto.class)); - Assert.assertEquals(formDto.sizeLabels(), 4); + Assert.assertEquals(formDto.sizeLabels(), 6); for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { @@ -191,7 +191,7 @@ public class TripSeineServiceTopiaTest extends AbstractServiceTopiaTest { Assert.assertTrue(types.contains(VesselDto.class)); Assert.assertTrue(types.contains(OceanDto.class)); Assert.assertTrue(types.contains(HarbourDto.class)); - Assert.assertEquals(formDto.sizeLabels(), 4); + Assert.assertEquals(formDto.sizeLabels(), 6); for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { @@ -230,7 +230,7 @@ public class TripSeineServiceTopiaTest extends AbstractServiceTopiaTest { Assert.assertTrue(types.contains(VesselDto.class)); Assert.assertTrue(types.contains(OceanDto.class)); Assert.assertTrue(types.contains(HarbourDto.class)); - Assert.assertEquals(formDto.sizeLabels(), 4); + Assert.assertEquals(formDto.sizeLabels(), 6); for (ReferenceSetDto referenceSetDto : formDto.getLabels()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.