/*
* This file is part of the GeoLatte project. This code is licenced under
* the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing permissions and limitations under the
* License.
*
* Copyright (C) 2010 - 2010 and Ownership of code is shared by:
* Qmino bvba - Romeinsestraat 18 - 3001 Heverlee (http://www.Qmino.com)
* Geovise bvba - Generaal Eisenhowerlei 9 - 2140 Antwerpen (http://www.geovise.com)
*/
package org.geolatte.common.dataformats.json.jackson;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import org.geolatte.geom.*;
import java.io.IOException;
/**
* This is just a dumb class which is simply added so that users of the geolatte serializer/deserializer for geojson
* can do something as: ... provider.findValueSerializer(Geometry.class) inside their own serializers without needing to
* know what kind of geometry they have.
* <br>
* <p>
* <i>Creation-Date</i>: 23-sep-2010<br>
* <i>Creation-Time</i>: 16:40:24<br>
* </p>
*
* @author Yves Vandewoude
* @author <a href="http://www.qmino.com">Qmino bvba</a>
* @since SDK1.5
*/
public class AnyGeometrySerializer extends JsonSerializer<Geometry> implements ContextualSerializer {
// Note: we must implement ContextualSerialized because findValueSerializer needs a beanproperty.
// Otherwise this serializer is not context-aware
private BeanProperty beanProperty;
/**
* Creates a new serializer.
*/
public AnyGeometrySerializer() {
}
protected AnyGeometrySerializer(BeanProperty property) {
beanProperty = property;
}
@Override
public void serialize(Geometry value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (value instanceof Point) {
JsonSerializer<Object> jser = provider.findValueSerializer(Point.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof MultiPoint) {
JsonSerializer<Object> jser = provider.findValueSerializer(MultiPoint.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof LineString) {
JsonSerializer<Object> jser = provider.findValueSerializer(LineString.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof MultiLineString) {
JsonSerializer<Object> jser = provider.findValueSerializer(MultiLineString.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof Polygon) {
JsonSerializer<Object> jser = provider.findValueSerializer(Polygon.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof MultiPolygon) {
JsonSerializer<Object> jser = provider.findValueSerializer(MultiPolygon.class, beanProperty);
jser.serialize(value, jgen, provider);
} else if (value instanceof GeometryCollection) {
JsonSerializer<Object> jser = provider.findValueSerializer(GeometryCollection.class, beanProperty);
jser.serialize(value, jgen, provider);
}
}
@Override
public JsonSerializer<Geometry> createContextual(SerializerProvider serializerProvider,
BeanProperty beanProperty) throws JsonMappingException {
return new AnyGeometrySerializer(beanProperty);
}
}