From 69883571e1153bd4da53c1b19ad52e400e90f07f Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Mon, 23 Oct 2017 14:50:50 +0200 Subject: [PATCH] Refactoring GISUtil stuff from VIPSLogic to VIPSCommon --- .../servlet/PointOfInterestController.java | 2 +- .../controller/session/ForecastBean.java | 4 +- .../session/PointOfInterestBean.java | 4 +- .../nibio/vips/logic/entity/Observation.java | 9 ++- .../vips/logic/entity/PointOfInterest.java | 2 +- .../vips/logic/service/LogicService.java | 2 +- .../logic/service/ObservationService.java | 6 +- .../util/{GISUtil.java => GISEntityUtil.java} | 79 +++++-------------- ...ISUtilTest.java => GISEntityUtilTest.java} | 30 +------ .../YrWeatherForecastProviderTest.java | 4 +- 10 files changed, 38 insertions(+), 104 deletions(-) rename src/main/java/no/nibio/vips/logic/util/{GISUtil.java => GISEntityUtil.java} (76%) rename src/test/java/no/nibio/vips/logic/util/{GISUtilTest.java => GISEntityUtilTest.java} (55%) diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java index ed8ad797..d98f5e6c 100755 --- a/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java +++ b/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java @@ -48,7 +48,7 @@ import no.nibio.vips.util.ExceptionUtil; import no.nibio.vips.util.ServletUtil; import no.nibio.vips.logic.entity.WeatherForecastProvider; import no.nibio.vips.logic.i18n.SessionLocaleUtil; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.gis.GISUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.web.forms.FormField; import no.nibio.web.forms.FormValidation; 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 71e2e2f1..c4d38968 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 @@ -74,7 +74,7 @@ import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.scheduling.model.ModelRunPreprocessor; import no.nibio.vips.logic.scheduling.model.ModelRunPreprocessorFactory; import no.nibio.vips.logic.scheduling.model.PreprocessorException; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.RunModelException; import no.nibio.vips.logic.util.SessionControllerGetter; @@ -716,7 +716,7 @@ public class ForecastBean { List<PointOfInterest> poisWithAggregate = getPointOfInterestForecastsAggregate(organizationId, cropOrganismIds, theDate); //System.out.println(this.getClass().getName() + " DEBUG: getPointOfInterestForecastsAggregate took " + (new Date().getTime() - benchmark.getTime()) + " ms to complete."); - GISUtil gisUtil = new GISUtil(); + GISEntityUtil gisUtil = new GISEntityUtil(); for(PointOfInterest poiWithAggregate:poisWithAggregate) { // If it's an inactive weather station, we don't produce a placemark diff --git a/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java b/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java index 51e459f7..8f1534f6 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java @@ -50,7 +50,7 @@ import no.nibio.vips.logic.entity.PointOfInterestType; import no.nibio.vips.logic.entity.PointOfInterestWeatherStation; import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.WeatherStationDataSource; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.SessionControllerGetter; import no.nibio.web.forms.FormField; @@ -190,7 +190,7 @@ public class PointOfInterestBean { String description = ""; - GISUtil gisUtil = new GISUtil(); + GISEntityUtil gisUtil = new GISEntityUtil(); for(PointOfInterest poi:pois) { if(excludePoiId != null && excludePoiId.equals(poi.getPointOfInterestId())) diff --git a/src/main/java/no/nibio/vips/logic/entity/Observation.java b/src/main/java/no/nibio/vips/logic/entity/Observation.java index 8341bda5..a838635a 100755 --- a/src/main/java/no/nibio/vips/logic/entity/Observation.java +++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java @@ -46,7 +46,8 @@ import javax.persistence.CascadeType; import javax.persistence.FetchType; import javax.persistence.OneToMany; import javax.validation.constraints.Size; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.logic.util.GISEntityUtil; +import no.nibio.vips.gis.GISUtil; import no.nibio.vips.logic.util.StringJsonUserType; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -109,9 +110,11 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse private Set<ObservationIllustration> observationIllustrationSet; + private GISEntityUtil GISEntityUtil; private GISUtil GISUtil; public Observation() { + this.GISEntityUtil = new GISEntityUtil(); this.GISUtil = new GISUtil(); } @@ -187,7 +190,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse public void setGeoinfo(String json) { - this.setGeoinfos(this.GISUtil.getGisFromGeoJSON(json)); + this.setGeoinfos(this.GISEntityUtil.getGisFromGeoJSON(json)); } @Transient @@ -196,7 +199,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse { Map<String, Object> properties = new HashMap<>(); properties.put("observationId", this.getObservationId()); - return this.GISUtil.getGeoJSONFromGis(this.geoinfo, properties); + return this.GISEntityUtil.getGeoJSONFromGis(this.geoinfo, properties); } /*@Transient diff --git a/src/main/java/no/nibio/vips/logic/entity/PointOfInterest.java b/src/main/java/no/nibio/vips/logic/entity/PointOfInterest.java index 1a7f8135..e27300e0 100755 --- a/src/main/java/no/nibio/vips/logic/entity/PointOfInterest.java +++ b/src/main/java/no/nibio/vips/logic/entity/PointOfInterest.java @@ -46,7 +46,7 @@ import javax.persistence.DiscriminatorType; import javax.persistence.DiscriminatorValue; import javax.persistence.FetchType; import javax.persistence.OneToMany; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.gis.GISUtil; /** * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a> diff --git a/src/main/java/no/nibio/vips/logic/service/LogicService.java b/src/main/java/no/nibio/vips/logic/service/LogicService.java index b07d417b..eaf953a0 100755 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -255,7 +255,7 @@ public class LogicService { to = SystemTime.getSystemTime(); Calendar cal = Calendar.getInstance(); cal.setTime(to); - cal.add(Calendar.MONTH, -2); + cal.add(Calendar.MONTH, -4); from = cal.getTime(); } diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java index 5f7a65d3..b11eac41 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -39,7 +39,7 @@ import javax.ws.rs.core.Response; import no.nibio.vips.logic.entity.Observation; import no.nibio.vips.logic.entity.VipsLogicRole; import no.nibio.vips.logic.entity.VipsLogicUser; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.SessionControllerGetter; import org.jboss.resteasy.annotations.GZIP; @@ -139,7 +139,7 @@ public class ObservationService { to ); - GISUtil gisUtil = new GISUtil(); + GISEntityUtil gisUtil = new GISEntityUtil(); return Response.ok().entity(gisUtil.getGeoJSONFromObservations(filteredObservations)).build(); } @@ -301,7 +301,7 @@ public class ObservationService { observation.setStatusChangedByUserId(user.getUserId()); observation.setStatusChangedTime(new Date()); observation = SessionControllerGetter.getObservationBean().storeObservation(observation); - GISUtil gisUtil = new GISUtil(); + GISEntityUtil gisUtil = new GISEntityUtil(); return Response.created(URI.create("/observation/" + observation.getObservationId())).entity(gisUtil.getGeoJSONFromObservation(observation)).build(); }catch (IOException ex) { diff --git a/src/main/java/no/nibio/vips/logic/util/GISUtil.java b/src/main/java/no/nibio/vips/logic/util/GISEntityUtil.java similarity index 76% rename from src/main/java/no/nibio/vips/logic/util/GISUtil.java rename to src/main/java/no/nibio/vips/logic/util/GISEntityUtil.java index fa1bd890..ab1b52c1 100755 --- a/src/main/java/no/nibio/vips/logic/util/GISUtil.java +++ b/src/main/java/no/nibio/vips/logic/util/GISEntityUtil.java @@ -40,25 +40,29 @@ import org.wololo.jts2geojson.GeoJSONWriter; * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ -public class GISUtil { +public class GISEntityUtil { - /** - * Parses all features from GeoJSON string, returns as JTS Geometry objects - * @param json - * @return - */ - public List<Geometry> getGeometriesFromGeoJSON(String json) + public String getGeoJSONFromGis(List<Gis> geoinfo, Map<String, Object> properties) { - FeatureCollection featureCollection = (FeatureCollection) GeoJSONFactory.create(json); - GeoJSONReader reader = new GeoJSONReader(); - List<Geometry> retVal = new ArrayList<>(); - for(Feature feature: featureCollection.getFeatures()) + if(geoinfo == null || geoinfo.isEmpty()) { - retVal.add(reader.read(feature.getGeometry())); + return ""; } - return retVal; + List<Feature> features = new ArrayList<>(); + GeoJSONWriter writer = new GeoJSONWriter(); + geoinfo.stream().forEach( + (gis)->features.add(new Feature(writer.write(gis.getGisGeom()), properties)) + ); + + FeatureCollection json = writer.write(features); + return json.toString(); } + /** + * Extract Gis objects from the provided GeoJSON + * @param json + * @return + */ public List<Gis> getGisFromGeoJSON(String json) { if(json == null) @@ -81,22 +85,7 @@ public class GISUtil { }catch(NullPointerException ex) {}; return retVal; } - - public String getGeoJSONFromGis(List<Gis> geoinfo, Map<String, Object> properties) - { - if(geoinfo == null || geoinfo.isEmpty()) - { - return ""; - } - List<Feature> features = new ArrayList<>(); - GeoJSONWriter writer = new GeoJSONWriter(); - geoinfo.stream().forEach( - (gis)->features.add(new Feature(writer.write(gis.getGisGeom()), properties)) - ); - - FeatureCollection json = writer.write(features); - return json.toString(); - } + /** * Converts a list of observations to a FeatureCollection @@ -159,39 +148,7 @@ public class GISUtil { return features; } - public String getGeoJSONFromGeometries(List<Geometry> geometries, Map<String, Object> properties) - { - if(geometries == null || geometries.isEmpty()) - { - return ""; - } - List<Feature> features = new ArrayList<>(); - GeoJSONWriter writer = new GeoJSONWriter(); - geometries.stream().forEach((geometry)->features.add(new Feature(writer.write(geometry), properties))); - FeatureCollection json = writer.write(features); - return json.toString(); - } - - public String getGeoJSONFromGeometry(Geometry geometry,Map<String, Object> properties) - { - if(geometry == null) - { - return ""; - } - List<Feature> features = new ArrayList<>(); - GeoJSONWriter writer = new GeoJSONWriter(); - - features.add(new Feature(writer.write(geometry), properties)); - - FeatureCollection json = writer.write(features); - return json.toString(); - } - public Point createPointWGS84(Coordinate coordinate) - { - GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326); - return gf.createPoint(coordinate); - } public de.micromata.opengis.kml.v_2_2_0.Coordinate getKMLCoordinateFromJTSCoordinate(com.vividsolutions.jts.geom.Coordinate jtsCoordinate) { diff --git a/src/test/java/no/nibio/vips/logic/util/GISUtilTest.java b/src/test/java/no/nibio/vips/logic/util/GISEntityUtilTest.java similarity index 55% rename from src/test/java/no/nibio/vips/logic/util/GISUtilTest.java rename to src/test/java/no/nibio/vips/logic/util/GISEntityUtilTest.java index c10ed467..c3a8417c 100755 --- a/src/test/java/no/nibio/vips/logic/util/GISUtilTest.java +++ b/src/test/java/no/nibio/vips/logic/util/GISEntityUtilTest.java @@ -18,28 +18,22 @@ */ package no.nibio.vips.logic.util; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; -import org.wololo.geojson.Feature; import org.wololo.geojson.FeatureCollection; import org.wololo.geojson.GeoJSONFactory; -import org.wololo.geojson.Geometry; -import org.wololo.geojson.Point; /** * * @author treinar */ -public class GISUtilTest { +public class GISEntityUtilTest { - public GISUtilTest() { + public GISEntityUtilTest() { } @BeforeClass @@ -58,25 +52,7 @@ public class GISUtilTest { public void tearDown() { } - /** - * Test of getGeometriesFromGeoJSON method, of class GISUtil. - */ - @Test - public void testRoundtrip() { - System.out.println("testRoundtrip"); - String json = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[10.669097900390623,59.753628151319106],[10.612792968749998,59.70309199431276],[10.726776123046873,59.705863076677105],[10.669097900390623,59.753628151319106]]]},\"properties\":{\"observationId\":12}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[10.704803466796873,59.64831609639066]},\"properties\":{\"observationId\":12}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[10.649871826171871,59.67051458978321],[10.791320800781248,59.67328836837126]]},\"properties\":{\"observationId\":12}}]}"; - System.out.println("JSON=" + json); - GISUtil instance = new GISUtil(); - //List<Geometry> expResult = null; - List<com.vividsolutions.jts.geom.Geometry> geometries = instance.getGeometriesFromGeoJSON(json); - Map<String, Object> properties = new HashMap<>(); - properties.put("observationId", 12); - String result = instance.getGeoJSONFromGeometries(geometries, properties); - //System.out.println(result); - assertEquals(json, result); - - - } + // Actually testing the helper API diff --git a/src/test/java/no/nibio/vips/util/weather/YrWeatherForecastProviderTest.java b/src/test/java/no/nibio/vips/util/weather/YrWeatherForecastProviderTest.java index 8854a232..8cc2534d 100755 --- a/src/test/java/no/nibio/vips/util/weather/YrWeatherForecastProviderTest.java +++ b/src/test/java/no/nibio/vips/util/weather/YrWeatherForecastProviderTest.java @@ -20,13 +20,11 @@ package no.nibio.vips.util.weather; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Point; -import no.nibio.vips.util.weather.YrWeatherForecastProvider; -import no.nibio.vips.util.weather.ParseWeatherDataException; import java.util.Collections; import java.util.List; import no.nibio.vips.entity.WeatherObservation; import no.nibio.vips.logic.entity.PointOfInterestWeatherStation; -import no.nibio.vips.logic.util.GISUtil; +import no.nibio.vips.gis.GISUtil; import no.nibio.vips.util.WeatherUtil; import org.junit.After; import org.junit.AfterClass; -- GitLab