branch feature/7458 updated (1a129f2 -> 92c92c9)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git from 1a129f2 add school estimate service (refs #7458). new 9536321 Suppression d'une entité non voulue (booleanDto) new a8f3901 Mise en place d'une classe pour initialiser tous les dto du modèle new 92c92c9 Utilisation des binders pour effectuer les créations de dto The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 92c92c9ab2a7406f1e4752a2ca4bd198ef78683a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:33:56 2015 +0200 Utilisation des binders pour effectuer les créations de dto commit a8f3901d865d49b26668c1f17eaacefa173da4d4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:33:32 2015 +0200 Mise en place d'une classe pour initialiser tous les dto du modèle commit 9536321da00442bd6fffac738d1cf809bb6bbe68 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:32:28 2015 +0200 Suppression d'une entité non voulue (booleanDto) Summary of changes: .../services/service/ReferentialService.java | 2 +- .../fr/ird/observe/services/dto/ReferenceDto.java | 6 +- .../fr/ird/observe/services/dto/ReferenceDtos.java | 23 +- .../dto/referential/ReferentialReferenceDto.java | 2 +- .../dto/referential/ReferentialReferenceDtos.java | 136 +-- .../main/xmi/observe-services-dto-longline.zargo | Bin 75830 -> 75789 bytes .../services/service/ReferentialServiceRest.java | 4 +- .../ird/observe/services/ObserveServiceTopia.java | 39 + .../observe/services/dto/EntityToDtoBuilder.java | 202 ++++ .../services/dto/EntityToReferenceDtoBuilder.java | 61 ++ .../observe/services/dto/ObserveDtoBinders.java | 38 + .../services/dto/ObserveDtosInitializer.java | 1033 ++++++++++++++++++++ .../services/service/ReferentialDtoBuilder.java | 209 ---- .../services/service/ReferentialServiceTopia.java | 270 +---- .../service/ApplicationContextResource.java | 3 + .../service/ReferentialServiceTopiaTest.java | 18 +- .../EntityToDtoBuilderTest.java} | 21 +- 17 files changed, 1444 insertions(+), 623 deletions(-) create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java delete mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialDtoBuilder.java rename observe-services-topia/src/test/java/fr/ird/observe/services/service/{ReferentialDtoBuilderTest.java => dto/EntityToDtoBuilderTest.java} (88%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit 9536321da00442bd6fffac738d1cf809bb6bbe68 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:32:28 2015 +0200 Suppression d'une entité non voulue (booleanDto) --- .../main/xmi/observe-services-dto-longline.zargo | Bin 75830 -> 75789 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo b/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo index 05c1fec..a7dc856 100644 Binary files a/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo and b/observe-services-model/src/main/xmi/observe-services-dto-longline.zargo differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit a8f3901d865d49b26668c1f17eaacefa173da4d4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:33:32 2015 +0200 Mise en place d'une classe pour initialiser tous les dto du modèle --- .../ird/observe/services/ObserveServiceTopia.java | 39 + .../services/dto/ObserveDtosInitializer.java | 1033 ++++++++++++++++++++ 2 files changed, 1072 insertions(+) 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 2b22014..bf2d0da 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 @@ -1,6 +1,14 @@ package fr.ird.observe.services; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.ObserveDtosInitializer; +import fr.ird.observe.services.dto.ObserveModelInitializerRunner; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Map; /** * Created on 16/08/15. @@ -11,10 +19,41 @@ public class ObserveServiceTopia implements ObserveService { protected ObserveServiceContextTopia serviceContext; + protected static ImmutableBiMap<Class<?>, Class<?>> DTO_TO_ENTITY_TYPES; + + private static boolean init; + + public static synchronized void init() { + if (!init) { + ObserveModelInitializerRunner.init(new ObserveDtosInitializer()); + DTO_TO_ENTITY_TYPES = ObserveDtosInitializer.getDtoToEntityTypes(); + init = true; + } + } + + static { + init(); + } + @Override public void setServiceContext(ObserveServiceContext serviceContext) { Preconditions.checkNotNull(serviceContext, "serviceContext can't be null."); Preconditions.checkArgument(serviceContext instanceof ObserveServiceContextTopia, "serviceContext must be of type " + ObserveServiceContextTopia.class.getName()); this.serviceContext = (ObserveServiceContextTopia) serviceContext; } + + public static <D extends IdDto, E extends TopiaEntity> Class<E> getEntityType(Class<D> dtoType) { + Class<?> entityType = DTO_TO_ENTITY_TYPES.get(dtoType); + return (Class<E>) entityType; + } + + public static <E extends TopiaEntity, M extends IdDto> Class<M> getDtoType(Class<E> entityType) { + Class<?> modelType = DTO_TO_ENTITY_TYPES.inverse().get(entityType); + return (Class<M>) modelType; + } + + public static ImmutableSet<Map.Entry<Class<?>, Class<?>>> getDtoTypes() { + return DTO_TO_ENTITY_TYPES.entrySet(); + } + } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java new file mode 100644 index 0000000..7606aa7 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java @@ -0,0 +1,1033 @@ +package fr.ird.observe.services.dto; + +import com.google.common.collect.ImmutableBiMap; +import fr.ird.observe.entities.referentiel.Country; +import fr.ird.observe.entities.referentiel.FpaZone; +import fr.ird.observe.entities.referentiel.Gear; +import fr.ird.observe.entities.referentiel.GearCaracteristic; +import fr.ird.observe.entities.referentiel.GearCaracteristicType; +import fr.ird.observe.entities.referentiel.Harbour; +import fr.ird.observe.entities.referentiel.I18nReferenceEntity; +import fr.ird.observe.entities.referentiel.LengthWeightParameter; +import fr.ird.observe.entities.referentiel.Ocean; +import fr.ird.observe.entities.referentiel.Organism; +import fr.ird.observe.entities.referentiel.Person; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.referentiel.Sex; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.referentiel.SpeciesGroup; +import fr.ird.observe.entities.referentiel.SpeciesList; +import fr.ird.observe.entities.referentiel.Vessel; +import fr.ird.observe.entities.referentiel.VesselSizeCategory; +import fr.ird.observe.entities.referentiel.VesselType; +import fr.ird.observe.entities.referentiel.longline.BaitHaulingStatus; +import fr.ird.observe.entities.referentiel.longline.BaitSettingStatus; +import fr.ird.observe.entities.referentiel.longline.BaitType; +import fr.ird.observe.entities.referentiel.longline.CatchFateLongline; +import fr.ird.observe.entities.referentiel.longline.EncounterType; +import fr.ird.observe.entities.referentiel.longline.Healthness; +import fr.ird.observe.entities.referentiel.longline.HookPosition; +import fr.ird.observe.entities.referentiel.longline.HookSize; +import fr.ird.observe.entities.referentiel.longline.HookType; +import fr.ird.observe.entities.referentiel.longline.ItemHorizontalPosition; +import fr.ird.observe.entities.referentiel.longline.ItemVerticalPosition; +import fr.ird.observe.entities.referentiel.longline.LightsticksColor; +import fr.ird.observe.entities.referentiel.longline.LightsticksType; +import fr.ird.observe.entities.referentiel.longline.LineType; +import fr.ird.observe.entities.referentiel.longline.MaturityStatus; +import fr.ird.observe.entities.referentiel.longline.MitigationType; +import fr.ird.observe.entities.referentiel.longline.SensorBrand; +import fr.ird.observe.entities.referentiel.longline.SensorDataFormat; +import fr.ird.observe.entities.referentiel.longline.SensorType; +import fr.ird.observe.entities.referentiel.longline.SettingShape; +import fr.ird.observe.entities.referentiel.longline.SizeMeasureType; +import fr.ird.observe.entities.referentiel.longline.StomacFullness; +import fr.ird.observe.entities.referentiel.longline.TripType; +import fr.ird.observe.entities.referentiel.longline.VesselActivityLongline; +import fr.ird.observe.entities.referentiel.longline.WeightMeasureType; +import fr.ird.observe.entities.referentiel.seine.DetectionMode; +import fr.ird.observe.entities.referentiel.seine.ObjectFate; +import fr.ird.observe.entities.referentiel.seine.ObjectOperation; +import fr.ird.observe.entities.referentiel.seine.ObjectType; +import fr.ird.observe.entities.referentiel.seine.ObservedSystem; +import fr.ird.observe.entities.referentiel.seine.ReasonForDiscard; +import fr.ird.observe.entities.referentiel.seine.ReasonForNoFishing; +import fr.ird.observe.entities.referentiel.seine.ReasonForNullSet; +import fr.ird.observe.entities.referentiel.seine.SpeciesFate; +import fr.ird.observe.entities.referentiel.seine.SpeciesStatus; +import fr.ird.observe.entities.referentiel.seine.SurroundingActivity; +import fr.ird.observe.entities.referentiel.seine.TransmittingBuoyOperation; +import fr.ird.observe.entities.referentiel.seine.TransmittingBuoyType; +import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; +import fr.ird.observe.entities.referentiel.seine.WeightCategory; +import fr.ird.observe.entities.referentiel.seine.Wind; +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; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.BinderFactory; +import org.nuiton.util.beans.BinderModelBuilder; + +/** + * Pour initialiser tous les binders. + * + * Created on 18/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveDtosInitializer implements ObserveModelInitializer { + + protected final static String[] DEFAULT_REFERENTIAL_PROPERTIES = { + ReferentialDto.PROPERTY_CODE, + ReferentialDto.PROPERTY_URI, + ReferentialDto.PROPERTY_STATUS, + ReferentialDto.PROPERTY_NEED_COMMENT + }; + + protected final static String[] DEFAULT_REFERENTIAL_LENGTH_WEIGHT_PARAMETER_PROPERTIES = { + LengthWeightParameterDto.PROPERTY_START_DATE, + LengthWeightParameterDto.PROPERTY_END_DATE, + LengthWeightParameterDto.PROPERTY_OCEAN, + LengthWeightParameterDto.PROPERTY_SPECIES, + LengthWeightParameterDto.PROPERTY_SEX, + LengthWeightParameterDto.PROPERTY_LENGTH_WEIGHT_FORMULA, + LengthWeightParameterDto.PROPERTY_WEIGHT_LENGTH_FORMULA, + LengthWeightParameterDto.PROPERTY_COEFFICIENTS, + LengthWeightParameterDto.PROPERTY_MEAN_LENGTH, + LengthWeightParameterDto.PROPERTY_MEAN_WEIGHT + }; + + protected final static String[] DEFAULT_REFERENTIAL_I18N_PROPERTIES = { + I18nReferentialDto.PROPERTY_LABEL1, + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_LABEL3, + I18nReferentialDto.PROPERTY_LABEL4, + I18nReferentialDto.PROPERTY_LABEL5, + I18nReferentialDto.PROPERTY_LABEL6, + I18nReferentialDto.PROPERTY_LABEL7, + I18nReferentialDto.PROPERTY_LABEL8 + }; + + private static final String[] DEFAULT_REFERENTIAL_REFERENCE_PROPERTIES = {ReferentialDto.PROPERTY_CODE, I18nReferentialDto.PROPERTY_LABEL1, I18nReferentialDto.PROPERTY_LABEL2, I18nReferentialDto.PROPERTY_LABEL3}; + +// { +// // Need to add by hand a speciesList binder +// // see https://forge.codelutin.com/issues/6963 +// BinderModelBuilder<SpeciesListDto, SpeciesList> builderModel = newBinderBuilder(SpeciesListDto.class, SpeciesList.class); +// registerDtoBinder(builderModel, "Observe"); + + // } + + protected static ImmutableBiMap.Builder<Class<?>, Class<?>> DTO_TO_ENTITY_TYPE_BUILDER; + + protected static ImmutableBiMap<Class<?>, Class<?>> DTO_TO_ENTITY_TYPES; + + public static ImmutableBiMap<Class<?>, Class<?>> getDtoToEntityTypes() { + return DTO_TO_ENTITY_TYPES; + } + + @Override + public void start() { + DTO_TO_ENTITY_TYPE_BUILDER = new ImmutableBiMap.Builder<>(); + } + + @Override + public void end() { + DTO_TO_ENTITY_TYPES = DTO_TO_ENTITY_TYPE_BUILDER.build(); + } + + @Override + public void initFormDto() { + // Rien à faire + } + + @Override + public void initIdDto() { + // Rien à faire + } + + @Override + public void initReferenceDto() { + // Rien à faire + } + + @Override + public void initReferenceSetDto() { + // Rien à faire + } + + @Override + public void initActivityLonglineDto() { + + } + + @Override + public void initBaitsCompositionDto() { + + } + + @Override + public void initBasketDto() { + + } + + @Override + public void initBranchlineDto() { + + } + + @Override + public void initBranchlinesCompositionDto() { + + } + + @Override + public void initCatchLonglineDto() { + + } + + @Override + public void initEncounterDto() { + + } + + @Override + public void initFloatlinesCompositionDto() { + + } + + @Override + public void initGearUseFeaturesLonglineDto() { + + } + + @Override + public void initGearUseFeaturesMeasurementLonglineDto() { + + } + + @Override + public void initHooksCompositionDto() { + + } + + @Override + public void initSectionDto() { + + } + + @Override + public void initSensorUsedDto() { + + } + + @Override + public void initSetLonglineDto() { + + } + + @Override + public void initSizeMeasureDto() { + + } + + @Override + public void initTdrDto() { + + } + + @Override + public void initTdrRecordDto() { + + } + + @Override + public void initTripLonglineDto() { + + } + + @Override + public void initWeightMeasureDto() { + + } + + @Override + public void initCountryDto() { + registerDtoType(CountryDto.class, Country.class); + registerReferentialDtoBinder(CountryDto.class, Country.class, CountryDto.PROPERTY_ISO2_CODE, CountryDto.PROPERTY_ISO3_CODE); + registerReferentialReferenceDtoBinder(CountryDto.class, Country.class); + } + + + @Override + public void initFpaZoneDto() { + registerDtoType(FpaZoneDto.class, FpaZone.class); + registerReferentialDtoBinder(FpaZoneDto.class, FpaZone.class, FpaZoneDto.PROPERTY_START_DATE, FpaZoneDto.PROPERTY_END_DATE); + registerReferentialReferenceDtoBinder(FpaZoneDto.class, FpaZone.class); + } + + @Override + public void initGearCaracteristicDto() { + registerDtoType(GearCaracteristicDto.class, GearCaracteristic.class); + registerReferentialDtoBinder(GearCaracteristicDto.class, GearCaracteristic.class, GearCaracteristicDto.PROPERTY_GEAR_CARACTERISTIC_TYPE, GearCaracteristicDto.PROPERTY_UNIT); + registerReferentialReferenceDtoBinder(GearCaracteristicDto.class, GearCaracteristic.class); + } + + @Override + public void initGearCaracteristicTypeDto() { + registerDtoType(GearCaracteristicTypeDto.class, GearCaracteristicType.class); + registerReferentialDtoBinder(GearCaracteristicTypeDto.class, GearCaracteristicType.class); + registerReferentialReferenceDtoBinder(GearCaracteristicTypeDto.class, GearCaracteristicType.class); + } + + @Override + public void initGearDto() { + registerDtoType(GearDto.class, Gear.class); + registerReferentialDtoBinder(GearDto.class, Gear.class, GearDto.PROPERTY_GEAR_CARACTERISTIC); + registerReferentialReferenceDtoBinder(GearDto.class, Gear.class); + } + + @Override + public void initHarbourDto() { + registerDtoType(HarbourDto.class, Harbour.class); + registerReferentialDtoBinder(HarbourDto.class, Harbour.class, + HarbourDto.PROPERTY_NAME, + HarbourDto.PROPERTY_COUNTRY, + HarbourDto.PROPERTY_LOCODE, + HarbourDto.PROPERTY_LATITUDE, + HarbourDto.PROPERTY_LONGITUDE, + HarbourDto.PROPERTY_QUADRANT); + registerReferentialReferenceDtoBinder(HarbourDto.class, Harbour.class, + false, + ReferentialDto.PROPERTY_CODE, + HarbourDto.PROPERTY_NAME, + HarbourDto.PROPERTY_LOCODE); + } + + @Override + public void initI18nReferentialDto() { + + } + + @Override + public void initLengthWeightParameterDto() { + registerDtoType(LengthWeightParameterDto.class, LengthWeightParameter.class); + registerReferentialDtoBinder(LengthWeightParameterDto.class, LengthWeightParameter.class, + LengthWeightParameterDto.PROPERTY_SEX, + LengthWeightParameterDto.PROPERTY_OCEAN, + LengthWeightParameterDto.PROPERTY_SPECIES, + LengthWeightParameterDto.PROPERTY_START_DATE); + + // FIXME A revoir car on veut en fait ocean/libelle et species/scientificLabel + registerReferentialReferenceDtoBinder(LengthWeightParameterDto.class, LengthWeightParameter.class, + false, + LengthWeightParameterDto.PROPERTY_SEX, + LengthWeightParameterDto.PROPERTY_OCEAN, + LengthWeightParameterDto.PROPERTY_SPECIES, + LengthWeightParameterDto.PROPERTY_LENGTH_WEIGHT_FORMULA, + LengthWeightParameterDto.PROPERTY_WEIGHT_LENGTH_FORMULA); + } + + @Override + public void initOceanDto() { + registerDtoType(OceanDto.class, Ocean.class); + registerReferentialDtoBinder(OceanDto.class, Ocean.class); + registerReferentialReferenceDtoBinder(OceanDto.class, Ocean.class); + } + + @Override + public void initOrganismDto() { + registerDtoType(OrganismDto.class, Organism.class); + registerReferentialDtoBinder(OrganismDto.class, Organism.class, + OrganismDto.PROPERTY_COUNTRY, OrganismDto.PROPERTY_DESCRIPTION); + registerReferentialReferenceDtoBinder(OrganismDto.class, Organism.class); + } + + @Override + public void initPersonDto() { + registerDtoType(PersonDto.class, Person.class); + registerReferentialDtoBinder(PersonDto.class, Person.class, + PersonDto.PROPERTY_CODE, + PersonDto.PROPERTY_LAST_NAME, + PersonDto.PROPERTY_FIRST_NAME, + PersonDto.PROPERTY_CAPTAIN, + PersonDto.PROPERTY_OBSERVER, + PersonDto.PROPERTY_DATA_ENTRY_OPERATOR, + PersonDto.PROPERTY_COUNTRY); + registerReferentialReferenceDtoBinder(PersonDto.class, Person.class, false, + PersonDto.PROPERTY_FIRST_NAME, PersonDto.PROPERTY_LAST_NAME); + } + + @Override + public void initProgramDto() { + +// { +// +// BinderModelBuilder<ProgramDto, Program> builder = newBinderBuilder( +// ProgramDto.class, +// Program.class, +// ProgramDto.PROPERTY_LABEL1, +// ProgramDto.PROPERTY_LABEL2, +// ProgramDto.PROPERTY_LABEL3, +// ProgramDto.PROPERTY_LABEL4, +// ProgramDto.PROPERTY_LABEL5, +// ProgramDto.PROPERTY_LABEL6, +// ProgramDto.PROPERTY_LABEL7, +// ProgramDto.PROPERTY_LABEL8 +// ); +// +// registerDtoBinder(builder); +// +// } + +// { +// +// BinderModelBuilder<ProgramDto, Program> builder = newBinderBuilder( +// ProgramDto.class, +// Program.class, +// ProgramDto.PROPERTY_LABEL1, +// ProgramDto.PROPERTY_LABEL2, +// ProgramDto.PROPERTY_LABEL3, +// ProgramDto.PROPERTY_LABEL4, +// ProgramDto.PROPERTY_LABEL5, +// ProgramDto.PROPERTY_LABEL6, +// ProgramDto.PROPERTY_LABEL7, +// ProgramDto.PROPERTY_LABEL8); +// +// registerTopiaBinder(Program.class, builder, DISPLAY_LIST); +// +// } + registerDtoType(ProgramDto.class, Program.class); + registerReferentialDtoBinder(ProgramDto.class, Program.class, + ProgramDto.PROPERTY_ORGANISM, + ProgramDto.PROPERTY_START_DATE, + ProgramDto.PROPERTY_END_DATE, + ProgramDto.PROPERTY_DETAILLED_ACTIVITIES_OBSERVATION, + ProgramDto.PROPERTY_NON_TARGET_OBSERVATION, + ProgramDto.PROPERTY_BAIT_OBSERVATION, + ProgramDto.PROPERTY_MAMMALS_OBSERVATION, + ProgramDto.PROPERTY_SAMPLES_OBSERVATION, + ProgramDto.PROPERTY_OBJECTS_OBSERVATION, + ProgramDto.PROPERTY_BIRDS_OBSERVATION, + ProgramDto.PROPERTY_TARGET_DISCARDS_OBSERVATION, + ProgramDto.PROPERTY_GEAR_TYPE); + registerReferentialReferenceDtoBinder(ProgramDto.class, Program.class); + } + + @Override + public void initReferentialDto() { + // Rien à faire + } + + @Override + public void initReferentialReferenceDto() { + // Rien à faire + } + + @Override + public void initSexDto() { + registerDtoType(SexDto.class, Sex.class); + registerReferentialDtoBinder(SexDto.class, Sex.class); + registerReferentialReferenceDtoBinder(SexDto.class, Sex.class); + } + + + @Override + public void initSpeciesDto() { + registerDtoType(SpeciesDto.class, Species.class); + registerReferentialDtoBinder(SpeciesDto.class, Species.class, SpeciesDto.PROPERTY_SPECIES_GROUP, + SpeciesDto.PROPERTY_OCEAN, + SpeciesDto.PROPERTY_LENGTH_MEASURE_TYPE, + SpeciesDto.PROPERTY_MIN_LENGTH, + SpeciesDto.PROPERTY_MAX_LENGTH, + SpeciesDto.PROPERTY_MIN_WEIGHT, + SpeciesDto.PROPERTY_MAX_WEIGHT, + SpeciesDto.PROPERTY_HOME_ID, + SpeciesDto.PROPERTY_FAO_CODE, + SpeciesDto.PROPERTY_WORMS_ID, + SpeciesDto.PROPERTY_SCIENTIFIC_LABEL); + registerReferentialReferenceDtoBinder(SpeciesDto.class, Species.class, + SpeciesDto.PROPERTY_FAO_CODE, + SpeciesDto.PROPERTY_SCIENTIFIC_LABEL, + SpeciesDto.PROPERTY_HOME_ID); + } + + @Override + public void initSpeciesGroupDto() { + registerDtoType(SpeciesGroupDto.class, SpeciesGroup.class); + registerReferentialDtoBinder(SpeciesGroupDto.class, SpeciesGroup.class); + registerReferentialReferenceDtoBinder(SpeciesGroupDto.class, SpeciesGroup.class); + } + + @Override + public void initSpeciesListDto() { + registerDtoType(SpeciesListDto.class, SpeciesList.class); + registerReferentialDtoBinder(SpeciesListDto.class, SpeciesList.class, SpeciesListDto.PROPERTY_SPECIES); + registerReferentialReferenceDtoBinder(SpeciesListDto.class, SpeciesList.class); + } + + @Override + public void initVesselSizeCategoryDto() { + registerDtoType(VesselSizeCategoryDto.class, VesselSizeCategory.class); + registerReferentialDtoBinder(VesselSizeCategoryDto.class, VesselSizeCategory.class, + VesselSizeCategoryDto.PROPERTY_GAUGE_LABEL, + VesselSizeCategoryDto.PROPERTY_CAPACITY_LABEL); + registerReferentialReferenceDtoBinder(VesselSizeCategoryDto.class, VesselSizeCategory.class, + false, + ReferentialDto.PROPERTY_CODE, + VesselSizeCategoryDto.PROPERTY_GAUGE_LABEL, + VesselSizeCategoryDto.PROPERTY_CAPACITY_LABEL); + } + + @Override + public void initVesselDto() { + registerDtoType(VesselDto.class, Vessel.class); + registerReferentialDtoBinder(VesselDto.class, Vessel.class, + VesselDto.PROPERTY_VESSEL_TYPE, + VesselDto.PROPERTY_VESSEL_SIZE_CATEGORY, + VesselDto.PROPERTY_FLAG_COUNTRY, + VesselDto.PROPERTY_KEEL_CODE, + VesselDto.PROPERTY_FLEET_COUNTRY, + VesselDto.PROPERTY_YEAR_SERVICE, + VesselDto.PROPERTY_LENGTH, + VesselDto.PROPERTY_CAPACITY, + VesselDto.PROPERTY_POWER, + VesselDto.PROPERTY_SEARCH_MAXIMUM, + VesselDto.PROPERTY_CHANGE_DATE); + registerReferentialReferenceDtoBinder(VesselDto.class, Vessel.class); + } + + @Override + public void initVesselTypeDto() { + registerDtoType(VesselTypeDto.class, VesselType.class); + registerReferentialDtoBinder(VesselTypeDto.class, VesselType.class); + registerReferentialReferenceDtoBinder(VesselTypeDto.class, VesselType.class); + } + + @Override + public void initDetectionModeDto() { + registerDtoType(DetectionModeDto.class, DetectionMode.class); + registerReferentialDtoBinder(DetectionModeDto.class, DetectionMode.class); + registerReferentialReferenceDtoBinder(DetectionModeDto.class, DetectionMode.class); + } + + @Override + public void initObjectFateDto() { + registerDtoType(ObjectFateDto.class, ObjectFate.class); + registerReferentialDtoBinder(ObjectFateDto.class, ObjectFate.class); + registerReferentialReferenceDtoBinder(ObjectFateDto.class, ObjectFate.class); + } + + @Override + public void initObjectOperationDto() { + registerDtoType(ObjectOperationDto.class, ObjectOperation.class); + registerReferentialDtoBinder(ObjectOperationDto.class, ObjectOperation.class); + registerReferentialReferenceDtoBinder(ObjectOperationDto.class, ObjectOperation.class); + } + + @Override + public void initObjectTypeDto() { + registerDtoType(ObjectTypeDto.class, ObjectType.class); + registerReferentialDtoBinder(ObjectTypeDto.class, ObjectType.class); + registerReferentialReferenceDtoBinder(ObjectTypeDto.class, ObjectType.class); + } + + @Override + public void initObservedSystemDto() { + registerDtoType(ObservedSystemDto.class, ObservedSystem.class); + registerReferentialDtoBinder(ObservedSystemDto.class, ObservedSystem.class, + ObservedSystemDto.PROPERTY_SCHOOL_TYPE); + registerReferentialReferenceDtoBinder(ObservedSystemDto.class, ObservedSystem.class); + } + + @Override + public void initReasonForDiscardDto() { + registerDtoType(ReasonForDiscardDto.class, ReasonForDiscard.class); + registerReferentialDtoBinder(ReasonForDiscardDto.class, ReasonForDiscard.class); + registerReferentialReferenceDtoBinder(ReasonForDiscardDto.class, ReasonForDiscard.class); + } + + @Override + public void initReasonForNoFishingDto() { + registerDtoType(ReasonForNoFishingDto.class, ReasonForNoFishing.class); + registerReferentialDtoBinder(ReasonForNoFishingDto.class, ReasonForNoFishing.class); + registerReferentialReferenceDtoBinder(ReasonForNoFishingDto.class, ReasonForNoFishing.class); + } + + @Override + public void initReasonForNullSetDto() { + registerDtoType(ReasonForNullSetDto.class, ReasonForNullSet.class); + registerReferentialDtoBinder(ReasonForNullSetDto.class, ReasonForNullSet.class); + registerReferentialReferenceDtoBinder(ReasonForNullSetDto.class, ReasonForNullSet.class); + } + + @Override + public void initSpeciesFateDto() { + registerDtoType(SpeciesFateDto.class, SpeciesFate.class); + registerReferentialDtoBinder(SpeciesFateDto.class, SpeciesFate.class); + registerReferentialReferenceDtoBinder(SpeciesFateDto.class, SpeciesFate.class); + } + + @Override + public void initSpeciesStatusDto() { + registerDtoType(SpeciesStatusDto.class, SpeciesStatus.class); + registerReferentialDtoBinder(SpeciesStatusDto.class, SpeciesStatus.class); + registerReferentialReferenceDtoBinder(SpeciesStatusDto.class, SpeciesStatus.class); + } + + @Override + public void initSurroundingActivityDto() { + registerDtoType(SurroundingActivityDto.class, SurroundingActivity.class); + registerReferentialDtoBinder(SurroundingActivityDto.class, SurroundingActivity.class); + registerReferentialReferenceDtoBinder(SurroundingActivityDto.class, SurroundingActivity.class); + } + + @Override + public void initTransmittingBuoyOperationDto() { + registerDtoType(TransmittingBuoyOperationDto.class, TransmittingBuoyOperation.class); + registerReferentialDtoBinder(TransmittingBuoyOperationDto.class, TransmittingBuoyOperation.class); + registerReferentialReferenceDtoBinder(TransmittingBuoyOperationDto.class, TransmittingBuoyOperation.class); + } + + @Override + public void initTransmittingBuoyTypeDto() { + registerDtoType(TransmittingBuoyTypeDto.class, TransmittingBuoyType.class); + registerReferentialDtoBinder(TransmittingBuoyTypeDto.class, TransmittingBuoyType.class); + registerReferentialReferenceDtoBinder(TransmittingBuoyTypeDto.class, TransmittingBuoyType.class); + } + + @Override + public void initVesselActivitySeineDto() { + registerDtoType(VesselActivitySeineDto.class, VesselActivitySeine.class); + registerReferentialDtoBinder(VesselActivitySeineDto.class, VesselActivitySeine.class); + registerReferentialReferenceDtoBinder(VesselActivitySeineDto.class, VesselActivitySeine.class); + } + + @Override + public void initWeightCategoryDto() { + registerDtoType(WeightCategoryDto.class, WeightCategory.class); + registerReferentialDtoBinder(WeightCategoryDto.class, WeightCategory.class, + WeightCategoryDto.PROPERTY_CODE, WeightCategoryDto.PROPERTY_SPECIES); + registerReferentialReferenceDtoBinder(WeightCategoryDto.class, WeightCategory.class); + } + + @Override + public void initWindDto() { + + + registerDtoType(WindDto.class, Wind.class); + registerReferentialDtoBinder(WindDto.class, Wind.class, + WindDto.PROPERTY_SPEED_RANGE, WindDto.PROPERTY_WAVE_HEIGHT); + + registerReferentialReferenceDtoBinder(WindDto.class, Wind.class, + ReferentialDto.PROPERTY_CODE, + I18nReferentialDto.PROPERTY_LABEL1, + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_LABEL3, + WindDto.PROPERTY_SPEED_RANGE); + } + + @Override + public void initActivitySeineDto() { + + } + + @Override + public void initActivitySeineObservedSystemDto() { + + } + + @Override + public void initFloatingObjectDto() { + + } + + @Override + public void initGearUseFeaturesMeasurementSeineDto() { + + } + + @Override + public void initGearUseFeaturesSeineDto() { + + } + + @Override + public void initNonTargetCatchDto() { + + } + + @Override + public void initNonTargetLengthDto() { + + } + + @Override + public void initNonTargetSampleDto() { + + } + + @Override + public void initObjectObservedSpeciesDto() { + + } + + @Override + public void initObjectSchoolEstimateDto() { + + } + + @Override + public void initRouteDto() { + + } + + @Override + public void initSchoolEstimateDto() { + + } + + @Override + public void initSetSeineDto() { + + } + + @Override + public void initTargetCatchDto() { + + } + + @Override + public void initTargetLengthDto() { + + } + + @Override + public void initTargetSampleDto() { + + } + + @Override + public void initTransmittingBuoyDto() { + + } + + @Override + public void initTripSeineDto() { + + } + + @Override + public void initBaitHaulingStatusDto() { + registerDtoType(BaitHaulingStatusDto.class, BaitHaulingStatus.class); + registerReferentialDtoBinder(BaitHaulingStatusDto.class, BaitHaulingStatus.class); + registerReferentialReferenceDtoBinder(BaitHaulingStatusDto.class, BaitHaulingStatus.class); + } + + @Override + public void initBaitSettingStatusDto() { + registerDtoType(BaitSettingStatusDto.class, BaitSettingStatus.class); + registerReferentialDtoBinder(BaitSettingStatusDto.class, BaitSettingStatus.class); + registerReferentialReferenceDtoBinder(BaitSettingStatusDto.class, BaitSettingStatus.class); + } + + @Override + public void initBaitTypeDto() { + registerDtoType(BaitTypeDto.class, BaitType.class); + registerReferentialDtoBinder(BaitTypeDto.class, BaitType.class); + registerReferentialReferenceDtoBinder(BaitTypeDto.class, BaitType.class); + } + + @Override + public void initCatchFateLonglineDto() { + registerDtoType(CatchFateLonglineDto.class, CatchFateLongline.class); + registerReferentialDtoBinder(CatchFateLonglineDto.class, CatchFateLongline.class); + registerReferentialReferenceDtoBinder(CatchFateLonglineDto.class, CatchFateLongline.class); + } + + @Override + public void initEncounterTypeDto() { + registerDtoType(EncounterTypeDto.class, EncounterType.class); + registerReferentialDtoBinder(EncounterTypeDto.class, EncounterType.class); + registerReferentialReferenceDtoBinder(EncounterTypeDto.class, EncounterType.class); + } + + @Override + public void initHealthnessDto() { + registerDtoType(HealthnessDto.class, Healthness.class); + registerReferentialDtoBinder(HealthnessDto.class, Healthness.class); + registerReferentialReferenceDtoBinder(HealthnessDto.class, Healthness.class); + } + + @Override + public void initHookPositionDto() { + registerDtoType(HookPositionDto.class, HookPosition.class); + registerReferentialDtoBinder(HookPositionDto.class, HookPosition.class); + registerReferentialReferenceDtoBinder(HookPositionDto.class, HookPosition.class); + } + + @Override + public void initHookSizeDto() { + registerDtoType(HookSizeDto.class, HookSize.class); + registerReferentialDtoBinder(HookSizeDto.class, HookSize.class); + registerReferentialReferenceDtoBinder(HookSizeDto.class, HookSize.class); + } + + @Override + public void initHookTypeDto() { + registerDtoType(HookTypeDto.class, HookType.class); + registerReferentialDtoBinder(HookTypeDto.class, HookType.class); + registerReferentialReferenceDtoBinder(HookTypeDto.class, HookType.class); + } + + @Override + public void initItemHorizontalPositionDto() { + registerDtoType(ItemHorizontalPositionDto.class, ItemHorizontalPosition.class); + registerReferentialDtoBinder(ItemHorizontalPositionDto.class, ItemHorizontalPosition.class); + registerReferentialReferenceDtoBinder(ItemHorizontalPositionDto.class, ItemHorizontalPosition.class); + } + + @Override + public void initItemVerticalPositionDto() { + registerDtoType(ItemVerticalPositionDto.class, ItemVerticalPosition.class); + registerReferentialDtoBinder(ItemVerticalPositionDto.class, ItemVerticalPosition.class); + registerReferentialReferenceDtoBinder(ItemVerticalPositionDto.class, ItemVerticalPosition.class); + } + + @Override + public void initLightsticksColorDto() { + registerDtoType(LightsticksColorDto.class, LightsticksColor.class); + registerReferentialDtoBinder(LightsticksColorDto.class, LightsticksColor.class); + registerReferentialReferenceDtoBinder(LightsticksColorDto.class, LightsticksColor.class); + } + + @Override + public void initLightsticksTypeDto() { + registerDtoType(LightsticksTypeDto.class, LightsticksType.class); + registerReferentialDtoBinder(LightsticksTypeDto.class, LightsticksType.class); + registerReferentialReferenceDtoBinder(LightsticksTypeDto.class, LightsticksType.class); + } + + @Override + public void initLineTypeDto() { + registerDtoType(LineTypeDto.class, LineType.class); + registerReferentialDtoBinder(LineTypeDto.class, LineType.class); + registerReferentialReferenceDtoBinder(LineTypeDto.class, LineType.class); + } + + @Override + public void initMaturityStatusDto() { + registerDtoType(MaturityStatusDto.class, MaturityStatus.class); + registerReferentialDtoBinder(MaturityStatusDto.class, MaturityStatus.class, + MaturityStatusDto.PROPERTY_LOWER_VALUE, + MaturityStatusDto.PROPERTY_UPPER_VALUE); + registerReferentialReferenceDtoBinder(MaturityStatusDto.class, MaturityStatus.class); + } + + @Override + public void initMitigationTypeDto() { + registerDtoType(MitigationTypeDto.class, MitigationType.class); + registerReferentialDtoBinder(MitigationTypeDto.class, MitigationType.class); + registerReferentialReferenceDtoBinder(MitigationTypeDto.class, MitigationType.class); + } + + @Override + public void initSensorBrandDto() { + registerDtoType(SensorBrandDto.class, SensorBrand.class); + registerReferentialDtoBinder(SensorBrandDto.class, SensorBrand.class, SensorBrandDto.PROPERTY_BRAND_NAME); + registerReferentialReferenceDtoBinder(SensorBrandDto.class, SensorBrand.class, + false, + ReferentialDto.PROPERTY_CODE, SensorBrandDto.PROPERTY_BRAND_NAME); + } + + @Override + public void initSensorDataFormatDto() { + registerDtoType(SensorDataFormatDto.class, SensorDataFormat.class); + registerReferentialDtoBinder(SensorDataFormatDto.class, SensorDataFormat.class); + registerReferentialReferenceDtoBinder(SensorDataFormatDto.class, SensorDataFormat.class); + } + + @Override + public void initSensorTypeDto() { + registerDtoType(SensorTypeDto.class, SensorType.class); + registerReferentialDtoBinder(SensorTypeDto.class, SensorType.class); + registerReferentialReferenceDtoBinder(SensorTypeDto.class, SensorType.class); + } + + @Override + public void initSettingShapeDto() { + registerDtoType(SettingShapeDto.class, SettingShape.class); + registerReferentialDtoBinder(SettingShapeDto.class, SettingShape.class); + registerReferentialReferenceDtoBinder(SettingShapeDto.class, SettingShape.class); + } + + @Override + public void initSizeMeasureTypeDto() { + registerDtoType(SizeMeasureTypeDto.class, SizeMeasureType.class); + registerReferentialDtoBinder(SizeMeasureTypeDto.class, SizeMeasureType.class); + registerReferentialReferenceDtoBinder(SizeMeasureTypeDto.class, SizeMeasureType.class); + } + + @Override + public void initStomacFullnessDto() { + registerDtoType(StomacFullnessDto.class, StomacFullness.class); + registerReferentialDtoBinder(StomacFullnessDto.class, StomacFullness.class); + registerReferentialReferenceDtoBinder(StomacFullnessDto.class, StomacFullness.class); + } + + @Override + public void initTripTypeDto() { + registerDtoType(TripTypeDto.class, TripType.class); + registerReferentialDtoBinder(TripTypeDto.class, TripType.class); + registerReferentialReferenceDtoBinder(TripTypeDto.class, TripType.class); + } + + @Override + public void initVesselActivityLonglineDto() { + registerDtoType(VesselActivityLonglineDto.class, VesselActivityLongline.class); + registerReferentialDtoBinder(VesselActivityLonglineDto.class, VesselActivityLongline.class); + registerReferentialReferenceDtoBinder(VesselActivityLonglineDto.class, VesselActivityLongline.class); + } + + @Override + public void initWeightMeasureTypeDto() { + registerDtoType(WeightMeasureTypeDto.class, WeightMeasureType.class); + registerReferentialDtoBinder(WeightMeasureTypeDto.class, WeightMeasureType.class); + registerReferentialReferenceDtoBinder(WeightMeasureTypeDto.class, WeightMeasureType.class); + } + + protected <R extends IdDto, E extends TopiaEntity> void registerDtoType(Class<R> dtoType, Class<E> entityType) { + DTO_TO_ENTITY_TYPE_BUILDER.put(dtoType, entityType); + } + + protected <R extends ReferentialDto, E extends TopiaEntity> void registerReferentialDtoBinder(Class<R> dtoType, Class<E> entityType, String... extraProperties) { + + BinderModelBuilder<R, E> dtoToEntityBuilder = newBinderBuilder(dtoType, entityType) + .canTypeMismatch(true) + .addSimpleProperties(DEFAULT_REFERENTIAL_PROPERTIES); + + if (I18nReferenceEntity.class.isAssignableFrom(entityType)) { + dtoToEntityBuilder.addSimpleProperties(DEFAULT_REFERENTIAL_I18N_PROPERTIES); + } + if (LengthWeightParameter.class.isAssignableFrom(entityType)) { + dtoToEntityBuilder.addSimpleProperties(DEFAULT_REFERENTIAL_LENGTH_WEIGHT_PARAMETER_PROPERTIES); + } + + if (extraProperties.length > 0) { + dtoToEntityBuilder.addSimpleProperties(extraProperties); + } + + registerDtoBinder(dtoToEntityBuilder); + + } + + protected static <R extends ReferentialDto, E extends TopiaEntity> void registerReferentialReferenceDtoBinder(Class<R> dtoType, Class<E> entityType, String... extraProperties) { + + registerReferentialReferenceDtoBinder(dtoType, entityType, true, extraProperties); + + } + + protected static <R extends ReferentialDto, E extends TopiaEntity> void registerReferentialReferenceDtoBinder(Class<R> dtoType, Class<E> entityType, boolean useDefault, String... extraProperties) { + + BinderModelBuilder<R, E> dtoToReferenceBuilder = + newBinderBuilder(dtoType, entityType) + .canTypeMismatch(true); + + if (useDefault) { + dtoToReferenceBuilder.addSimpleProperties(DEFAULT_REFERENTIAL_REFERENCE_PROPERTIES); + } + + if (extraProperties.length > 0) { + dtoToReferenceBuilder.addSimpleProperties(extraProperties); + } + + registerReferenceBinder(dtoToReferenceBuilder); + + } + + protected static <R extends IdDto, E extends TopiaEntity> void registerDtoBinder(BinderModelBuilder<R, E> dtoToEntityBuilder) { + + dtoToEntityBuilder.addProperty(IdDto.PROPERTY_ID, TopiaEntity.TOPIA_ID); + + BinderModelBuilder<E, R> entityToDtoToBuilder = dtoToEntityBuilder.buildInverseModelBuilder(); + BinderFactory.registerBinderModel(dtoToEntityBuilder, ObserveDtoBinders.DTO_TO_ENTITY); + BinderFactory.registerBinderModel(entityToDtoToBuilder, ObserveDtoBinders.ENTITY_TO_DTO); + + } + + protected static <R extends ReferentialDto, E extends TopiaEntity> void registerReferenceBinder(BinderModelBuilder<R, E> dtoToReferenceBuilder) { + + dtoToReferenceBuilder.addProperty(IdDto.PROPERTY_ID, TopiaEntity.TOPIA_ID); + + BinderModelBuilder<E, R> entityToReferenceBuilder = dtoToReferenceBuilder.buildInverseModelBuilder(); + + BinderFactory.registerBinderModel(dtoToReferenceBuilder, ObserveDtoBinders.DTO_TO_REFERENCE); + BinderFactory.registerBinderModel(entityToReferenceBuilder, ObserveDtoBinders.ENTITY_TO_REFERENCE); + + } + + protected static <Source, Target> BinderModelBuilder<Source, Target> newBinderBuilder(Class<Source> source, Class<Target> target, String... properties) { + BinderModelBuilder<Source, Target> builder = BinderModelBuilder.newEmptyBuilder(source, target); + builder.addSimpleProperties(properties); + return builder; + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit 92c92c9ab2a7406f1e4752a2ca4bd198ef78683a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 19 10:33:56 2015 +0200 Utilisation des binders pour effectuer les créations de dto --- .../services/service/ReferentialService.java | 2 +- .../fr/ird/observe/services/dto/ReferenceDto.java | 6 +- .../fr/ird/observe/services/dto/ReferenceDtos.java | 23 +- .../dto/referential/ReferentialReferenceDto.java | 2 +- .../dto/referential/ReferentialReferenceDtos.java | 136 +---------- .../services/service/ReferentialServiceRest.java | 4 +- .../observe/services/dto/EntityToDtoBuilder.java | 202 +++++++++++++++ .../services/dto/EntityToReferenceDtoBuilder.java | 61 +++++ .../observe/services/dto/ObserveDtoBinders.java | 38 +++ .../services/service/ReferentialDtoBuilder.java | 209 ---------------- .../services/service/ReferentialServiceTopia.java | 270 +++------------------ .../service/ApplicationContextResource.java | 3 + .../service/ReferentialServiceTopiaTest.java | 18 +- .../EntityToDtoBuilderTest.java} | 21 +- 14 files changed, 372 insertions(+), 623 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java index 5d26659..6aaf414 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -15,7 +15,7 @@ import java.util.Collection; */ public interface ReferentialService extends ObserveService { - <R extends ReferentialDto> ReferenceSetDto getReferentialReferenceSet(Class<R> type); + <R extends ReferentialDto> ReferenceSetDto<R> getReferentialReferenceSet(Class<R> type); <R extends ReferentialDto> FormDto<R> loadToRead(Class<R> type, String id) throws DataNotFoundException; diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java index d4bac9c..b043935 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDto.java @@ -15,10 +15,10 @@ public class ReferenceDto<D extends IdDto> extends AbstractReferenceDto { protected Serializable[] labelPropertyValues; - protected void init(Class<D> type, ImmutableList<String> labelPropertyNames) { + protected void init(Class<D> type, Iterable<String> labelPropertyNames) { this.type = type; - this.labelPropertyNames = labelPropertyNames; - this.labelPropertyValues = new Serializable[labelPropertyNames.size()]; + this.labelPropertyNames = ImmutableList.copyOf(labelPropertyNames); + this.labelPropertyValues = new Serializable[this.labelPropertyNames.size()]; } public Serializable getPropertyValue(String propertyName) { diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDtos.java index 1012a40..99c8d91 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/ReferenceDtos.java @@ -1,28 +1,11 @@ package fr.ird.observe.services.dto; -import com.google.common.collect.ImmutableList; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.io.Serializable; -import java.util.Map; - public class ReferenceDtos extends AbstractReferenceDtos { - public static <R extends IdDto> ReferenceDto<R> newReferenceDto(Class<R> type, Object source) { - + public static <R extends IdDto> ReferenceDto<R> newReferenceDto(Class<R> type, Iterable<String> propertyNames) { ReferenceDto<R> dto = new ReferenceDto<>(); - - dto.init(type, ImmutableList.of("TODO")); - Binder binder = BinderFactory.newBinder(source.getClass()); - - String[] propertyNames = null; - Map<String, Object> properties = binder.obtainProperties(source, propertyNames); - for (Map.Entry<String, Object> entry : properties.entrySet()) { - String propertyName = entry.getKey(); - Object propertyValue = entry.getValue(); - dto.setPropertyValue(propertyName, (Serializable) propertyValue); - } + dto.init(type, propertyNames); return dto; } + } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java index 60b43be..8d9bbe9 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDto.java @@ -43,7 +43,7 @@ public class ReferentialReferenceDto<D extends ReferentialDto> extends AbstractR } } - protected void init(Class<D> type, ReferentialLocale referentialLocale, String... labelPropertyNames) { + protected void init(Class<D> type, ReferentialLocale referentialLocale, Iterable<String> labelPropertyNames) { this.type = type; String libelle = referentialLocale.getLibelle(); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDtos.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDtos.java index 9702e7d..5e4dfb8 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDtos.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialReferenceDtos.java @@ -1,149 +1,17 @@ package fr.ird.observe.services.dto.referential; -import com.google.common.collect.ImmutableMap; import fr.ird.observe.services.dto.constants.ReferentialLocale; -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; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; -import java.io.Serializable; -import java.util.Map; +import java.util.Set; public class ReferentialReferenceDtos extends AbstractReferentialReferenceDtos { - /** - * Les noms des propriétés à utiliser dans le label par type de référentiel. - */ - protected static final ImmutableMap<Class<?>, String[]> LABEL_PROPERTY_NAMES_MAPPING; - - static { - - String[] DEFAULT_PROPERTY_NAMES = {ReferentialDto.PROPERTY_CODE, I18nReferentialDto.PROPERTY_LABEL1, I18nReferentialDto.PROPERTY_LABEL2, I18nReferentialDto.PROPERTY_LABEL3}; - - LABEL_PROPERTY_NAMES_MAPPING = ImmutableMap.<Class<?>, String[]>builder() - - .put(CountryDto.class, DEFAULT_PROPERTY_NAMES) - .put(FpaZoneDto.class, DEFAULT_PROPERTY_NAMES) - .put(GearCaracteristicDto.class, DEFAULT_PROPERTY_NAMES) - .put(GearCaracteristicTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(GearDto.class, DEFAULT_PROPERTY_NAMES) - .put(HarbourDto.class, new String[]{ReferentialDto.PROPERTY_CODE, HarbourDto.PROPERTY_NAME, HarbourDto.PROPERTY_LOCODE}) - // FIXME A revoir car on veut en fait ocean/libelle et species/scientificLabel - .put(LengthWeightParameterDto.class, new String[]{LengthWeightParameterDto.PROPERTY_SEX, LengthWeightParameterDto.PROPERTY_OCEAN, LengthWeightParameterDto.PROPERTY_SPECIES, LengthWeightParameterDto.PROPERTY_LENGTH_WEIGHT_FORMULA, LengthWeightParameterDto.PROPERTY_WEIGHT_LENGTH_FORMULA}) - .put(OceanDto.class, DEFAULT_PROPERTY_NAMES) - .put(OrganismDto.class, DEFAULT_PROPERTY_NAMES) - .put(PersonDto.class, new String[]{PersonDto.PROPERTY_FIRST_NAME, PersonDto.PROPERTY_LAST_NAME}) - .put(ProgramDto.class, new String[]{I18nReferentialDto.PROPERTY_LABEL1, I18nReferentialDto.PROPERTY_LABEL2, I18nReferentialDto.PROPERTY_LABEL3}) - .put(SexDto.class, DEFAULT_PROPERTY_NAMES) - .put(SpeciesDto.class, new String[]{SpeciesDto.PROPERTY_FAO_CODE, SpeciesDto.PROPERTY_SCIENTIFIC_LABEL, SpeciesDto.PROPERTY_HOME_ID}) - .put(SpeciesGroupDto.class, DEFAULT_PROPERTY_NAMES) - .put(SpeciesListDto.class, DEFAULT_PROPERTY_NAMES) - .put(VesselDto.class, DEFAULT_PROPERTY_NAMES) - .put(VesselSizeCategoryDto.class, new String[]{ReferentialDto.PROPERTY_CODE, VesselSizeCategoryDto.PROPERTY_GAUGE_LABEL, VesselSizeCategoryDto.PROPERTY_CAPACITY_LABEL}) - .put(VesselTypeDto.class, DEFAULT_PROPERTY_NAMES) - - .put(DetectionModeDto.class, DEFAULT_PROPERTY_NAMES) - .put(ObjectFateDto.class, DEFAULT_PROPERTY_NAMES) - .put(ObjectOperationDto.class, DEFAULT_PROPERTY_NAMES) - .put(ObjectTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(ObservedSystemDto.class, DEFAULT_PROPERTY_NAMES) - .put(ReasonForDiscardDto.class, DEFAULT_PROPERTY_NAMES) - .put(ReasonForNoFishingDto.class, DEFAULT_PROPERTY_NAMES) - .put(ReasonForNullSetDto.class, DEFAULT_PROPERTY_NAMES) - .put(SpeciesFateDto.class, DEFAULT_PROPERTY_NAMES) - .put(SpeciesStatusDto.class, DEFAULT_PROPERTY_NAMES) - .put(SurroundingActivityDto.class, DEFAULT_PROPERTY_NAMES) - .put(TransmittingBuoyOperationDto.class, DEFAULT_PROPERTY_NAMES) - .put(TransmittingBuoyTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(VesselActivitySeineDto.class, DEFAULT_PROPERTY_NAMES) - .put(WeightCategoryDto.class, DEFAULT_PROPERTY_NAMES) - .put(WindDto.class, new String[]{ReferentialDto.PROPERTY_CODE, I18nReferentialDto.PROPERTY_LABEL1, I18nReferentialDto.PROPERTY_LABEL2, I18nReferentialDto.PROPERTY_LABEL3, WindDto.PROPERTY_SPEED_RANGE}) - - .put(BaitHaulingStatusDto.class, DEFAULT_PROPERTY_NAMES) - .put(BaitSettingStatusDto.class, DEFAULT_PROPERTY_NAMES) - .put(BaitTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(CatchFateLonglineDto.class, DEFAULT_PROPERTY_NAMES) - .put(EncounterTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(HealthnessDto.class, DEFAULT_PROPERTY_NAMES) - .put(HookPositionDto.class, DEFAULT_PROPERTY_NAMES) - .put(HookSizeDto.class, DEFAULT_PROPERTY_NAMES) - .put(HookTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(ItemHorizontalPositionDto.class, DEFAULT_PROPERTY_NAMES) - .put(ItemVerticalPositionDto.class, DEFAULT_PROPERTY_NAMES) - .put(LightsticksColorDto.class, DEFAULT_PROPERTY_NAMES) - .put(LightsticksTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(LineTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(MaturityStatusDto.class, DEFAULT_PROPERTY_NAMES) - .put(MitigationTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(SensorBrandDto.class, new String[]{ReferentialDto.PROPERTY_CODE, SensorBrandDto.PROPERTY_BRAND_NAME}) - .put(SensorDataFormatDto.class, DEFAULT_PROPERTY_NAMES) - .put(SensorTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(SettingShapeDto.class, DEFAULT_PROPERTY_NAMES) - .put(SizeMeasureTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(StomacFullnessDto.class, DEFAULT_PROPERTY_NAMES) - .put(TripTypeDto.class, DEFAULT_PROPERTY_NAMES) - .put(VesselActivityLonglineDto.class, DEFAULT_PROPERTY_NAMES) - .put(WeightMeasureTypeDto.class, DEFAULT_PROPERTY_NAMES) - - .build(); - - } - public static <R extends ReferentialDto> ReferentialReferenceDto<R> newReferentialReferenceDto(Class<R> type, ReferentialLocale referentialLocale, - Object source) { - String[] propertyNames = LABEL_PROPERTY_NAMES_MAPPING.get(type); + Set<String> propertyNames) { ReferentialReferenceDto<R> dto = new ReferentialReferenceDto<>(); dto.init(type, referentialLocale, propertyNames); - - Binder binder = BinderFactory.newBinder(source.getClass()); - Map<String, Object> properties = binder.obtainProperties(source, propertyNames); - for (Map.Entry<String, Object> entry : properties.entrySet()) { - String propertyName = entry.getKey(); - Object propertyValue = entry.getValue(); - dto.setPropertyValue(referentialLocale, propertyName, (Serializable) propertyValue); - } return dto; } diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/service/ReferentialServiceRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/service/ReferentialServiceRest.java index 679c212..fa73b4a 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/service/ReferentialServiceRest.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/service/ReferentialServiceRest.java @@ -16,9 +16,9 @@ import java.util.Collection; public class ReferentialServiceRest extends ObserveServiceRest implements ReferentialService { @Override - public <R extends ReferentialDto> ReferenceSetDto getReferentialReferenceSet(Class<R> type) { + public <R extends ReferentialDto> ReferenceSetDto<R> getReferentialReferenceSet(Class<R> type) { - return new ReferenceSetDto(type); + return new ReferenceSetDto<>(type); } @Override diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java new file mode 100644 index 0000000..7f7d2d2 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToDtoBuilder.java @@ -0,0 +1,202 @@ +package fr.ird.observe.services.dto; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.entities.Set; +import fr.ird.observe.entities.constants.GearType; +import fr.ird.observe.entities.constants.ReferenceStatus; +import fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource; +import fr.ird.observe.entities.constants.seine.Ownership; +import fr.ird.observe.entities.constants.seine.SchoolType; +import fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; + +import java.io.Closeable; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.Map; + +/** + * Created on 18/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EntityToDtoBuilder<E extends TopiaEntity, D extends IdDto> implements Closeable { + + private final D result; + + private final Binder<E, D> binder; + + private ImmutableSet<Class<? extends IdDto>> referencesTypes; + + public EntityToDtoBuilder(D result, Binder<E, D> binder) { + this.result = result; + this.binder = binder; + } + + public static <E extends TopiaEntity, D extends ReferentialDto> EntityToDtoBuilder<E, D> create(Class<E> entityType, Class<D> dtoType) { + + Preconditions.checkNotNull(entityType, "entityType can't be null."); + Preconditions.checkNotNull(dtoType, "dtoType can't be null."); + D result; + try { + result = dtoType.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Could not instanciate dto of type: " + dtoType.getName()); + } + + Binder<E, D> binder = ObserveDtoBinders.newEntityToDtoBinder(entityType, dtoType); + EntityToDtoBuilder<E, D> builder = new EntityToDtoBuilder<>(result, binder); + return builder; + } + + public D build(ReferentialLocale referentialLocale, E entity) { + + ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder = new ImmutableSet.Builder<>(); + + Map<String, Object> entityProperties = binder.obtainProperties(entity, false); + + ImmutableMap.Builder<String, Object> dtoPropertiesBuilder = new ImmutableMap.Builder<>(); + + for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + + Collection<Object> propertyValueCollection = null; + if (propertyValue instanceof Set) { + + propertyValueCollection = new LinkedHashSet<>(); + } + if (propertyValue instanceof Collection) { + propertyValueCollection = new LinkedList<>(); + } + + if (propertyValueCollection != null) { + + Collection collection = (Collection) propertyValue; + if (collection.isEmpty()) { + continue; + } + Object valueToAdd = collection; + + Object o1 = Iterables.get(collection, 0); + + if (o1 instanceof TopiaEntity) { + + Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf((TopiaEntity)o1).getContract(); + + Class dtoType = ObserveServiceTopia.getDtoType(entityType); + + Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) collection; + LinkedHashSet<ReferenceDto> references = new LinkedHashSet<>(topiaEntities.size()); + for (TopiaEntity entityValue : topiaEntities) { + + references.add(entityToRef(referentialLocale, dtoType, entityValue, referenceTypesBuilder)); + } + valueToAdd = references; + + } + + addProperty(propertyName, valueToAdd, dtoPropertiesBuilder); + + continue; + } + + if (propertyValue instanceof TopiaEntity) { + + TopiaEntity entityValue = (TopiaEntity) propertyValue; + + Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf(entityValue).getContract(); + Class dtoType = ObserveServiceTopia.getDtoType(entityType); + propertyValue = entityToRef(referentialLocale, dtoType, entityValue, referenceTypesBuilder); + + } + + addProperty(propertyName, propertyValue, dtoPropertiesBuilder); + + } + + ImmutableMap<String, Object> properties = dtoPropertiesBuilder.build(); + binder.injectProperties(properties, result); + + referencesTypes = referenceTypesBuilder.build(); + + return result; + + } + + private void addProperty(String propertyName, Object propertyValue, ImmutableMap.Builder<String, Object> dtoPropertiesBuilder) { + + if (TopiaEntity.TOPIA_ID.equals(propertyName)) { + propertyName = ReferentialDto.PROPERTY_ID; + } else if (propertyValue instanceof GearType) { + + GearType entityGearType = (GearType) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.GearType.valueOf(entityGearType.name()); + + } else if (propertyValue instanceof ReferenceStatus) { + + ReferenceStatus referenceStatus = (ReferenceStatus) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.ReferenceStatus.valueOf(referenceStatus.name()); + + } else if (propertyValue instanceof Ownership) { + + Ownership ownership = (Ownership) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.seine.Ownership.valueOf(ownership.name()); + + } else if (propertyValue instanceof SchoolType) { + + SchoolType schoolType = (SchoolType) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.seine.SchoolType.valueOf(schoolType.name()); + + } else if (propertyValue instanceof TypeTransmittingBuoyOperation) { + + TypeTransmittingBuoyOperation typeTransmittingBuoyOperation = (TypeTransmittingBuoyOperation) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.valueOf(typeTransmittingBuoyOperation.name()); + + } else if (propertyValue instanceof NonTargetCatchComputedValueSource) { + + NonTargetCatchComputedValueSource nonTargetCatchComputedValueSource = (NonTargetCatchComputedValueSource) propertyValue; + propertyValue = fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.valueOf(nonTargetCatchComputedValueSource.name()); + + } + + dtoPropertiesBuilder.put(propertyName, propertyValue); + + } + + protected <R extends IdDto> ReferenceDto<R> entityToRef(ReferentialLocale referentialLocale, Class<R> dtoType, TopiaEntity entityValue, ImmutableSet.Builder<Class<? extends IdDto>> referenceTypesBuilder) { + + referenceTypesBuilder.add(dtoType); + + ReferenceDto<R> label; + if (ReferentialDto.class.isAssignableFrom(dtoType)) { + + label = EntityToReferenceDtoBuilder.buildReferential((Class) dtoType, referentialLocale, entityValue); + + } else { + label = EntityToReferenceDtoBuilder.build(dtoType, entityValue); + } + + label.setId(entityValue.getTopiaId()); + return label; + + } + + @Override + public void close() { + + } + + public ImmutableSet<Class<? extends IdDto>> getReferenceTypes() { + return referencesTypes; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java new file mode 100644 index 0000000..0c8d288 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/EntityToReferenceDtoBuilder.java @@ -0,0 +1,61 @@ +package fr.ird.observe.services.dto; + +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; + +import java.io.Serializable; +import java.util.Map; +import java.util.Set; + +/** + * Created on 19/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EntityToReferenceDtoBuilder<E extends TopiaEntity, D extends IdDto> { + + public static <E extends TopiaEntity, D extends IdDto> ReferenceDto<D> build(Class<D> dtoType, E entity) { + + Class<E> entityType = (Class<E>) ObserveEntityEnum.valueOf(entity).getContract(); + Binder<E, E> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType); + + Map<String, Object> entityProperties = binder.obtainProperties(entity); + Set<String> propertyNames = entityProperties.keySet(); + + ReferenceDto<D> result = ReferenceDtos.newReferenceDto(dtoType, propertyNames); + + for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + result.setPropertyValue(propertyName, (Serializable) propertyValue); + } + return result; + + } + + public static <E extends TopiaEntity, D extends ReferentialDto> ReferentialReferenceDto<D> buildReferential(Class<D> dtoType, ReferentialLocale referentialLocale, E entity) { + + Class<E> entityType = (Class<E>) ObserveEntityEnum.valueOf(entity).getContract(); + Binder<E, E> binder = ObserveDtoBinders.newEntityToReferenceBinder(entityType); + + Map<String, Object> entityProperties = binder.obtainProperties(entity); + Set<String> propertyNames = entityProperties.keySet(); + + ReferentialReferenceDto<D> result = ReferentialReferenceDtos.newReferentialReferenceDto(dtoType, referentialLocale, propertyNames); + + for (Map.Entry<String, Object> entry : entityProperties.entrySet()) { + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + result.setPropertyValue(referentialLocale, propertyName, (Serializable) propertyValue); + } + + return result; + + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java new file mode 100644 index 0000000..fc11b56 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtoBinders.java @@ -0,0 +1,38 @@ +package fr.ird.observe.services.dto; + +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +/** + * Created on 18/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveDtoBinders { + + public static final String DTO_TO_ENTITY = "dtoToEntity"; + + public static final String DTO_TO_REFERENCE = "dtoToReference"; + + public static final String ENTITY_TO_REFERENCE = "entityToReference"; + + public static final String ENTITY_TO_DTO = "entityToDto"; + + public static <R extends IdDto, E extends TopiaEntity> Binder<R, E> newDtoToEntityBinder(Class<R> dtoType, Class<E> entityType) { + return BinderFactory.newBinder(dtoType, entityType, DTO_TO_ENTITY); + } + + public static <E extends TopiaEntity, R extends IdDto> Binder<E, R> newEntityToDtoBinder(Class<E> entityType, Class<R> dtoType) { + return BinderFactory.newBinder(entityType, dtoType, ENTITY_TO_DTO); + } + + public static <R extends IdDto> Binder<R, R> newDtoToReferenceBinder(Class<R> dtoType) { + return BinderFactory.newBinder(dtoType, DTO_TO_ENTITY); + } + + public static <E extends TopiaEntity> Binder<E, E> newEntityToReferenceBinder(Class<E> entityType) { + return BinderFactory.newBinder(entityType, DTO_TO_ENTITY); + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialDtoBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialDtoBuilder.java deleted file mode 100644 index 1f24107..0000000 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialDtoBuilder.java +++ /dev/null @@ -1,209 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.entities.constants.GearType; -import fr.ird.observe.entities.constants.ReferenceStatus; -import fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSource; -import fr.ird.observe.entities.constants.seine.Ownership; -import fr.ird.observe.entities.constants.seine.SchoolType; -import fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperation; -import fr.ird.observe.services.dto.constants.ReferentialLocale; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; -import org.nuiton.topia.persistence.EntityVisitor; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.io.Closeable; -import java.util.Collection; -import java.util.LinkedHashSet; - -/** - * Created on 16/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ReferentialDtoBuilder<M extends ReferentialDto> implements Closeable { - - private M result; - - private final ReferentialLocale referentialLocale; - - private ImmutableMap.Builder<String, Object> valuesBuilder; - - private Binder<M, M> binder; - - private final EntityVisitor visitor; - - private ImmutableSet.Builder<Class<? extends ReferentialDto>> referentialDtoTypesBuilder; - - public static <M extends ReferentialDto> ReferentialDtoBuilder<M> create(Class<M> dtoType, ReferentialLocale referentialLocale) { - - Preconditions.checkNotNull(dtoType, "dtoType can't be null."); - M result; - try { - result = dtoType.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalStateException("Could not instanciate dto of type: " + dtoType.getName()); - } - ReferentialDtoBuilder<M> visitor = new ReferentialDtoBuilder<>(result, referentialLocale); - return visitor; - } - - public ReferentialDtoBuilder<M> copyEntity(TopiaEntity entity) { - entity.accept(visitor); - return this; - } - - public M build() { - - ImmutableMap<String, Object> properties = valuesBuilder.build(); - binder.injectProperties(properties, result); - return result; - - } - - public ImmutableSet<Class<? extends ReferentialDto>> getReferentialDtoTypes() { - return referentialDtoTypesBuilder.build(); - } - - protected ReferentialDtoBuilder(M result, ReferentialLocale referentialLocale) { - this.result = result; - this.referentialLocale = referentialLocale; - this.binder = (Binder<M, M>) BinderFactory.newBinder(result.getClass()); - this.valuesBuilder = new ImmutableMap.Builder<>(); - this.visitor = new ToModelVisitor(); - this.referentialDtoTypesBuilder = new ImmutableSet.Builder<>(); - } - - protected void putPropertyValue(String propertyName, Object propertyValue) { - - if (TopiaEntity.TOPIA_ID.equals(propertyName)) { - propertyName = ReferentialDto.PROPERTY_ID; - } else if (propertyValue instanceof GearType) { - - GearType entityGearType = (GearType) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.GearType.valueOf(entityGearType.name()); - - } else if (propertyValue instanceof ReferenceStatus) { - - ReferenceStatus referenceStatus = (ReferenceStatus) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.ReferenceStatus.valueOf(referenceStatus.name()); - - } else if (propertyValue instanceof Ownership) { - - Ownership ownership = (Ownership) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.seine.Ownership.valueOf(ownership.name()); - - } else if (propertyValue instanceof SchoolType) { - - SchoolType schoolType = (SchoolType) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.seine.SchoolType.valueOf(schoolType.name()); - - } else if (propertyValue instanceof TypeTransmittingBuoyOperation) { - - TypeTransmittingBuoyOperation typeTransmittingBuoyOperation = (TypeTransmittingBuoyOperation) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.seine.TypeTransmittingBuoyOperation.valueOf(typeTransmittingBuoyOperation.name()); - - } else if (propertyValue instanceof NonTargetCatchComputedValueSource) { - - NonTargetCatchComputedValueSource nonTargetCatchComputedValueSource = (NonTargetCatchComputedValueSource) propertyValue; - propertyValue = fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource.valueOf(nonTargetCatchComputedValueSource.name()); - - } - - valuesBuilder.put(propertyName, propertyValue); - - } - - protected <R extends ReferentialDto> ReferentialReferenceDto<R> entityToRef(Class<R> dtoType, TopiaEntity entityValue) { - - referentialDtoTypesBuilder.add(dtoType); - ReferentialReferenceDto<R> label = ReferentialReferenceDtos.newReferentialReferenceDto(dtoType, referentialLocale, entityValue); - label.setId(entityValue.getTopiaId()); - return label; - - } - - @Override - public void close() { - valuesBuilder = null; - result = null; - binder = null; - visitor.clear(); - } - - protected class ToModelVisitor implements EntityVisitor { - - @Override - public void start(TopiaEntity entity) { - visit(entity, TopiaEntity.TOPIA_ID, String.class, entity.getTopiaId()); - //visit(entity, TopiaEntity.TOPIA_VERSION, long.class, entity.getTopiaVersion()); - //visit(entity, TopiaEntity.TOPIA_CREATE_DATE, Date.class, entity.getTopiaCreateDate()); - } - - @Override - public void end(TopiaEntity entity) { - } - - @Override - public void visit(TopiaEntity entity, String propertyName, Class<?> type, Object value) { - - if (value != null) { - - Object valueToAdd = value; - if (value instanceof TopiaEntity) { - - TopiaEntity entityValue = (TopiaEntity) value; - - Class dtoType = ReferentialServiceTopia.entityToModelTypeCache.get(type); - valueToAdd = entityToRef(dtoType, entityValue); - - } - - putPropertyValue(propertyName, valueToAdd); - - } - - } - - @Override - public void visit(TopiaEntity entity, String propertyName, Class<?> collectionType, Class<?> type, Object value) { - - if (value != null) { - - Object valueToAdd = value; - if (TopiaEntity.class.isAssignableFrom(type)) { - - Class dtoType = ReferentialServiceTopia.entityToModelTypeCache.get(type); - - Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) value; - LinkedHashSet<ReferentialReferenceDto> models = new LinkedHashSet<>(topiaEntities.size()); - for (TopiaEntity entityValue : topiaEntities) { - - models.add(entityToRef(dtoType, entityValue)); - } - valueToAdd = models; - - } - - putPropertyValue(propertyName, valueToAdd); - - } - - } - - @Override - public void visit(TopiaEntity entity, String propertyName, Class<?> collectionType, Class<?> type, int index, Object value) { - } - - @Override - public void clear() { - - } - } -} 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 6983bdd..393cd4a 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,134 +1,17 @@ package fr.ird.observe.services.service; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import fr.ird.observe.ObserveDAOHelper; -import fr.ird.observe.entities.referentiel.Country; -import fr.ird.observe.entities.referentiel.FpaZone; -import fr.ird.observe.entities.referentiel.Gear; -import fr.ird.observe.entities.referentiel.GearCaracteristic; -import fr.ird.observe.entities.referentiel.GearCaracteristicType; -import fr.ird.observe.entities.referentiel.Harbour; -import fr.ird.observe.entities.referentiel.LengthWeightParameter; -import fr.ird.observe.entities.referentiel.Ocean; -import fr.ird.observe.entities.referentiel.Organism; -import fr.ird.observe.entities.referentiel.Person; -import fr.ird.observe.entities.referentiel.Program; -import fr.ird.observe.entities.referentiel.Sex; -import fr.ird.observe.entities.referentiel.Species; -import fr.ird.observe.entities.referentiel.SpeciesGroup; -import fr.ird.observe.entities.referentiel.SpeciesList; -import fr.ird.observe.entities.referentiel.Vessel; -import fr.ird.observe.entities.referentiel.VesselSizeCategory; -import fr.ird.observe.entities.referentiel.VesselType; -import fr.ird.observe.entities.referentiel.longline.BaitHaulingStatus; -import fr.ird.observe.entities.referentiel.longline.BaitSettingStatus; -import fr.ird.observe.entities.referentiel.longline.BaitType; -import fr.ird.observe.entities.referentiel.longline.CatchFateLongline; -import fr.ird.observe.entities.referentiel.longline.EncounterType; -import fr.ird.observe.entities.referentiel.longline.Healthness; -import fr.ird.observe.entities.referentiel.longline.HookPosition; -import fr.ird.observe.entities.referentiel.longline.HookSize; -import fr.ird.observe.entities.referentiel.longline.HookType; -import fr.ird.observe.entities.referentiel.longline.ItemHorizontalPosition; -import fr.ird.observe.entities.referentiel.longline.ItemVerticalPosition; -import fr.ird.observe.entities.referentiel.longline.LightsticksColor; -import fr.ird.observe.entities.referentiel.longline.LightsticksType; -import fr.ird.observe.entities.referentiel.longline.LineType; -import fr.ird.observe.entities.referentiel.longline.MaturityStatus; -import fr.ird.observe.entities.referentiel.longline.MitigationType; -import fr.ird.observe.entities.referentiel.longline.SensorBrand; -import fr.ird.observe.entities.referentiel.longline.SensorDataFormat; -import fr.ird.observe.entities.referentiel.longline.SensorType; -import fr.ird.observe.entities.referentiel.longline.SettingShape; -import fr.ird.observe.entities.referentiel.longline.SizeMeasureType; -import fr.ird.observe.entities.referentiel.longline.StomacFullness; -import fr.ird.observe.entities.referentiel.longline.TripType; -import fr.ird.observe.entities.referentiel.longline.VesselActivityLongline; -import fr.ird.observe.entities.referentiel.longline.WeightMeasureType; -import fr.ird.observe.entities.referentiel.seine.DetectionMode; -import fr.ird.observe.entities.referentiel.seine.ObjectFate; -import fr.ird.observe.entities.referentiel.seine.ObjectOperation; -import fr.ird.observe.entities.referentiel.seine.ObjectType; -import fr.ird.observe.entities.referentiel.seine.ObservedSystem; -import fr.ird.observe.entities.referentiel.seine.ReasonForDiscard; -import fr.ird.observe.entities.referentiel.seine.ReasonForNoFishing; -import fr.ird.observe.entities.referentiel.seine.ReasonForNullSet; -import fr.ird.observe.entities.referentiel.seine.SpeciesFate; -import fr.ird.observe.entities.referentiel.seine.SpeciesStatus; -import fr.ird.observe.entities.referentiel.seine.SurroundingActivity; -import fr.ird.observe.entities.referentiel.seine.TransmittingBuoyOperation; -import fr.ird.observe.entities.referentiel.seine.TransmittingBuoyType; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; -import fr.ird.observe.entities.referentiel.seine.WeightCategory; -import fr.ird.observe.entities.referentiel.seine.Wind; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.EntityToDtoBuilder; +import fr.ird.observe.services.dto.EntityToReferenceDtoBuilder; import fr.ird.observe.services.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.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.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.ReferentialReferenceDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; -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; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; @@ -137,7 +20,6 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; /** * Created on 16/08/15. @@ -146,130 +28,44 @@ import java.util.Map; */ public class ReferentialServiceTopia extends ObserveServiceTopia implements ReferentialService { - protected static final ImmutableMap<Class<?>, Class<?>> entityToModelTypeCache = new ImmutableMap.Builder<Class<?>, Class<?>>() - - .put(Country.class, CountryDto.class) - .put(FpaZone.class, FpaZoneDto.class) - .put(GearCaracteristic.class, GearCaracteristicDto.class) - .put(GearCaracteristicType.class, GearCaracteristicTypeDto.class) - .put(Gear.class, GearDto.class) - .put(Harbour.class, HarbourDto.class) - .put(LengthWeightParameter.class, LengthWeightParameterDto.class) - .put(Ocean.class, OceanDto.class) - .put(Organism.class, OrganismDto.class) - .put(Person.class, PersonDto.class) - .put(Program.class, ProgramDto.class) - .put(Sex.class, SexDto.class) - .put(Species.class, SpeciesDto.class) - .put(SpeciesGroup.class, SpeciesGroupDto.class) - .put(SpeciesList.class, SpeciesListDto.class) - .put(Vessel.class, VesselDto.class) - .put(VesselSizeCategory.class, VesselSizeCategoryDto.class) - .put(VesselType.class, VesselTypeDto.class) - - .put(DetectionMode.class, DetectionModeDto.class) - .put(ObjectFate.class, ObjectFateDto.class) - .put(ObjectOperation.class, ObjectOperationDto.class) - .put(ObjectType.class, ObjectTypeDto.class) - .put(ObservedSystem.class, ObservedSystemDto.class) - .put(ReasonForDiscard.class, ReasonForDiscardDto.class) - .put(ReasonForNoFishing.class, ReasonForNoFishingDto.class) - .put(ReasonForNullSet.class, ReasonForNullSetDto.class) - .put(SpeciesFate.class, SpeciesFateDto.class) - .put(SpeciesStatus.class, SpeciesStatusDto.class) - .put(SurroundingActivity.class, SurroundingActivityDto.class) - .put(TransmittingBuoyOperation.class, TransmittingBuoyOperationDto.class) - .put(TransmittingBuoyType.class, TransmittingBuoyTypeDto.class) - .put(VesselActivitySeine.class, VesselActivitySeineDto.class) - .put(WeightCategory.class, WeightCategoryDto.class) - .put(Wind.class, WindDto.class) - - .put(BaitHaulingStatus.class, BaitHaulingStatusDto.class) - .put(BaitSettingStatus.class, BaitSettingStatusDto.class) - .put(BaitType.class, BaitTypeDto.class) - .put(CatchFateLongline.class, CatchFateLonglineDto.class) - .put(EncounterType.class, EncounterTypeDto.class) - .put(Healthness.class, HealthnessDto.class) - .put(HookPosition.class, HookPositionDto.class) - .put(HookSize.class, HookSizeDto.class) - .put(HookType.class, HookTypeDto.class) - .put(ItemHorizontalPosition.class, ItemHorizontalPositionDto.class) - .put(ItemVerticalPosition.class, ItemVerticalPositionDto.class) - .put(LightsticksColor.class, LightsticksColorDto.class) - .put(LightsticksType.class, LightsticksTypeDto.class) - .put(LineType.class, LineTypeDto.class) - .put(MaturityStatus.class, MaturityStatusDto.class) - .put(MitigationType.class, MitigationTypeDto.class) - .put(SensorBrand.class, SensorBrandDto.class) - .put(SensorDataFormat.class, SensorDataFormatDto.class) - .put(SensorType.class, SensorTypeDto.class) - .put(SettingShape.class, SettingShapeDto.class) - .put(SizeMeasureType.class, SizeMeasureTypeDto.class) - .put(StomacFullness.class, StomacFullnessDto.class) - .put(TripType.class, TripTypeDto.class) - .put(VesselActivityLongline.class, VesselActivityLonglineDto.class) - .put(WeightMeasureType.class, WeightMeasureTypeDto.class) - - .build(); - - protected static final ImmutableMap<Class<?>, Class<?>> modelToEntityTypeCache; - - static { - - // FIXME Voir si y'a pas une api guava pour ça - ImmutableMap.Builder<Class<?>, Class<?>> builder = new ImmutableMap.Builder<>(); - for (Map.Entry<Class<?>, Class<?>> entry : entityToModelTypeCache.entrySet()) { - builder.put(entry.getValue(), entry.getKey()); - } - modelToEntityTypeCache = builder.build(); - - } - @Override - public <D extends ReferentialDto> ReferenceSetDto getReferentialReferenceSet(Class<D> dtoType) { + 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 = ReferentialReferenceDtos.newReferentialReferenceDto(dtoType, serviceContext.getReferentialLocale(), entity); + + ReferentialReferenceDto<D> dto = EntityToReferenceDtoBuilder.buildReferential(dtoType, serviceContext.getReferentialLocale(), entity); labels.add(dto); - } - ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, labels); - return labelSetDto; - } - public <D extends ReferentialDto> ReferenceSetDto getReferentialLabelSet(Class<D> dtoType, String id) { - Class<TopiaEntity> entityType = getEntityType(dtoType); - TopiaEntity entity = loadEntity(dtoType, entityType, id); - LinkedHashSet<ReferentialReferenceDto<D>> labels = new LinkedHashSet<>(1); - ReferentialReferenceDto<D> dto = ReferentialReferenceDtos.newReferentialReferenceDto(dtoType, serviceContext.getReferentialLocale(), entity); - labels.add(dto); + } ReferenceSetDto labelSetDto = ReferenceSetDtos.newReferenceSetDto(dtoType, labels); return labelSetDto; } @Override public <D extends ReferentialDto> FormDto<D> loadToRead(Class<D> dtoType, String id) { - Class<? extends TopiaEntity> entityType = getEntityType(dtoType); + Class<TopiaEntity> entityType = getEntityType(dtoType); TopiaEntity entity = loadEntity(dtoType, entityType, id); - FormDto<D> form = entityToReadReferentialFormDto(dtoType, entity); + FormDto<D> form = entityToReadReferentialFormDto(dtoType, entityType, entity); return form; } + @Override public <D extends ReferentialDto> FormDto<D> loadToEdit(Class<D> dtoType, String id) { - Class<? extends TopiaEntity> entityType = getEntityType(dtoType); + Class<TopiaEntity> entityType = getEntityType(dtoType); TopiaEntity entity = loadEntity(dtoType, entityType, id); - FormDto<D> form = entityToEditReferentialFormDto(dtoType, entity); + FormDto<D> form = entityToEditReferentialFormDto(dtoType, entityType, entity); return form; } @Override public <D extends ReferentialDto> FormDto<D> preCreate(Class<D> dtoType) { - Class<? extends TopiaEntity> entityType = getEntityType(dtoType); + 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, entity); + FormDto<D> form = entityToEditReferentialFormDto(dtoType, entityType, entity); return form; } @@ -278,7 +74,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, entity); + FormDto<D> model = entityToEditReferentialFormDto(dtoType, entityType, entity); return model.getForm().getId(); } @@ -337,19 +133,18 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } } - protected <D extends ReferentialDto> FormDto<D> entityToEditReferentialFormDto(Class<D> dtoType, TopiaEntity entity) { - try (ReferentialDtoBuilder<D> dtoBuilder = ReferentialDtoBuilder.create(dtoType, serviceContext.getReferentialLocale())) { + 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 - dtoBuilder.copyEntity(entity); - D dto = dtoBuilder.build(); + D dto = dtoBuilder.build(serviceContext.getReferentialLocale(), entity); // build label sets detected while copy - ImmutableSet<Class<? extends ReferentialDto>> referentialDtoTypes = dtoBuilder.getReferentialDtoTypes(); + ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends ReferentialDto> referenceDtoType : referentialDtoTypes) { - ReferenceSetDto referentialLabelSet = getReferentialReferenceSet(referenceDtoType); - labels.add(referentialLabelSet); + 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; @@ -357,17 +152,16 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } } - protected <D extends ReferentialDto> FormDto<D> entityToReadReferentialFormDto(Class<D> dtoType, TopiaEntity entity) { - try (ReferentialDtoBuilder<D> dtoBuilder = ReferentialDtoBuilder.create(dtoType, serviceContext.getReferentialLocale())) { + 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 - dtoBuilder.copyEntity(entity); - D dto = dtoBuilder.build(); + 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 ReferentialDto>> referentialDtoTypes = dtoBuilder.getReferentialDtoTypes(); + ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = dtoBuilder.getReferenceTypes(); ImmutableSet.Builder<ReferenceSetDto> labels = new ImmutableSet.Builder<>(); - for (Class<? extends ReferentialDto> referentialDtoType : referentialDtoTypes) { + for (Class<? extends IdDto> referentialDtoType : referentialDtoTypes) { ReferenceSetDto referentialLabelSet = ReferenceSetDtos.newEmptyReferenceSetDto(referentialDtoType); labels.add(referentialLabelSet); @@ -386,14 +180,4 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe return null; } - protected <D extends ReferentialDto, E extends TopiaEntity> Class<E> getEntityType(Class<D> dtoType) { - Class<?> entityType = modelToEntityTypeCache.get(dtoType); - return (Class<E>) entityType; - } - - protected <E extends TopiaEntity, M extends ReferentialDto> Class<M> getDtoType(Class<E> entityType) { - Class<?> modelType = entityToModelTypeCache.get(entityType); - return (Class<M>) modelType; - } - } 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 8b4cbcb..4ebd5e1 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 @@ -3,6 +3,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.IObserveConfig; import fr.ird.observe.ObserveApplicationContext; import fr.ird.observe.ObserveServiceHelper; +import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.test.TestHelper; import fr.ird.observe.util.Scripts; import org.apache.commons.logging.Log; @@ -62,6 +63,8 @@ public class ApplicationContextResource implements TestRule { TestHelper.createApplicationContext(); TestHelper.setConfig(IObserveConfig.DB_VERSION, databaseVersion.toString()); + ObserveServiceTopia.init(); + } protected void after(Description description) { diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java index 0424d0e..d0909ec 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java @@ -12,6 +12,7 @@ import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.LengthWeightParameterDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.ReferenceSetDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -62,8 +63,11 @@ public class ReferentialServiceTopiaTest { TopiaContext tx = dataSourceResource.newTransaction("testGetReferentialLabelSet"); - for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.modelToEntityTypeCache.entrySet()) { + for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { Class dtoType = entry.getKey(); + if (!ReferentialDto.class.isAssignableFrom(dtoType)) { + continue; + } Class entityType = entry.getValue(); TopiaDAO dao = dataSourceResource.getDataSource().getDAO(tx, entityType); @@ -86,9 +90,12 @@ public class ReferentialServiceTopiaTest { TopiaContext tx = dataSourceResource.newTransaction("testLoadToRead"); - for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.modelToEntityTypeCache.entrySet()) { + for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { Class dtoType = entry.getKey(); + if (!ReferentialDto.class.isAssignableFrom(dtoType)) { + continue; + } Class entityType = entry.getValue(); loadToRead(tx, dtoType, entityType); @@ -101,10 +108,13 @@ public class ReferentialServiceTopiaTest { TopiaContext tx = dataSourceResource.newTransaction("testLoadToEdit"); - for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.modelToEntityTypeCache.entrySet()) { + for (Map.Entry<Class<?>, Class<?>> entry : ReferentialServiceTopia.getDtoTypes()) { Class dtoType = entry.getKey(); Class entityType = entry.getValue(); + if (!ReferentialDto.class.isAssignableFrom(dtoType)) { + continue; + } loadToEdit(tx, dtoType, entityType); } @@ -175,7 +185,7 @@ public class ReferentialServiceTopiaTest { for (ReferenceSetDto labelSetDto : formDto.getLabels()) { - Class refEntityType = ReferentialServiceTopia.modelToEntityTypeCache.get(labelSetDto.getType()); + Class refEntityType = ReferentialServiceTopia.getEntityType(labelSetDto.getType()); long refExpected = dataSourceResource.getDataSource().getDAO(tx, refEntityType).count(); Assert.assertEquals(refExpected, labelSetDto.sizeReference()); diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialDtoBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java similarity index 88% rename from observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialDtoBuilderTest.java rename to observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java index 94667cd..c587a10 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialDtoBuilderTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/dto/EntityToDtoBuilderTest.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.service; +package fr.ird.observe.services.service.dto; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.constants.GearType; @@ -7,6 +7,9 @@ import fr.ird.observe.entities.referentiel.Organism; import fr.ird.observe.entities.referentiel.OrganismImpl; import fr.ird.observe.entities.referentiel.Program; import fr.ird.observe.entities.referentiel.ProgramImpl; +import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.dto.EntityToDtoBuilder; +import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceValueNotFoundException; import fr.ird.observe.services.dto.constants.ReferentialLocale; @@ -16,6 +19,7 @@ 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 org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; import org.nuiton.util.DateUtil; @@ -24,7 +28,12 @@ import org.nuiton.util.DateUtil; * * @author Tony Chemit - chemit@codelutin.com */ -public class ReferentialDtoBuilderTest { +public class EntityToDtoBuilderTest { + + @BeforeClass + public static void setUp() throws Exception { + ObserveServiceTopia.init(); + } @Test public void testCopy() { @@ -59,10 +68,10 @@ public class ReferentialDtoBuilderTest { organism.setCode("organismCode"); program.setOrganism(organism); - ReferentialDtoBuilder<ProgramDto> builder = ReferentialDtoBuilder.create(ProgramDto.class, ReferentialLocale.FR); - builder.copyEntity(program); - ProgramDto programDto = builder.build(); - ImmutableSet<Class<? extends ReferentialDto>> referentialDtoTypes = builder.getReferentialDtoTypes(); + EntityToDtoBuilder<Program, ProgramDto> builder = EntityToDtoBuilder.create(Program.class, ProgramDto.class); + ProgramDto programDto = builder.build(ReferentialLocale.FR, program); + + ImmutableSet<Class<? extends IdDto>> referentialDtoTypes = builder.getReferenceTypes(); // On verifie les types de listes de labels détectées Assert.assertNotNull(referentialDtoTypes); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm