diff --git a/src/main/java/no/nibio/vips/entity/Result.java b/src/main/java/no/nibio/vips/entity/Result.java index bdb057724bc77107432a55b9ec556c4ef21f55cf..bc92d7e1078b02e627e70b72a18ede6f51be1e59 100755 --- a/src/main/java/no/nibio/vips/entity/Result.java +++ b/src/main/java/no/nibio/vips/entity/Result.java @@ -29,9 +29,10 @@ import com.vividsolutions.jts.geom.Geometry; /** * Represents a result from a model run - * @copyright 2013 {@link http://www.nibio.no NIBIO} - * @author Tor-Einar Skog <tor-einar.skog@hyper.no> + * @copyright 2013-2019 {@link http://www.nibio.no NIBIO} + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ +//@JsonbTypeAdapter(value = ResultJsonbAdapter.class) @JsonDeserialize(using=ResultDeserializer.class) @JsonSerialize(using=ResultSerializer.class) public interface Result extends Comparable{ diff --git a/src/main/java/no/nibio/vips/entity/ResultJsonbAdapter.java b/src/main/java/no/nibio/vips/entity/ResultJsonbAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..1a8532f3e5e7be24a33e42d2e0b485c58bf667b7 --- /dev/null +++ b/src/main/java/no/nibio/vips/entity/ResultJsonbAdapter.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2019 NIBIO <http://www.nibio.no/>. + * + * This file is part of VIPSCommon. + * VIPSCommon is free software: you can redistribute it and/or modify + * it under the terms of the NIBIO Open Source License as published by + * NIBIO, either version 1 of the License, or (at your option) any + * later version. + * + * VIPSCommon is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * NIBIO Open Source License for more details. + * + * You should have received a copy of the NIBIO Open Source License + * along with VIPSCommon. If not, see <http://www.nibio.no/licenses/>. + * + */ + +package no.nibio.vips.entity; + +import com.bedatadriven.jackson.datatype.jts.JtsModule; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; +import java.math.BigDecimal; +import java.util.Date; +import java.util.Map; +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; +import javax.json.JsonValue; +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; +import javax.json.bind.adapter.JsonbAdapter; +import no.nibio.vips.gis.GISUtil; + +/** + * @copyright 2019 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class ResultJsonbAdapter implements JsonbAdapter<Result, JsonObject>{ + + @Override + public JsonObject adaptToJson(Result original) throws Exception { + System.out.println("adaptToJson!"); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JtsModule()); + JsonObjectBuilder builder = Json.createObjectBuilder(); + builder.add("validTimeStart", objectMapper.writeValueAsString(original.getValidTimeStart()).replaceAll("\"", "")); + builder.add("validTimeEnd", objectMapper.writeValueAsString(original.getValidTimeStart()).replaceAll("\"", "")); + System.out.println("adaptToJson1"); + String geoJSON = original.getValidGeometry() == null ? "null" + : original.getValidGeometry().getGeometryType().equals("Point") ? objectMapper.writeValueAsString((Point) original.getValidGeometry()) + : original.getValidGeometry().getGeometryType().equals("LineString") ? objectMapper.writeValueAsString((LineString) original.getValidGeometry()) + : original.getValidGeometry().getGeometryType().equals("Polygon") ? objectMapper.writeValueAsString((Polygon) original.getValidGeometry()) + : "null"; + builder.add("validGeometry", geoJSON); + System.out.println("adaptToJson2"); + builder.add("warningStatus", original.getWarningStatus()); + System.out.println("adaptToJson3"); + builder.add("allValues", objectMapper.writeValueAsString(original.getAllValues())); + System.out.println("adaptToJson4"); + builder.add("keys", objectMapper.writeValueAsString(original.getKeys())); + System.out.println("adaptToJson5"); + return builder.build(); + } + + @Override + public Result adaptFromJson(JsonObject adapted) throws Exception { + System.out.println("adaptFromJson!"); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JtsModule()); + Result r = new ResultImpl(); + + + r.setValidTimeStart(objectMapper.convertValue(adapted.getString("validTimeStart"), Date.class)); + r.setValidTimeEnd(objectMapper.convertValue(adapted.getString("validTimeEnd"), Date.class)); + System.out.println("adaptFromJson1"); + if(adapted.get("allValues") != null) + { + r.setAllValues(objectMapper.readValue(adapted.getString("allValues"), Map.class)); + System.out.println("adaptFromJson2"); + } + r.setWarningStatus(adapted.getInt("warningStatus")); + //System.out.println(adapted.getString("validGeometry")); + + + Geometry validGeometry = null; + //System.out.println(geomNode); + if(!adapted.isNull("validGeometry")) + { + JsonObject geomNode = adapted.getValue("validGeometry").asJsonObject(); + switch(geomNode.getString("type")){ + case "Point": + validGeometry = objectMapper.convertValue(adapted.getString("validGeometry"), Point.class); + break; + case "Polygon": + validGeometry = objectMapper.convertValue(adapted.getString("validGeometry"), Polygon.class); + break; + case "LineString": + validGeometry = objectMapper.convertValue(adapted.getString("validGeometry"), LineString.class); + break; + default: + validGeometry = null; + } + if(validGeometry.getSRID() <= 0) + { + validGeometry.setSRID(GISUtil.DEFAULT_SRID); + } + } + + r.setValidGeometry(validGeometry); + //System.out.println(r.getValidGeometry()); + return r; + } + +} diff --git a/src/main/java/no/nibio/vips/entity/WeatherObservation.java b/src/main/java/no/nibio/vips/entity/WeatherObservation.java index 7fb9a33b2c7f0189aef92d22b9c88a505d0a62ae..2b8eab52a5af44bf287ff94fea44ca08b48e0e16 100755 --- a/src/main/java/no/nibio/vips/entity/WeatherObservation.java +++ b/src/main/java/no/nibio/vips/entity/WeatherObservation.java @@ -20,6 +20,7 @@ package no.nibio.vips.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.Date; import javax.json.bind.annotation.JsonbDateFormat; import javax.json.bind.annotation.JsonbTransient; @@ -143,8 +144,9 @@ public class WeatherObservation implements Comparable{ this.value = value; } - //@JsonIgnore - @JsonbTransient + + //@JsonbTransient + @JsonIgnore public long getValiditySignature() { long result = 17;