
br.eti.clairton.gson.hypermedia.HypermediableSerializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gson-hypermedia Show documentation
Show all versions of gson-hypermedia Show documentation
Possibilidade de usar Hypermedia com o GSON
The newest version!
package br.eti.clairton.gson.hypermedia;
import static java.util.logging.Level.FINE;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import br.eti.clairton.inflector.Inflector;
import br.eti.clairton.jpa.serializer.GsonJpaSerializer;
import br.eti.clairton.jpa.serializer.Nodes;
import net.vidageek.mirror.dsl.Mirror;
/**
* Deserializa os objetos da de forma a integrar com o modo ActiveSerializer.
*
* @author Clairton Rodrigo Heinzen
*/
public abstract class HypermediableSerializer extends GsonJpaSerializer implements JsonSerializer, JsonDeserializer, Hypermediable {
private static final Logger logger = Logger.getLogger(HypermediablePaginatedCollectionSerializer.class.getSimpleName());
private static final long serialVersionUID = 1L;
private final HypermediableRule navigator;
private final Mirror mirror = new Mirror();
@Deprecated
protected HypermediableSerializer() {
this(null, null, null);
}
public HypermediableSerializer(final HypermediableRule navigator, final EntityManager em, final Inflector inflector) {
super(em);
this.navigator = navigator;
}
public HypermediableSerializer(final Nodes nodes, final HypermediableRule navigator, final EntityManager em, final Inflector inflector) {
super(nodes, em);
this.navigator = navigator;
}
/**
* {@inheritDoc}.
*/
@Override
public JsonElement serialize(final T src, final Type type, final JsonSerializationContext context) {
final JsonElement element = super.serialize(src, type, context);
if (isResource(src)) {
return serializeWithLinks(element, src, context);
}
return element;
}
protected Boolean isResource(T src){
return getRootTag(src).equals(getResource(src));
}
protected JsonElement serializeWithLinks(final JsonElement element, final T src, final JsonSerializationContext context){
final JsonElement link = getLinks(src, context);
final Object field = mirror.on(element).get().field("members");
@SuppressWarnings("unchecked")
final Map members = (Map) field;
members.put("links", link);
logger.log(FINE, "Add links {}", link);
return element;
}
protected JsonElement getLinks(final T src, final JsonSerializationContext context){
final Set links = navigator.from(src, getResource(src), getOperation(src));
final JsonArray collection = new JsonArray();
for (final Link link : links) {
final JsonElement element = context.serialize(link);
collection.add(element);
}
return collection;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy