branch feature/7457 updated (d590089 -> 306d814)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7457 in repository observe. See http://git.codelutin.com/observe.git from d590089 Debut d'implantation du service de référentiel (topia) new 306d814 Revue du builder de modele The 1 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 306d8146b4ed76362af16aac022585b3e9083677 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Aug 17 09:48:22 2015 +0200 Revue du builder de modele Summary of changes: .../services/service/EntityToModelVisitor.java | 112 -------------- .../services/service/ReferentialModelBuilder.java | 171 +++++++++++++++++++++ .../services/service/ReferentialServiceTopia.java | 10 +- .../service/ReferentialModelBuilderTest.java | 72 +++++++++ 4 files changed, 246 insertions(+), 119 deletions(-) delete mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/EntityToModelVisitor.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialModelBuilder.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialModelBuilderTest.java -- 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/7457 in repository observe. See http://git.codelutin.com/observe.git commit 306d8146b4ed76362af16aac022585b3e9083677 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Aug 17 09:48:22 2015 +0200 Revue du builder de modele --- .../services/service/EntityToModelVisitor.java | 112 -------------- .../services/service/ReferentialModelBuilder.java | 171 +++++++++++++++++++++ .../services/service/ReferentialServiceTopia.java | 10 +- .../service/ReferentialModelBuilderTest.java | 72 +++++++++ 4 files changed, 246 insertions(+), 119 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/EntityToModelVisitor.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/EntityToModelVisitor.java deleted file mode 100644 index abd84f8..0000000 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/EntityToModelVisitor.java +++ /dev/null @@ -1,112 +0,0 @@ -package fr.ird.observe.services.service; - -import com.google.common.collect.ImmutableMap; -import fr.ird.observe.services.model.referential.ReferentialLabelModel; -import fr.ird.observe.services.model.referential.ReferentialLabelModels; -import fr.ird.observe.services.model.referential.ReferentialModel; -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 EntityToModelVisitor<M extends ReferentialModel> implements EntityVisitor, Closeable { - - private M result; - - private ImmutableMap.Builder<String, Object> valuesBuilder; - - private Binder<M, M> binder; - - public EntityToModelVisitor(M result) { - this.result = result; - this.binder = (Binder<M, M>) BinderFactory.newBinder(result.getClass()); - this.valuesBuilder = new ImmutableMap.Builder<>(); - } - - @Override - public void start(TopiaEntity entity) { - } - - @Override - public void end(TopiaEntity entity) { - ImmutableMap<String, Object> properties = valuesBuilder.build(); - binder.injectProperties(properties, result); - - } - - @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; - valueToAdd = entityToRef(entityValue); - - } - - valuesBuilder.put(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)) { - - Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) value; - LinkedHashSet<ReferentialLabelModel> models = new LinkedHashSet<>(topiaEntities.size()); - for (TopiaEntity entityValue : topiaEntities) { - - models.add(entityToRef(entityValue)); - } - valueToAdd = models; - - } - - valuesBuilder.put(propertyName, valueToAdd); - - } - - } - - @Override - public void visit(TopiaEntity entity, String propertyName, Class<?> collectionType, Class<?> type, int index, Object value) { - } - - @Override - public void clear() { - valuesBuilder = null; - result = null; - binder = null; - } - - protected ReferentialLabelModel entityToRef(TopiaEntity entityValue) { - - ReferentialLabelModel label = ReferentialLabelModels.newReferentialLabelModel(); - label.setId(entityValue.getTopiaId()); - return label; - - } - - @Override - public void close() { - clear(); - } -} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialModelBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialModelBuilder.java new file mode 100644 index 0000000..9152e71 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialModelBuilder.java @@ -0,0 +1,171 @@ +package fr.ird.observe.services.service; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.entities.constants.GearType; +import fr.ird.observe.entities.constants.ReferenceStatus; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.services.model.referential.ReferentialLabelModel; +import fr.ird.observe.services.model.referential.ReferentialLabelModels; +import fr.ird.observe.services.model.referential.ReferentialModel; +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 ReferentialModelBuilder<M extends ReferentialModel> implements Closeable { + + private M result; + + private ImmutableMap.Builder<String, Object> valuesBuilder; + + private Binder<M, M> binder; + + private final EntityVisitor visitor; + + public static <M extends ReferentialModel> ReferentialModelBuilder<M> create(Class<M> modelType) { + + Preconditions.checkNotNull(modelType, "modelType can't be null."); + M result; + try { + result = modelType.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Could not instanciate model of type: " + modelType.getName()); + } + ReferentialModelBuilder<M> visitor = new ReferentialModelBuilder<>(result); + return visitor; + } + + public ReferentialModelBuilder<M> copyEntity(TopiaEntity entity) { + entity.accept(visitor); + return this; + } + + public M build() { + + ImmutableMap<String, Object> properties = valuesBuilder.build(); + binder.injectProperties(properties, result); + return result; + + } + + protected ReferentialModelBuilder(M result) { + this.result = result; + this.binder = (Binder<M, M>) BinderFactory.newBinder(result.getClass()); + this.valuesBuilder = new ImmutableMap.Builder<>(); + this.visitor = new ToModelVisitor(); + } + + + protected void putPropertyValue(String propertyName, Object propertyValue) { + + if (TopiaEntity.TOPIA_ID.equals(propertyName)) { + propertyName = ReferentialModel.PROPERTY_ID; + } else if (Program.PROPERTY_GEAR_TYPE.equals(propertyName)) { + + GearType entityGearType = (GearType) propertyValue; + propertyValue = fr.ird.observe.services.model.constants.GearType.valueOf(entityGearType.name()); + + } else if (Program.PROPERTY_STATUS.equals(propertyName)) { + + ReferenceStatus entityGearType = (ReferenceStatus) propertyValue; + propertyValue = fr.ird.observe.services.model.constants.ReferenceStatus.valueOf(entityGearType.name()); + + } + + //TODO Ajouter les autres exceptions de transformations + valuesBuilder.put(propertyName, propertyValue); + + } + + protected ReferentialLabelModel entityToRef(TopiaEntity entityValue) { + + ReferentialLabelModel label = ReferentialLabelModels.newReferentialLabelModel(); + label.setId(entityValue.getTopiaId()); + return label; + + } + + @Override + public void close() { + valuesBuilder = null; + result = null; + binder = null; + visitor.clear(); + } + + 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; + valueToAdd = entityToRef(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)) { + + Collection<? extends TopiaEntity> topiaEntities = (Collection<? extends TopiaEntity>) value; + LinkedHashSet<ReferentialLabelModel> models = new LinkedHashSet<>(topiaEntities.size()); + for (TopiaEntity entityValue : topiaEntities) { + + models.add(entityToRef(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 ab4d12c..9d60512 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 @@ -189,14 +189,10 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe protected <M extends ReferentialModel> M toModel(Class<M> modelType, TopiaEntity entity) { - try { - M model = modelType.newInstance(); - try (EntityToModelVisitor<M> visitor = new EntityToModelVisitor<>(model)) { - entity.accept(visitor); - } + try (ReferentialModelBuilder<M> modelBuilder = ReferentialModelBuilder.create(modelType)) { + modelBuilder.copyEntity(entity); + M model = modelBuilder.build(); return model; - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalStateException("Could not create model of type: " + modelType.getName()); } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialModelBuilderTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialModelBuilderTest.java new file mode 100644 index 0000000..1f87ee2 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialModelBuilderTest.java @@ -0,0 +1,72 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.entities.constants.GearType; +import fr.ird.observe.entities.constants.ReferenceStatus; +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.model.referential.ProgramModel; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.util.DateUtil; + +/** + * Created on 17/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialModelBuilderTest { + + @Test + public void testCopy() { + + Program program = new ProgramImpl(); + program.setCode("code"); + program.setNeedComment(true); + program.setStatus(ReferenceStatus.enabled); + program.setLabel1("label1"); + program.setLabel2("label2"); + program.setLabel3("label3"); + program.setLabel4("label4"); + program.setLabel5("label5"); + program.setLabel6("label6"); + program.setLabel7("label7"); + program.setLabel8("label8"); + program.setTopiaId("Program1"); + program.setStartDate(DateUtil.createDate(1, 1, 1)); + program.setEndDate(DateUtil.createDate(1, 1, 2)); + program.setGearType(GearType.seine); + program.setTargetDiscardsObservation(1); + Organism organism = new OrganismImpl(); + organism.setTopiaId("Oraganism1"); + program.setOrganism(organism); + + ReferentialModelBuilder<ProgramModel> builder = ReferentialModelBuilder.create(ProgramModel.class); + builder.copyEntity(program); + ProgramModel programModel = builder.build(); + + Assert.assertEquals(program.getCode(), programModel.getCode()); + Assert.assertEquals(program.isNeedComment(), programModel.isNeedComment()); + Assert.assertNotNull(programModel.getStatus()); + Assert.assertEquals(program.getStatus().name(), programModel.getStatus().name()); + + Assert.assertEquals(program.getLabel1(), programModel.getLabel1()); + Assert.assertEquals(program.getLabel2(), programModel.getLabel2()); + Assert.assertEquals(program.getLabel3(), programModel.getLabel3()); + Assert.assertEquals(program.getLabel4(), programModel.getLabel4()); + Assert.assertEquals(program.getLabel5(), programModel.getLabel5()); + Assert.assertEquals(program.getLabel6(), programModel.getLabel6()); + Assert.assertEquals(program.getLabel7(), programModel.getLabel7()); + Assert.assertEquals(program.getLabel8(), programModel.getLabel8()); + Assert.assertEquals(program.getTopiaId(), programModel.getId()); + Assert.assertNotNull(programModel.getGearType()); + Assert.assertEquals(program.getGearType().name(), programModel.getGearType().name()); + Assert.assertEquals(program.getTargetDiscardsObservation(), programModel.getTargetDiscardsObservation()); + Assert.assertNotNull(programModel.getOrganism()); + Assert.assertEquals(program.getOrganism().getTopiaId(), programModel.getOrganism().getId()); + + } + + +} \ 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>.
participants (1)
-
codelutin.com scm