This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458-3 in repository observe. See http://git.codelutin.com/observe.git commit a1fea911dced009312b2de56d0c42675cb85eb6e Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Aug 21 09:38:29 2015 +0200 add DTo test and fix DtoToEntityBuilder (refs #7458). --- .../services/builder/DtoToEntityBuilder.java | 31 ++++- .../services/builder/DtoToEntityBuilderTest.java | 147 +++++++++++++-------- 2 files changed, 116 insertions(+), 62 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java index d8868d7..4aaa78d 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/builder/DtoToEntityBuilder.java @@ -72,27 +72,44 @@ public class DtoToEntityBuilder<D extends IdDto, E extends TopiaEntity> implemen if (!collection.isEmpty()) { - ParameterizedType collectionGenericTypeType = (ParameterizedType) collectionGenericType; - ParameterizedType type1 = (ParameterizedType) collectionGenericTypeType.getActualTypeArguments()[0]; - Class type = (Class) type1.getActualTypeArguments()[0]; + Type collectionGenericTypeSource = binder.getSourcePropertyGenericType(propertyName); - if (ReferenceDto.class.isAssignableFrom(type)) { + ParameterizedType collectionGenericTypeType1 = (ParameterizedType) collectionGenericTypeSource; + Type type1 = collectionGenericTypeType1.getActualTypeArguments()[0]; + Class typeSource; + if (type1 instanceof Class) { + typeSource = (Class) type1; + } else { + typeSource = (Class) ((ParameterizedType) type1).getActualTypeArguments()[0]; + } + + ParameterizedType collectionGenericTypeType2 = (ParameterizedType) collectionGenericType; + Type type2 = collectionGenericTypeType2.getActualTypeArguments()[0]; + Class typeTarget; + if (type1 instanceof Class) { + typeTarget = (Class) type2; + } else { + typeTarget = (Class) ((ParameterizedType) type2).getActualTypeArguments()[0]; + } + + + if (ReferenceDto.class.isAssignableFrom(typeSource)) { Collection<ReferenceDto> referenceDtos = (Collection<ReferenceDto>) collection; for (ReferenceDto referenceDto : referenceDtos) { - TopiaEntity propertyEntity = toEntity(type, referenceDto); + TopiaEntity propertyEntity = toEntity(typeTarget, referenceDto); entityCollection.add(propertyEntity); } - } else if (IdDto.class.isAssignableFrom(type)) { + } else if (IdDto.class.isAssignableFrom(typeSource)) { Collection<IdDto> idDtos = (Collection<IdDto>) collection; for (IdDto idDto : idDtos) { - TopiaEntity propertyEntity = toEntity(type, idDto); + TopiaEntity propertyEntity = toEntity(typeTarget, idDto); entityCollection.add(propertyEntity); } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java index 669bb89..f5f8e92 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/builder/DtoToEntityBuilderTest.java @@ -4,16 +4,22 @@ import com.google.common.collect.ImmutableSet; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.referentiel.Organism; import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.seine.GearUseFeaturesMeasurementSeine; +import fr.ird.observe.entities.seine.GearUseFeaturesSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.constants.GearType; import fr.ird.observe.services.dto.constants.ReferenceStatus; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.GearCaracteristicDto; +import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.I18nReferentialDto; import fr.ird.observe.services.dto.referential.OrganismDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDtos; +import fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; +import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -35,25 +41,7 @@ public class DtoToEntityBuilderTest { @Test public void testCopy() { - ObserveServiceTopia service = new ObserveServiceTopia() { - - @Override - protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { - E e = newEntity(entityType); - e.setTopiaId(id); - return e; - } - - @Override - public <E extends TopiaEntity> E newEntity(Class<E> entityType) { - - try { - return (E) ObserveEntityEnum.valueOf(entityType).getImplementation().newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalStateException("could not create instance of " + entityType.getName()); - } - } - }; + ObserveServiceTopia service = new ObserveServiceTopiaMock(); ProgramDto programDto = new ProgramDto(); programDto.setCode("code"); @@ -114,41 +102,90 @@ public class DtoToEntityBuilderTest { } -// @Test -// public void testCopyWithSubDto() { -// -// GearCaracteristic gearCaracteristic = new GearCaracteristicImpl(); -// gearCaracteristic.setTopiaId("gearCaracteristicId"); -// gearCaracteristic.setCode("gearCaracteristicCode"); -// gearCaracteristic.setLabel1("gearCaracteristicLabel1"); -// gearCaracteristic.setLabel2("gearCaracteristicLabel2"); -// gearCaracteristic.setLabel3("gearCaracteristicLabel3"); -// gearCaracteristic.setLabel4("gearCaracteristicLabel4"); -// gearCaracteristic.setLabel5("gearCaracteristicLabel5"); -// gearCaracteristic.setLabel6("gearCaracteristicLabel6"); -// gearCaracteristic.setLabel7("gearCaracteristicLabel7"); -// gearCaracteristic.setLabel8("gearCaracteristicLabel8"); -// gearCaracteristic.setNeedComment(true); -// gearCaracteristic.setUri("gearCaracteristicUrl"); -// gearCaracteristic.setUnit("m"); -// gearCaracteristic.setStatus(fr.ird.observe.entities.constants.ReferenceStatus.enabled); -// -// Gear gear = new GearImpl(); -// gear.setTopiaId("gearId"); -// gear.setCode("gearCode"); -// gear.setLabel1("gearLabel1"); -// gear.setLabel2("gearLabel2"); -// gear.setLabel3("gearLabel3"); -// gear.setLabel4("gearLabel4"); -// gear.setLabel5("gearLabel5"); -// gear.setLabel6("gearLabel6"); -// gear.setLabel7("gearLabel7"); -// gear.setLabel8("gearLabel8"); -// gear.setNeedComment(true); -// gear.setUri("gearUrl"); -// gear.setStatus(fr.ird.observe.entities.constants.ReferenceStatus.enabled); -// gear.addGearCaracteristic(gearCaracteristic); -// -// } + @Test + public void testCopyWithSubDto() { + + ObserveServiceTopia service = new ObserveServiceTopiaMock(); + + ReferentialReferenceDto<GearCaracteristicDto> gearCaracteristicDto = + ReferentialReferenceDtos.newReferentialReferenceDto( + GearCaracteristicDto.class, + ReferentialLocale.FR, + ImmutableSet.of( + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_CODE + ) + ); + + gearCaracteristicDto.setId("gearCaracteristicId"); + gearCaracteristicDto.setPropertyValue(ReferentialLocale.FR, I18nReferentialDto.PROPERTY_LABEL2, "gearCaracteristicLabel2"); + gearCaracteristicDto.setPropertyValue(I18nReferentialDto.PROPERTY_CODE, "gearCaracteristicCode"); + + ReferentialReferenceDto<GearDto> gearDto = + ReferentialReferenceDtos.newReferentialReferenceDto( + GearDto.class, + ReferentialLocale.FR, + ImmutableSet.of( + I18nReferentialDto.PROPERTY_LABEL2, + I18nReferentialDto.PROPERTY_CODE + ) + ); + + gearDto.setId("gearId"); + gearDto.setPropertyValue(ReferentialLocale.FR, I18nReferentialDto.PROPERTY_LABEL2, "gearLabel2"); + gearDto.setPropertyValue(I18nReferentialDto.PROPERTY_CODE, "gearCode"); + + GearUseFeaturesMeasurementSeineDto measurementDto = new GearUseFeaturesMeasurementSeineDto(); + measurementDto.setId("gearUseFeaturesMeasurementSeineId"); + measurementDto.setGearCaracteristic(gearCaracteristicDto); + measurementDto.setMeasurementValue("15.2"); + + GearUseFeaturesSeineDto featuresDto = new GearUseFeaturesSeineDto(); + featuresDto.setId("gearUseFeatureSeineId"); + featuresDto.setNumber(28); + featuresDto.setUsedInTrip(true); + featuresDto.setGear(gearDto); + featuresDto.addGearUseFeaturesMeasurement(measurementDto); + + // transformation du DTO en entités + DtoToEntityBuilder<GearUseFeaturesSeineDto, GearUseFeaturesSeine> builder = DtoToEntityBuilder.create(GearUseFeaturesSeineDto.class, GearUseFeaturesSeine.class, service); + + GearUseFeaturesSeine features = service.newEntity(GearUseFeaturesSeine.class); + builder.build(featuresDto, features); + + // On vérife que l'entité a bien été copié + Assert.assertEquals(featuresDto.getId(), features.getTopiaId()); + Assert.assertEquals(featuresDto.getNumber(), features.getNumber()); + Assert.assertEquals(featuresDto.getUsedInTrip(), features.getUsedInTrip()); + + Assert.assertEquals(featuresDto.sizeGearUseFeaturesMeasurement(), features.sizeGearUseFeaturesMeasurement()); + GearUseFeaturesMeasurementSeine measurement = features.getGearUseFeaturesMeasurement().get(0); + Assert.assertEquals(measurementDto.getId(), measurement.getTopiaId()); + Assert.assertEquals(measurementDto.getMeasurementValue(), measurement.getMeasurementValue()); + Assert.assertNotNull(measurement.getGearCaracteristic()); + Assert.assertEquals(measurementDto.getGearCaracteristic().getId(), measurement.getGearCaracteristic().getTopiaId()); + + } + + class ObserveServiceTopiaMock extends ObserveServiceTopia { + + @Override + protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { + E e = newEntity(entityType); + e.setTopiaId(id); + return e; + } + + @Override + public <E extends TopiaEntity> E newEntity(Class<E> entityType) { + + try { + return (E) ObserveEntityEnum.valueOf(entityType).getImplementation().newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("could not create instance of " + entityType.getName()); + } + } + }; + } \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.