This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit f375d5de3aab3f5bc308e37ec910ccc6392f9d83 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Aug 17 09:11:09 2015 +0200 Ajout d'un objet pour transformer une entité en model --- .../services/service/EntityToModelVisitor.java | 112 +++++++++++++++++++++ pom.xml | 2 +- 2 files changed, 113 insertions(+), 1 deletion(-) 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 new file mode 100644 index 0000000..abd84f8 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/EntityToModelVisitor.java @@ -0,0 +1,112 @@ +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/pom.xml b/pom.xml index a3e399f..f055b2b 100644 --- a/pom.xml +++ b/pom.xml @@ -243,7 +243,7 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> - <version>3.0-rc-8</version> + <version>3.0-SNAPSHOT</version> <scope>compile</scope> <exclusions> <exclusion> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.