/*
* Copyright 2012 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.x38.serialization;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.PostConstruct;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
/**
* Modulo de Jackson para extender las funcionalidades que proporciona por defecto.
*
* @author UDA
*
*/
public class UdaModule extends SimpleModule {
/**
* Nombre identificador del modulo.
*/
private static final String NAME = "UdaModule";
/**
* Version del modulo.
*/
private static final Version VERSION = new Version(1, 0, 0, null);
/**
* Conjunto de serializadores a aplicar.
*/
private Map<Class<? extends Object>,JsonSerializer<Object>> serializers;
/**
* Conjunto de deserializadores a aplicar.
*/
private Map<Class<Object>,JsonDeserializer<? extends Object>> deserializers;
/**
* Propiedades de configuracion de la serializacion
*/
private Map<SerializationFeature,Boolean> serializationFeature;
/**
* Propiedades de configuracion de la deserializacion
*/
private Map<DeserializationFeature,Boolean> deserializationFeature;
/***
Propiedades de configuracion de los maps para deseralizar y seralizar
**/
private Map<MapperFeature, Boolean> mapperFeature;
/**
* Propiedades de inclusion de la serializacion.
*/
private List< JsonInclude.Include> serializationInclusions;
/**
* Constructor por defecto.
*/
public UdaModule() {
super(NAME, VERSION);
}
/**
* Metodo que se ejecuta despues de finalizar el contructor. Se inicializa
* el modulo configurando los serializadores y deserializadores indicados.
* Se anyade por defecto el deserializador MultiBeanDeserializer para
* permitir la deserializacion de multiples entidades no anidadas en la
* misma peticion.
*/
@PostConstruct
public void initialize() {
// Se registran los serializadores indicados.
if(this.serializers!=null){
Set<Entry<Class<? extends Object>,JsonSerializer<Object>>> serializerEntrySet = this.serializers.entrySet();
for (Iterator<Entry<Class<? extends Object>, JsonSerializer<Object>>> iterator = serializerEntrySet.iterator(); iterator.hasNext();) {
Entry<Class<? extends Object>, JsonSerializer<Object>> entry = (Entry<Class<? extends Object>, JsonSerializer<Object>>) iterator
.next();
this.addSerializer(entry.getKey(), entry.getValue());
}
}
// Se registran los deserializadores indicados.
if(this.deserializers!=null){
Set<Entry<Class<Object>, JsonDeserializer<? extends Object>>> deserializerEntrySet = this.deserializers.entrySet();
for (Iterator<Entry<Class<Object>, JsonDeserializer<? extends Object>>> iterator = deserializerEntrySet.iterator(); iterator
.hasNext();) {
Entry<Class<Object>, JsonDeserializer<? extends Object>> entry = (Entry<Class<Object>, JsonDeserializer<? extends Object>>) iterator
.next();
this.addDeserializer(entry.getKey(), entry.getValue());
}
}
// Se registra el deserializador MultiBeanDeserializer. Este bean
// permite la deserializacion de multiples entidades no anidadas en la
// misma peticion.
this.addDeserializer(Map.class, new MultiModelDeserializer());
}
/**
* Setter para asignar el conjunto de serializadores a aplicar.
*
* @param serializers Conjunto de serializadores.
*/
public void setSerializers(Map<Class<? extends Object>,JsonSerializer<Object>> serializers) {
this.serializers = serializers;
}
/**
* Setter para asignar el conjunto de deserializadores a aplicar.
*
* @param serializers Conjunto de deserializadores.
*/
public void setDeserializers(Map<Class<Object>,JsonDeserializer<? extends Object>> deserializers) {
this.deserializers = deserializers;
}
/**
* Getter para obtener las propiedades de configruacion de serializacion realizadas.
*
* @return Map<SerializationConfig.Feature, Boolean> Mapa de propiedades de
* configuracion y su estado.
*/
public Map<SerializationFeature, Boolean> getSerializationFeature() {
return serializationFeature;
}
/**
* Setter para asignar las propiedades de configruacion de serializacion realizadas.
*
* @param serializationConfigFeatures Mapa de propiedades de
* configuracion y su estado.
*/
public void setSerializationFeature(
Map<SerializationFeature, Boolean> serializationFeature) {
this.serializationFeature = serializationFeature;
}
/**
* Getter para obtener las propiedades de configruacion de deserializacion
* realizadas.
*
* @return Map<SerializationConfig.Feature, Boolean> Mapa de propiedades de
* configuracio su estado.
*/
public Map<DeserializationFeature, Boolean> getDeserializationFeature() {
return deserializationFeature;
}
/**
* Setter para asignar las propiedades de configruacion de deserializacion
* realizadas.
*
* @param deserializationConfigFeatures
* Mapa de propiedades de configuracion y su estado.
*/
public void setDeserializationFeature(
Map<DeserializationFeature, Boolean> deserializationFeature) {
this.deserializationFeature = deserializationFeature;
}
/**
* Getter para obtener las inclusiones de serialización de Jackson.
*
* @return List<JsonSerialize.Inclusion> Inclusiones de serialización de
* Jackson.
*/
public List< JsonInclude.Include> getSerializationInclusions() {
return serializationInclusions;
}
/**
* Getter para asignar las inclusiones de serialización de Jackson.
*
* @param serializationInclusions
* Inclusiones de serialización de Jackson.
*/
public void setSerializationInclusions(
List< JsonInclude.Include> serializationInclusions) {
this.serializationInclusions = serializationInclusions;
}
public Map<MapperFeature, Boolean> getMapperFeature() {
return mapperFeature;
}
public void setMapperFeature(
Map<MapperFeature, Boolean> mapperFeature) {
this.mapperFeature = mapperFeature;
}
}