Commit b255e321 authored by Noel Alonso's avatar Noel Alonso
Browse files

Añade soporte para de/serializar LineString

Añade test
parent 3a1bb2f9
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
package es.redmic.jts4jackson.linestring;

import java.io.IOException;

import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.spatial4j.io.jackson.GeometryDeserializer;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

public class LineStringDeserializer extends JsonDeserializer<LineString> {

	final GeometryDeserializer dser;

	public LineStringDeserializer() {
		dser = new GeometryDeserializer();
	}

	@Override
	public LineString deserialize(JsonParser jp, DeserializationContext ctxt)
			throws IOException, JsonProcessingException {
		Geometry geometry = dser.deserialize(jp, ctxt);
		if (geometry != null) {
			return (LineString) geometry;
		}
		return null;
	}
}
+24 −0
Original line number Diff line number Diff line
package es.redmic.jts4jackson.linestring;

import java.io.IOException;

import org.locationtech.jts.geom.LineString;
import org.locationtech.spatial4j.io.jackson.GeometryAsGeoJSONSerializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class LineStringSerializer extends JsonSerializer<LineString> {

	final GeometryAsGeoJSONSerializer ser;

	public LineStringSerializer() {
		ser = new GeometryAsGeoJSONSerializer();
	}

	@Override
	public void serialize(LineString value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
		ser.serialize(value, gen, serializers);
	}
}
+5 −0
Original line number Diff line number Diff line
package es.redmic.jts4jackson.module;

import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;

import com.fasterxml.jackson.core.json.PackageVersion;
import com.fasterxml.jackson.databind.module.SimpleModule;

import es.redmic.jts4jackson.linestring.LineStringDeserializer;
import es.redmic.jts4jackson.linestring.LineStringSerializer;
import es.redmic.jts4jackson.point.PointDeserializer;
import es.redmic.jts4jackson.point.PointSerializer;

@@ -18,9 +21,11 @@ public class JTSModule extends SimpleModule {

		// deserializers
		addDeserializer(Point.class, new PointDeserializer());
		addDeserializer(LineString.class, new LineStringDeserializer());

		// serializers:
		addSerializer(Point.class, new PointSerializer());
		addSerializer(LineString.class, new LineStringSerializer());
	}

	@Override
+54 −0
Original line number Diff line number Diff line
package es.redmic.jts4jackson.linestring;

import java.io.IOException;
import java.nio.file.Files;

import org.json.JSONException;
import org.junit.Test;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.skyscreamer.jsonassert.JSONAssert;
import org.springframework.core.io.ClassPathResource;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;

import es.redmic.jts4jackson.module.JTSModule;

public class LineStringSerializerDeserializerTest {

	private String dataFile = "/data/lineString.json";

	ObjectMapper mapper = new ObjectMapper();

	@Test
	public void sourceAndExpectedJson_AreEqual_IfDeserializeAndSerializeLineString()
			throws JsonParseException, JsonMappingException, IOException, JSONException {

		mapper.registerModule(new JTSModule());

		LineString lineString = mapper.readValue(getClass().getResource(dataFile).openStream(), LineString.class);

		String source = new String(Files.readAllBytes(new ClassPathResource(dataFile).getFile().toPath()));

		String expected = mapper.writeValueAsString(lineString);

		JSONAssert.assertEquals(expected, source, false);
	}

	@Test(expected = InvalidDefinitionException.class)
	public void deserialize_ThrowExeption_IfModuleIsNotRegistry()
			throws JsonParseException, JsonMappingException, IOException, JSONException {

		mapper.readValue(getClass().getResource(dataFile).openStream(), LineString.class);
	}

	@Test(expected = JsonMappingException.class)
	public void serialize_ThrowExeption_IfModuleIsNotRegistry()
			throws JsonParseException, JsonMappingException, IOException, JSONException {

		mapper.writeValueAsString(new GeometryFactory().createLineString());
	}
}
+1 −4
Original line number Diff line number Diff line
package es.redmic.jts4jackson.point;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

@@ -32,9 +31,7 @@ public class PointSerializerDeserializerTest {

		Point point = mapper.readValue(getClass().getResource(dataFile).openStream(), Point.class);

		File resource = new ClassPathResource(dataFile).getFile();

		String source = new String(Files.readAllBytes(resource.toPath()));
		String source = new String(Files.readAllBytes(new ClassPathResource(dataFile).getFile().toPath()));

		String expected = mapper.writeValueAsString(point);

Loading