diff --git a/pom.xml b/pom.xml index 36ed0435a4b0e2699460490a6380d19cb61975b7..5ca5dedc2ffbf5473d6e8863e458696bf1ea197b 100755 --- a/pom.xml +++ b/pom.xml @@ -15,10 +15,10 @@ <url>http://maven.apache.org</url> <repositories> - <!--repository> + <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> - </repository--> + </repository> <repository> <id>mvnrepository.com</id> <url>https://mvnrepository.com</url> @@ -189,7 +189,7 @@ <dependency> <groupId>org.locationtech.jts</groupId> <artifactId>jts-core</artifactId> - <version>1.16.0</version> + <version>1.16.1</version> <type>jar</type> </dependency> <dependency> @@ -281,7 +281,7 @@ <dependency> <groupId>com.bedatadriven</groupId> <artifactId>jackson-datatype-jts</artifactId> - <version>2.2</version> + <version>2.4</version> </dependency> </dependencies> diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java index b23cbba09fd738c973e9d6d39bfa07e39c2fa37b..b6553a330107a34e6044e20f79c61881e5aa0b4d 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java @@ -597,7 +597,7 @@ public class ForecastBean { { ex.printStackTrace(); }*/ - Response resp = this.getManagerResource().runModel(config.getModelId(), request); + Response resp = this.getManagerResource().runModel(config.getModelId(), request); if(resp.getStatus() == Response.Status.OK.getStatusCode()) { //System.out.println(resp.readEntity(String.class)); diff --git a/src/main/java/no/nibio/vips/logic/entity/ForecastResult.java b/src/main/java/no/nibio/vips/logic/entity/ForecastResult.java index f345707d5d904e7c507ef92579bb14b61b422780..d886aa58f9cddabeb469808aa503ddd3ccbf970a 100755 --- a/src/main/java/no/nibio/vips/logic/entity/ForecastResult.java +++ b/src/main/java/no/nibio/vips/logic/entity/ForecastResult.java @@ -45,6 +45,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import no.nibio.vips.logic.entity.helpers.ForecastResultSerializer; import org.locationtech.jts.geom.Geometry; @@ -62,6 +64,7 @@ import org.locationtech.jts.geom.Geometry; @NamedQuery(name = "ForecastResult.findByForecastConfigurationIdAndPeriod", query = "SELECT f FROM ForecastResult f WHERE f.forecastConfigurationId = :forecastConfigurationId AND f.validTimeStart BETWEEN :timeStart AND :timeEnd ORDER BY f.validTimeStart ASC"), @NamedQuery(name = "ForecastResult.findByValidTimeStart", query = "SELECT f FROM ForecastResult f WHERE f.validTimeStart = :validTimeStart ORDER BY f.validTimeStart ASC"), @NamedQuery(name = "ForecastResult.findByWarningStatus", query = "SELECT f FROM ForecastResult f WHERE f.warningStatus = :warningStatus ORDER BY f.validTimeStart ASC")}) +@JsonSerialize(using=ForecastResultSerializer.class) public class ForecastResult implements Serializable, Comparable{ private static final long serialVersionUID = 1L; @Id diff --git a/src/main/java/no/nibio/vips/logic/entity/helpers/ForecastResultSerializer.java b/src/main/java/no/nibio/vips/logic/entity/helpers/ForecastResultSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..4b7b7655622b93f178eea630bf370e57ea14d883 --- /dev/null +++ b/src/main/java/no/nibio/vips/logic/entity/helpers/ForecastResultSerializer.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2018 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.logic.entity.helpers; + +import com.bedatadriven.jackson.datatype.jts.JtsModule; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.Point; +import org.locationtech.jts.geom.Polygon; +import java.io.IOException; +import no.nibio.vips.gis.GISUtil; +import no.nibio.vips.logic.entity.ForecastResult; + +/** + * Unfortunately, we have to do this, since Resteasy does not currently support the org.locationtech.jts package + * Ref http://www.baeldung.com/jackson-custom-serialization + * @copyright 2019 <a href="http://www.nibio.no/">NIBIO</a> + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +public class ForecastResultSerializer extends StdSerializer<ForecastResult>{ + ObjectMapper objectMapper; + GeometryFactory gf; + GISUtil gisUtil; + public ForecastResultSerializer() { + this(null); + this.gisUtil = new GISUtil(); + } + + public ForecastResultSerializer(Class<ForecastResult> t) { + super(t); + this.objectMapper = new ObjectMapper(); + this.objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + this.objectMapper.registerModule(new JtsModule()); + } + + @Override + public void serialize(ForecastResult t, JsonGenerator jg, SerializerProvider sp) throws IOException { + jg.writeStartObject(); + jg.writeStringField("validTimeStart", this.objectMapper.writeValueAsString(t.getValidTimeStart()).replaceAll("\"", "")); + jg.writeStringField("validTimeEnd", this.objectMapper.writeValueAsString(t.getValidTimeEnd()).replaceAll("\"", "")); + String geoJSON = t.getValidGeometry() == null ? "null" + : t.getValidGeometry().getGeometryType().equals("Point") ? objectMapper.writeValueAsString(this.gisUtil.getVividPoint((Point) t.getValidGeometry())) + : t.getValidGeometry().getGeometryType().equals("LineString") ? objectMapper.writeValueAsString((LineString) t.getValidGeometry()) + :t.getValidGeometry().getGeometryType().equals("Polygon") ? objectMapper.writeValueAsString((Polygon) t.getValidGeometry()) + : "null"; + + //jg.writeObjectField("validGeometry", t.getValidGeometry()); + //System.out.println(geoJSON); + jg.writeRaw(",\"validGeometry\":" + geoJSON); + // + jg.writeNumberField("warningStatus", t.getWarningStatus()); + jg.writeNumberField("forecastResultId", t.getForecastResultId()); + jg.writeNumberField("forecastConfigurationId", t.getForecastConfigurationId()); + //System.out.println(t.getAllValues()); + jg.writeRaw(",\"allValues\": " + t.getAllValues()); + jg.writeRaw(",\"keys\": [" + "\"" + String.join("\",\"", t.getKeys()) + "\"]"); + jg.writeEndObject(); + } + + + +} diff --git a/src/main/java/no/nibio/vips/logic/scheduling/model/grid/preprocessor/ZymoseptoriaSimpleRiskGridModelPreprocessor.java b/src/main/java/no/nibio/vips/logic/scheduling/model/grid/preprocessor/ZymoseptoriaSimpleRiskGridModelPreprocessor.java index 215afe76a8723cec5371612d9524323dced4a5d8..56c591f0307468b50ef91b2840ba2de2caf7cd66 100644 --- a/src/main/java/no/nibio/vips/logic/scheduling/model/grid/preprocessor/ZymoseptoriaSimpleRiskGridModelPreprocessor.java +++ b/src/main/java/no/nibio/vips/logic/scheduling/model/grid/preprocessor/ZymoseptoriaSimpleRiskGridModelPreprocessor.java @@ -34,6 +34,7 @@ import java.util.stream.Stream; import no.nibio.vips.entity.ModelConfiguration; import no.nibio.vips.entity.PointWeatherObservationList; import no.nibio.vips.entity.WeatherObservation; +import no.nibio.vips.gis.CoordinateProxy; import no.nibio.vips.logic.entity.ForecastConfiguration; import no.nibio.vips.logic.entity.PointOfInterestWeatherStation; import no.nibio.vips.logic.scheduling.model.ModelRunPreprocessor; @@ -66,7 +67,7 @@ public class ZymoseptoriaSimpleRiskGridModelPreprocessor extends ModelRunPreproc WeatherUtil wUtil = new WeatherUtil(); for(PointOfInterestWeatherStation station:stations) { - Coordinate coordinate = new Coordinate(station.getPointOfInterest().getLongitude(), station.getPointOfInterest().getLatitude()); + CoordinateProxy coordinate = new CoordinateProxy(station.getPointOfInterest().getLongitude(), station.getPointOfInterest().getLatitude()); List<WeatherObservation> stationObs = getStationObs(station, configuration); try