This is an automated email from the git hooks/post-receive script. New commit to branch feature/7493_corrige_action_validation_serveur_distant in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit a7c7c6cb6bcee1f3396ae4c79f2500c65f37466c Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Fri Aug 19 14:27:37 2016 +0200 Gere la désérialisation de proprieté d'objet de type AbstractReference (ex.: ValidateResultForDto) Ajout d'un adapteur (UnknownReferenceAdapter) qui détermine le type de la référence en fonction du dto porté par la référence refs #7493 --- .../services/dto/gson/ObserveDtoGsonSupplier.java | 3 + .../gson/reference/UnknownReferenceAdapter.java | 69 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java index 6b055db..c30a6d5 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java @@ -28,12 +28,14 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import fr.ird.observe.services.dto.AbstractReference; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.actions.report.ReportVariable; import fr.ird.observe.services.dto.gson.reference.DataReferenceAdapter; import fr.ird.observe.services.dto.gson.reference.DataReferenceSetAdapter; +import fr.ird.observe.services.dto.gson.reference.UnknownReferenceAdapter; import fr.ird.observe.services.dto.gson.reference.ReferentialReferenceAdapter; import fr.ird.observe.services.dto.gson.reference.ReferentialReferenceSetAdapter; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -98,6 +100,7 @@ public class ObserveDtoGsonSupplier implements Supplier<Gson> { gsonBuilder.registerTypeAdapter(DataReference.class, new DataReferenceAdapter()); gsonBuilder.registerTypeAdapter(ReferentialReference.class, new ReferentialReferenceAdapter()); + gsonBuilder.registerTypeAdapter(AbstractReference.class, new UnknownReferenceAdapter()); gsonBuilder.registerTypeAdapter(DataReferenceSet.class, new DataReferenceSetAdapter()); gsonBuilder.registerTypeAdapter(ReferentialReferenceSet.class, new ReferentialReferenceSetAdapter()); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/reference/UnknownReferenceAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/reference/UnknownReferenceAdapter.java new file mode 100644 index 0000000..9b9dd79 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/reference/UnknownReferenceAdapter.java @@ -0,0 +1,69 @@ +package fr.ird.observe.services.dto.gson.reference; + +/*- + * #%L + * ObServe :: Services model + * %% + * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import fr.ird.observe.services.dto.AbstractReference; +import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; + +import java.lang.reflect.Type; + +/** + * Cet adapter est destiné à permettre la désérialisation des objets Observe contenant + * des propriétés de tye AbstractReference. + * + * Par exemple : ValidateResultForDto possède une propriété dto de type AbstractReference + * + * Au moment de la désérialisation, il faut déterminer le type concret de la référence (DataReference, ReferentialReference..) + * afin de permettre la désérialisation. + * (AbstractReference étant une classe abstraite, elle n'est pas instanciable) + * + * @author smaisonneuve + * Created on 19/08/16. + */ +public class UnknownReferenceAdapter<D extends IdDto, R extends AbstractReference<D>> implements JsonDeserializer<R> { + + @Override + public final R deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + R reference; + + JsonObject jsonObject = json.getAsJsonObject(); + + Class<D> dtoType = context.deserialize(jsonObject.get(AbstractReference.PROPERTY_TYPE), Class.class); + + if (ReferentialDto.class.isAssignableFrom(dtoType)) { + reference = context.deserialize(json, ReferentialReference.class); + } else { + reference = context.deserialize(json, DataReference.class); + } + + return reference; + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.