/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.notification.geonode.kombu;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class KombuSourceDeserializer extends StdDeserializer<KombuSource> {
private static final long serialVersionUID = 6089865078148924995L;
public KombuSourceDeserializer() {
super(KombuSource.class);
}
@Override
public KombuSource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
KombuSource ret = null;
JsonNode node = jp.getCodec().readTree(jp);
String type = node.get("type").asText();
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
Class<? extends KombuSource> sourceClass = null;
if (type.equals("FeatureTypeInfo")) {
sourceClass = KombuFeatureTypeInfo.class;
}
if (type.equals("WorkspaceInfo")) {
sourceClass = KombuWorkspaceInfo.class;
}
if (type.equals("NamespaceInfo")) {
sourceClass = KombuNamespaceInfo.class;
}
if (type.equals("LayerInfo")) {
sourceClass = KombuLayerInfo.class;
}
if (type.equals("WMSLayerInfo")) {
sourceClass = KombuWMSLayerInfo.class;
}
if (type.equals("StoreInfo")) {
sourceClass = KombuStoreInfo.class;
}
if (type.equals("CoverageInfo")) {
sourceClass = KombuCoverageInfo.class;
}
if (type.equals("LayerGroupInfo")) {
sourceClass = KombuLayerGroupInfo.class;
}
if (sourceClass != null) {
ret = mapper.readValue(node.toString(), sourceClass);
}
return ret;
}
}