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 ed8ad79708e4146938d61ef15e85d5406e03756c..d98f5e6c7c126e49ab0830417d5410cf640b01fb 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 71e2e2f19f091c273b1694a30d0e72de9e61b588..c4d38968588064a5c244e078c8883c47f9b9ac17 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 51e459f7ce70ee38cd6de41406e80f5e12cb80a4..8f1534f66f9046e2ed3fb78086db4697fafcb8ca 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 8341bda59c072de94328efda8402f5131a1756a5..a838635aca0edb56fe70647a1302547a930f5cca 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 1a7f81354b5e79af3c661e02f5b2d54357a31e2c..e27300e00d70d5b52769b5847e7572f4e6fa83c6 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 b07d417bd26477b6a56fa6d751bf3ae3bf191efa..eaf953a0044208e99eb7ac6b2324ec75d9a19992 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 5f7a65d336776197660c888298cb2cfaf56cf3cd..b11eac413df6d264173dda8c0400d62d29cc9c79 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 fa1bd890292438a4e8ffed77d687a33aac645a80..ab1b52c1b369cd23330d772d29591b5a833e7c21 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 c10ed46772a44246c55a76151917ae5268e3a21b..c3a8417cd6531b25fefae2334617aaf83d295302 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 8854a232fc606fc9f7f3a5ef8277a3cc23ee595e..8cc2534d9d7aa42d248f3726208857d6b6839fd3 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;