This is an automated email from the git hooks/post-receive script. New commit to branch feature/refactor_reference in repository tutti. See http://git.codelutin.com/tutti.git commit e7998e68d8c474d29215ad71e65cfb9769ff9ca0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Nov 12 09:43:36 2015 +0100 Ajout de définition de requètes de données --- .../services/service/ReferenceSetDefinition.java | 70 ++++++ .../services/service/ReferenceSetDefinitions.java | 253 +++++++++++++++++++++ .../service/ReferenceSetPropertyDefinition.java | 67 ++++++ .../services/service/ReferenceSetRequest.java | 31 +++ .../service/ReferenceSetRequestDefinition.java | 53 +++++ .../service/ReferenceSetRequestDefinitions.java | 39 ++++ .../service/ReferenceSetRequestKeyDefinition.java | 86 +++++++ .../service/ReferentialReferenceSetResult.java | 55 +++++ 8 files changed, 654 insertions(+) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java new file mode 100644 index 0000000..edac622 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinition.java @@ -0,0 +1,70 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ReferenceSetDto; + +import java.io.Serializable; + +/** + * Pour définir ce que l'on doit retrouver dans un ensemble de références d'un même type. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetDefinition<D extends IdDto> implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** + * Le type du dto qui doit être transformé en références. + * {@link ReferenceSetDto#getType()}. + */ + private final Class<D> type; + + private final ImmutableSet<ReferenceSetPropertyDefinition> properties; + + public ReferenceSetDefinition(Class<D> type, ImmutableSet<ReferenceSetPropertyDefinition> properties) { + this.type = type; + this.properties = properties; + } + + public Class<D> getType() { + return type; + } + + public ImmutableSet<ReferenceSetPropertyDefinition> getProperties() { + return properties; + } + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + public static class Builder<D extends IdDto> { + + private final Class<D> type; + + private final ImmutableSet.Builder<ReferenceSetPropertyDefinition> propertiesBuilder; + + public Builder(Class<D> type) { + this.type = type; + this.propertiesBuilder = ImmutableSet.builder(); + } + + public <O> Builder<D> addProperty(Class<O> type, String name) { + return addProperty(ReferenceSetPropertyDefinition.of(type, name)); + } + + public Builder<D> addProperty(ReferenceSetPropertyDefinition propertyDefinition) { + propertiesBuilder.add(propertyDefinition); + return this; + } + + public ReferenceSetDefinition<D> build() { + return new ReferenceSetDefinition<>(type, propertiesBuilder.build()); + } + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java new file mode 100644 index 0000000..be4abc9 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetDefinitions.java @@ -0,0 +1,253 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.dto.constants.GearType; +import fr.ird.observe.services.dto.referential.CountryDto; +import fr.ird.observe.services.dto.referential.FpaZoneDto; +import fr.ird.observe.services.dto.referential.GearCaracteristicDto; +import fr.ird.observe.services.dto.referential.GearCaracteristicTypeDto; +import fr.ird.observe.services.dto.referential.GearDto; +import fr.ird.observe.services.dto.referential.HarbourDto; +import fr.ird.observe.services.dto.referential.I18nReferentialDto; +import fr.ird.observe.services.dto.referential.LengthWeightParameterDto; +import fr.ird.observe.services.dto.referential.OceanDto; +import fr.ird.observe.services.dto.referential.OrganismDto; +import fr.ird.observe.services.dto.referential.PersonDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.SexDto; +import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.SpeciesGroupDto; +import fr.ird.observe.services.dto.referential.SpeciesListDto; +import fr.ird.observe.services.dto.referential.VesselDto; +import fr.ird.observe.services.dto.referential.VesselSizeCategoryDto; +import fr.ird.observe.services.dto.referential.VesselTypeDto; +import fr.ird.observe.services.dto.referential.longline.BaitHaulingStatusDto; +import fr.ird.observe.services.dto.referential.longline.BaitSettingStatusDto; +import fr.ird.observe.services.dto.referential.longline.BaitTypeDto; +import fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto; +import fr.ird.observe.services.dto.referential.longline.EncounterTypeDto; +import fr.ird.observe.services.dto.referential.longline.HealthnessDto; +import fr.ird.observe.services.dto.referential.longline.HookPositionDto; +import fr.ird.observe.services.dto.referential.longline.HookSizeDto; +import fr.ird.observe.services.dto.referential.longline.HookTypeDto; +import fr.ird.observe.services.dto.referential.longline.ItemHorizontalPositionDto; +import fr.ird.observe.services.dto.referential.longline.ItemVerticalPositionDto; +import fr.ird.observe.services.dto.referential.longline.LightsticksColorDto; +import fr.ird.observe.services.dto.referential.longline.LightsticksTypeDto; +import fr.ird.observe.services.dto.referential.longline.LineTypeDto; +import fr.ird.observe.services.dto.referential.longline.MaturityStatusDto; +import fr.ird.observe.services.dto.referential.longline.MitigationTypeDto; +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; +import fr.ird.observe.services.dto.referential.longline.SettingShapeDto; +import fr.ird.observe.services.dto.referential.longline.SizeMeasureTypeDto; +import fr.ird.observe.services.dto.referential.longline.StomacFullnessDto; +import fr.ird.observe.services.dto.referential.longline.TripTypeDto; +import fr.ird.observe.services.dto.referential.longline.VesselActivityLonglineDto; +import fr.ird.observe.services.dto.referential.longline.WeightMeasureTypeDto; +import fr.ird.observe.services.dto.referential.seine.DetectionModeDto; +import fr.ird.observe.services.dto.referential.seine.ObjectFateDto; +import fr.ird.observe.services.dto.referential.seine.ObjectOperationDto; +import fr.ird.observe.services.dto.referential.seine.ObjectTypeDto; +import fr.ird.observe.services.dto.referential.seine.ObservedSystemDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForNoFishingDto; +import fr.ird.observe.services.dto.referential.seine.ReasonForNullSetDto; +import fr.ird.observe.services.dto.referential.seine.SpeciesFateDto; +import fr.ird.observe.services.dto.referential.seine.SpeciesStatusDto; +import fr.ird.observe.services.dto.referential.seine.SurroundingActivityDto; +import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyOperationDto; +import fr.ird.observe.services.dto.referential.seine.TransmittingBuoyTypeDto; +import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.referential.seine.WindDto; + +/** + * Contient les définitions de tous les ensembles de référence utilisables dans les services. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum ReferenceSetDefinitions { + + COUNTRY(newDefaultDefinitionBuilder(CountryDto.class)), + + FPA_ZONE(newDefaultDefinitionBuilder(FpaZoneDto.class)), + + GEAR_CARACTERISTIC(newDefinitionBuilder(GearCaracteristicDto.class) + .addProperty(String.class, GearCaracteristicDto.PROPERTY_GEAR_CARACTERISTIC_TYPE)), + + GEAR_CARACTERISTIC_TYPE(newDefaultDefinitionBuilder(GearCaracteristicTypeDto.class)), + + GEAR(newDefaultDefinitionBuilder(GearDto.class)), + + HARBOUR(newDefinitionBuilder(HarbourDto.class) + .addProperty(String.class, HarbourDto.PROPERTY_CODE) + .addProperty(String.class, HarbourDto.PROPERTY_NAME) + .addProperty(String.class, HarbourDto.PROPERTY_LOCODE)), + + LENGTH_WEIGHT_PARAMETER(newDefinitionBuilder(LengthWeightParameterDto.class) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_CODE) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_OCEAN) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_SPECIES) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_LENGTH_WEIGHT_FORMULA) + .addProperty(String.class, LengthWeightParameterDto.PROPERTY_WEIGHT_LENGTH_FORMULA)), + + OCEAN(newDefaultDefinitionBuilder(OceanDto.class)), + + ORGANISM(newDefaultDefinitionBuilder(OrganismDto.class)), + + PERSON(newDefinitionBuilder(PersonDto.class) + .addProperty(String.class, PersonDto.PROPERTY_FIRST_NAME) + .addProperty(String.class, PersonDto.PROPERTY_LAST_NAME) + .addProperty(String.class, PersonDto.PROPERTY_CAPTAIN) + .addProperty(String.class, PersonDto.PROPERTY_DATA_ENTRY_OPERATOR) + .addProperty(String.class, PersonDto.PROPERTY_OBSERVER)), + + PROGRAM(newDefinitionBuilder(ProgramDto.class) + .addProperty(GearType.class, ProgramDto.PROPERTY_GEAR_TYPE) + .addProperty(String.class, ProgramDto.PROPERTY_GEAR_TYPE_PREFIX)), + + SEX(newDefaultDefinitionBuilder(SexDto.class)), + + SPECIES(newDefinitionBuilder(SpeciesDto.class) + .addProperty(String.class, SpeciesDto.PROPERTY_SCIENTIFIC_LABEL) + .addProperty(String.class, SpeciesDto.PROPERTY_HOME_ID) + .addProperty(String.class, SpeciesDto.PROPERTY_LENGTH_MEASURE_TYPE)), + + SPECIES_GROUP(newDefaultDefinitionBuilder(SpeciesGroupDto.class)), + + SPECIES_LIST(newDefaultDefinitionBuilder(SpeciesListDto.class)), + + VESSEL_SIZE_CATEGORY(newDefinitionBuilder(VesselSizeCategoryDto.class) + .addProperty(String.class, VesselSizeCategoryDto.PROPERTY_GAUGE_LABEL) + .addProperty(String.class, VesselSizeCategoryDto.PROPERTY_CAPACITY_LABEL)), + + VESSEL(newDefaultDefinitionBuilder(VesselDto.class)), + + VESSEL_TYPE(newDefaultDefinitionBuilder(VesselTypeDto.class)), + + // -------------------------------------------------------------------------------------------------------------- // + // -- REFERENTIAL LONGLINE -------------------------------------------------------------------------------------- // + // -------------------------------------------------------------------------------------------------------------- // + + BAIT_HAULING_STATUS(newDefaultDefinitionBuilder(BaitHaulingStatusDto.class)), + + BAIT_SETTING_STATUS(newDefaultDefinitionBuilder(BaitSettingStatusDto.class)), + + BAITTYPE(newDefaultDefinitionBuilder(BaitTypeDto.class)), + + CATCH_FATE_LONGLINE(newDefaultDefinitionBuilder(CatchFateLonglineDto.class)), + + ENCOUNTER_TYPE(newDefaultDefinitionBuilder(EncounterTypeDto.class)), + + HEALTHNESS(newDefaultDefinitionBuilder(HealthnessDto.class)), + + HOOK_POSITION(newDefaultDefinitionBuilder(HookPositionDto.class)), + + HOOK_SIZE(newDefaultDefinitionBuilder(HookSizeDto.class)), + + HOOK_TYPE(newDefaultDefinitionBuilder(HookTypeDto.class)), + + ITEM_HORIZONTAL_POSITION(newDefaultDefinitionBuilder(ItemHorizontalPositionDto.class)), + + ITEM_VERTICAL_POSITION(newDefaultDefinitionBuilder(ItemVerticalPositionDto.class)), + + LIGHTSTICKS_COLOR(newDefaultDefinitionBuilder(LightsticksColorDto.class)), + + LIGHTSTICKS_TYPE(newDefaultDefinitionBuilder(LightsticksTypeDto.class)), + + LINE_TYPE(newDefaultDefinitionBuilder(LineTypeDto.class)), + + MATURITY_STATUS(newDefaultDefinitionBuilder(MaturityStatusDto.class)), + + MITIGATION_TYPE(newDefaultDefinitionBuilder(MitigationTypeDto.class)), + + SENSOR_BRAND(newDefinitionBuilder(SensorBrandDto.class) + .addProperty(String.class, SensorBrandDto.PROPERTY_BRAND_NAME)), + + SENSOR_DATA_FORMAT(newDefaultDefinitionBuilder(SensorDataFormatDto.class)), + + SENSOR_TYPE(newDefaultDefinitionBuilder(SensorTypeDto.class)), + + SETTING_SHAPE(newDefaultDefinitionBuilder(SettingShapeDto.class)), + + SIZE_MEASURE_TYPE(newDefaultDefinitionBuilder(SizeMeasureTypeDto.class)), + + STOMAC_FULLNESS(newDefaultDefinitionBuilder(StomacFullnessDto.class)), + + TRIP_TYPE(newDefaultDefinitionBuilder(TripTypeDto.class)), + + VESSEL_ACTIVITY_LONGLINE(newDefaultDefinitionBuilder(VesselActivityLonglineDto.class)), + + WEIGHT_MEASURE_TYPE(newDefaultDefinitionBuilder(WeightMeasureTypeDto.class)), + + // -------------------------------------------------------------------------------------------------------------- // + // -- REFERENTIAL SEINE ----------------------------------------------------------------------------------------- // + // -------------------------------------------------------------------------------------------------------------- // + + DETECTION_MODE(newDefaultDefinitionBuilder(DetectionModeDto.class)), + + OBJECT_FATE(newDefaultDefinitionBuilder(ObjectFateDto.class)), + + OBJECT_OPERATION(newDefaultDefinitionBuilder(ObjectOperationDto.class)), + + OBJECT_TYPE(newDefaultDefinitionBuilder(ObjectTypeDto.class)), + + OBSERVED_SYSTEM(newDefaultDefinitionBuilder(ObservedSystemDto.class)), + + REASON_FOR_DISCARD(newDefaultDefinitionBuilder(ReasonForDiscardDto.class)), + + REASON_FOR_NO_FISHING(newDefaultDefinitionBuilder(ReasonForNoFishingDto.class)), + + REASON_FOR_NULL_SET(newDefaultDefinitionBuilder(ReasonForNullSetDto.class)), + + SPECIES_FATE(newDefaultDefinitionBuilder(SpeciesFateDto.class)), + + SPECIES_STATUS(newDefaultDefinitionBuilder(SpeciesStatusDto.class)), + + SURROUNDING_ACTIVITY(newDefaultDefinitionBuilder(SurroundingActivityDto.class)), + + TRANSMITTING_BUOYO_PERATION(newDefaultDefinitionBuilder(TransmittingBuoyOperationDto.class)), + + TRANSMITTING_BUOY_TYPE(newDefaultDefinitionBuilder(TransmittingBuoyTypeDto.class)), + + VESSEL_ACTIVITY_SEINE(newDefaultDefinitionBuilder(VesselActivitySeineDto.class)), + + WEIGHT_CATEGORY(newDefinitionBuilder(WeightCategoryDto.class) + .addProperty(String.class, WeightCategoryDto.PROPERTY_LABEL) + .addProperty(String.class, WeightCategoryDto.PROPERTY_SPECIES)), + + WIND(newDefinitionBuilder(WindDto.class) + .addProperty(String.class, WindDto.PROPERTY_LABEL) + .addProperty(String.class, WindDto.PROPERTY_SPEED_RANGE) + ); + + private final ReferenceSetDefinition definition; + + ReferenceSetDefinitions(ReferenceSetDefinition.Builder definition) { + this.definition = definition.build(); + } + + public ReferenceSetDefinition<?> getDefinition() { + return definition; + } + + protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefinitionBuilder(Class<R> type) { + ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition.builder(type); + return builder; + } + + protected static <R extends ReferentialDto> ReferenceSetDefinition.Builder newDefaultDefinitionBuilder(Class<R> type) { + ReferenceSetDefinition.Builder<R> builder = ReferenceSetDefinition + .builder(type) + .addProperty(String.class, ReferentialDto.PROPERTY_CODE); + if (I18nReferentialDto.class.isAssignableFrom(type)) { + builder.addProperty(String.class, I18nReferentialDto.PROPERTY_LABEL); + } + return builder; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java new file mode 100644 index 0000000..79035bd --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetPropertyDefinition.java @@ -0,0 +1,67 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.MoreObjects; + +import java.io.Serializable; +import java.util.Objects; + +/** + * Pour définir une propriété à remonter dans un ensemble de référence. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetPropertyDefinition<O> implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * Le type de la propriété. + */ + private final Class<O> type; + + /** + * Le nom de la propriété. + */ + private final String name; + + public static <O> ReferenceSetPropertyDefinition<O> of(Class<O> type, String name) { + return new ReferenceSetPropertyDefinition<>(type, name); + } + + public ReferenceSetPropertyDefinition(Class<O> type, String name) { + this.type = type; + this.name = name; + } + + public Class<O> getType() { + return type; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceSetPropertyDefinition)) return false; + ReferenceSetPropertyDefinition<?> that = (ReferenceSetPropertyDefinition<?>) o; + return Objects.equals(type, that.type) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(type, name); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("type", type) + .add("name", name) + .toString(); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java new file mode 100644 index 0000000..4801de4 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequest.java @@ -0,0 +1,31 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableMap; + +import java.util.Date; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequest { + + private final String requestName; + + private final ImmutableMap<String, Date> lastUpdateDates; + + public ReferenceSetRequest(String requestName, ImmutableMap<String, Date> lastUpdateDates) { + this.requestName = requestName; + this.lastUpdateDates = lastUpdateDates; + } + + public String getRequestName() { + return requestName; + } + + public ImmutableMap<String, Date> getLastUpdateDates() { + return lastUpdateDates; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java new file mode 100644 index 0000000..2d49605 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinition.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; + +import java.io.Serializable; + +/** + * Pour définir une demande de récupération d'ensemble de références. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequestDefinition implements Serializable { + + private static final long serialVersionUID = 1L; + + private final ImmutableSet<ReferenceSetRequestKeyDefinition> keys; + + public ReferenceSetRequestDefinition(ImmutableSet<ReferenceSetRequestKeyDefinition> keys) { + this.keys = keys; + } + + public ImmutableSet<ReferenceSetRequestKeyDefinition> getKeys() { + return keys; + } + + public static <D extends IdDto> Builder<D> builder(Class<D> type) { + return new Builder<>(type); + } + + public static class Builder<D extends IdDto> { + + private final Class<D> parentType; + + private final ImmutableSet.Builder<ReferenceSetRequestKeyDefinition> keysBuilder; + + public Builder(Class<D> parentType) { + this.parentType = parentType; + this.keysBuilder = ImmutableSet.builder(); + } + + public Builder<D> addKey(String name, ReferenceSetDefinitions propertyDefinition) { + keysBuilder.add(new ReferenceSetRequestKeyDefinition<>(parentType, propertyDefinition.getDefinition(), name)); + return this; + } + + public ReferenceSetRequestDefinition build() { + return new ReferenceSetRequestDefinition(keysBuilder.build()); + } + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java new file mode 100644 index 0000000..eef1c48 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestDefinitions.java @@ -0,0 +1,39 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; + +/** + * Contient les définitions de tous les requêtes que les services proposent. + * + * Created on 11/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum ReferenceSetRequestDefinitions { + + TRIP_SEINE_FORM(newBuilder(TripSeineDto.class) + .addKey(TripSeineDto.PROPERTY_OBSERVER, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_CAPTAIN, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_DATA_ENTRY_OPERATOR, ReferenceSetDefinitions.PERSON) + .addKey(TripSeineDto.PROPERTY_VESSEL, ReferenceSetDefinitions.VESSEL) + .addKey(TripSeineDto.PROPERTY_OCEAN, ReferenceSetDefinitions.OCEAN) + .addKey(TripSeineDto.PROPERTY_DEPARTURE_HARBOUR, ReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_LANDING_HARBOUR, ReferenceSetDefinitions.HARBOUR) + .addKey(TripSeineDto.PROPERTY_PROGRAM, ReferenceSetDefinitions.PROGRAM)),; + + public final ReferenceSetRequestDefinition definition; + + ReferenceSetRequestDefinitions(ReferenceSetRequestDefinition.Builder definitionBuilder) { + this.definition = definitionBuilder.build(); + } + + public ReferenceSetRequestDefinition getDefinition() { + return definition; + } + + public static <D extends IdDto> ReferenceSetRequestDefinition.Builder<D> newBuilder(Class<D> parentType) { + return new ReferenceSetRequestDefinition.Builder<>(parentType); + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java new file mode 100644 index 0000000..8d72a4f --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferenceSetRequestKeyDefinition.java @@ -0,0 +1,86 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.util.Objects; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferenceSetRequestKeyDefinition<D extends IdDto> { + + private final Class<? extends IdDto> parentType; + + private final ReferenceSetDefinition<D> referenceSetDefinition; + + private final String name; + + private final String[] propertyNames; + + private final Class<?>[] propertyTypes; + + public ReferenceSetRequestKeyDefinition(Class<? extends IdDto> parentType, ReferenceSetDefinition<D> referenceSetDefinition, String name) { + this.parentType = parentType; + this.referenceSetDefinition = referenceSetDefinition; + this.name = name; + this.propertyNames = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, String>() { + + @Override + public String apply(ReferenceSetPropertyDefinition input) { + return input.getName(); + } + }), String.class); + this.propertyTypes = Iterables.toArray(Iterables.transform(referenceSetDefinition.getProperties(), new Function<ReferenceSetPropertyDefinition, Class<?>>() { + + @Override + public Class<?> apply(ReferenceSetPropertyDefinition input) { + return input.getType(); + } + }), Class.class); + } + + public Class<? extends IdDto> getParentType() { + return parentType; + } + + public Class<D> getType() { + return referenceSetDefinition.getType(); + } + + public String[] getPropertyNames() { + return propertyNames; + } + + public Class<?>[] getPropertyTypes() { + return propertyTypes; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceSetRequestKeyDefinition)) return false; + ReferenceSetRequestKeyDefinition that = (ReferenceSetRequestKeyDefinition) o; + return Objects.equals(parentType, that.parentType) && + Objects.equals(referenceSetDefinition.getType(), that.referenceSetDefinition.getType()) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(parentType, referenceSetDefinition.getType(), name); + } + + public boolean isReferential() { + Class<?> type = referenceSetDefinition.getType(); + return type.isAssignableFrom(ReferentialDto.class); + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java new file mode 100644 index 0000000..1de8e9e --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialReferenceSetResult.java @@ -0,0 +1,55 @@ +package fr.ird.observe.services.service; + +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.services.dto.ReferenceSetDto; + +/** + * Created on 10/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialReferenceSetResult { + + private final ReferenceSetRequest request; + + private final ImmutableMap<String, ReferenceSetDto> referenceSetsMap; + + public ReferentialReferenceSetResult(ReferenceSetRequest request, ImmutableMap<String, ReferenceSetDto> referenceSetsMap) { + this.request = request; + this.referenceSetsMap = referenceSetsMap; + } + + public ReferenceSetRequest getRequest() { + return request; + } + + public ImmutableMap<String, ReferenceSetDto> getReferenceSetsMap() { + return referenceSetsMap; + } + + public static Builder builder(final ReferenceSetRequest request) { + return new Builder(request); + } + + public static class Builder { + + private final ReferenceSetRequest request; + + private final ImmutableMap.Builder<String, ReferenceSetDto> referenceSetsMapBuilder; + + public Builder(ReferenceSetRequest request) { + this.request = request; + this.referenceSetsMapBuilder = ImmutableMap.builder(); + } + + public Builder addKey(String name, ReferenceSetDto referenceSet) { + referenceSetsMapBuilder.put(name, referenceSet); + return this; + } + + public ReferentialReferenceSetResult build() { + return new ReferentialReferenceSetResult(request, referenceSetsMapBuilder.build()); + } + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.