From e033c523b3b66caac13c2ab84728270d56786cdd Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Fri, 8 Sep 2017 14:38:21 +0200 Subject: [PATCH] Refactoring Result object --- .../controller/session/ForecastBean.java | 16 ++--- .../vips/logic/entity/ForecastResult.java | 62 ++++++++++++++----- .../vips/logic/messaging/MessagingBean.java | 6 +- .../modules/roughage/RoughageService.java | 4 +- .../DMIPointWebDataParserTest.java | 2 +- 5 files changed, 62 insertions(+), 28 deletions(-) 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 c205d3e2..f6a4600f 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 @@ -139,10 +139,10 @@ public class ForecastBean { return null; } Calendar cal = Calendar.getInstance(); - cal.setTime(mostRecentForecastResult.getResultValidTime()); + cal.setTime(mostRecentForecastResult.getValidTimeStart()); cal.add(Calendar.DATE, -latestDays); Date startDate = cal.getTime(); - return this.getForecastResults(forecastConfigurationId, startDate, mostRecentForecastResult.getResultValidTime()); + return this.getForecastResults(forecastConfigurationId, startDate, mostRecentForecastResult.getValidTimeStart()); } @@ -167,8 +167,8 @@ public class ForecastBean { Query q = em.createNativeQuery( "SELECT * FROM forecast_result " + "WHERE forecast_configuration_id=:forecastConfigurationId " - + "AND result_valid_time = (" - + "SELECT MAX(result_valid_time) " + + "AND valid_time_start = (" + + "SELECT MAX(valid_time_start) " + "FROM forecast_result " + "WHERE forecast_configuration_id=:forecastConfigurationId " + ");", ForecastResult.class); @@ -789,7 +789,7 @@ public class ForecastBean { .append(" TRUNCATE forecast_result_cache;") .append(" INSERT INTO forecast_result_cache ") .append(" SELECT * FROM forecast_result ") - .append(" WHERE result_valid_time between :startTime and :endTime ") + .append(" WHERE valid_time_start between :startTime and :endTime ") .append(" AND forecast_configuration_id IN (") .append(" SELECT forecast_configuration_id ") .append(" FROM public.forecast_configuration ") @@ -862,7 +862,7 @@ public class ForecastBean { Map<String, Integer> resultDailyAggregate = new HashMap<>(); for(ForecastResult result:results) { - String dayStamp = format.format(result.getResultValidTime()); + String dayStamp = format.format(result.getValidTimeStart()); Integer currentWorstCode = resultDailyAggregate.get(dayStamp); resultDailyAggregate.put(dayStamp, Math.max( @@ -982,7 +982,7 @@ public class ForecastBean { " AND location_point_of_interest_id=:locationPointOfInterestId \n" + (cropOrganismIds != null && ! cropOrganismIds.isEmpty() ? " AND crop_organism_id IN (" + StringUtils.join(cropOrganismIds, ",") + ") " : "") + ")\n" + - "AND result_valid_time between :midnight AND :nextMidnight"; + "AND valid_time_start between :midnight AND :nextMidnight"; //System.out.println(poi.getName() + " SQL=" + sql); Query q = em.createNativeQuery(sql); q.setParameter("locationPointOfInterestId", poi.getPointOfInterestId()); @@ -1021,7 +1021,7 @@ public class ForecastBean { mappedForecastConfigurations.put(forecastConfiguration.getForecastConfigurationId(), forecastConfiguration); Query q = em.createNativeQuery( "SELECT * FROM forecast_result WHERE forecast_configuration_id = :forecastConfigurationId " - + "AND result_valid_time = (SELECT max(result_valid_time) FROM forecast_result WHERE forecast_configuration_id = :forecastConfigurationId)", + + "AND valid_time_start = (SELECT max(valid_time_start) FROM forecast_result WHERE forecast_configuration_id = :forecastConfigurationId)", ForecastResult.class ); q.setParameter("forecastConfigurationId", forecastConfiguration.getForecastConfigurationId()); 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 c91c02aa..51c98429 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,7 @@ 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.vividsolutions.jts.geom.Geometry; /** @@ -55,12 +56,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; @Table(name = "forecast_result") @XmlRootElement @NamedQueries({ - @NamedQuery(name = "ForecastResult.findAll", query = "SELECT f FROM ForecastResult f ORDER BY f.resultValidTime ASC"), - @NamedQuery(name = "ForecastResult.findByForecastResultId", query = "SELECT f FROM ForecastResult f WHERE f.forecastResultId = :forecastResultId ORDER BY f.resultValidTime ASC"), - @NamedQuery(name = "ForecastResult.findByForecastConfigurationId", query = "SELECT f FROM ForecastResult f WHERE f.forecastConfigurationId = :forecastConfigurationId ORDER BY f.resultValidTime ASC"), - @NamedQuery(name = "ForecastResult.findByForecastConfigurationIdAndPeriod", query = "SELECT f FROM ForecastResult f WHERE f.forecastConfigurationId = :forecastConfigurationId AND f.resultValidTime BETWEEN :timeStart AND :timeEnd ORDER BY f.resultValidTime ASC"), - @NamedQuery(name = "ForecastResult.findByResultValidTime", query = "SELECT f FROM ForecastResult f WHERE f.resultValidTime = :resultValidTime ORDER BY f.resultValidTime ASC"), - @NamedQuery(name = "ForecastResult.findByWarningStatus", query = "SELECT f FROM ForecastResult f WHERE f.warningStatus = :warningStatus ORDER BY f.resultValidTime ASC")}) + @NamedQuery(name = "ForecastResult.findAll", query = "SELECT f FROM ForecastResult f ORDER BY f.validTimeStart ASC"), + @NamedQuery(name = "ForecastResult.findByForecastResultId", query = "SELECT f FROM ForecastResult f WHERE f.forecastResultId = :forecastResultId ORDER BY f.validTimeStart ASC"), + @NamedQuery(name = "ForecastResult.findByForecastConfigurationId", query = "SELECT f FROM ForecastResult f WHERE f.forecastConfigurationId = :forecastConfigurationId ORDER BY f.validTimeStart ASC"), + @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")}) public class ForecastResult implements Serializable, Comparable{ private static final long serialVersionUID = 1L; @Id @@ -68,9 +69,12 @@ public class ForecastResult implements Serializable, Comparable{ @Basic(optional = false) @Column(name = "forecast_result_id") private Long forecastResultId; - @Column(name = "result_valid_time") + @Column(name = "valid_time_start") @Temporal(TemporalType.TIMESTAMP) - private Date resultValidTime; + private Date validTimeStart; + @Column(name = "valid_time_end") + @Temporal(TemporalType.TIMESTAMP) + private Date validTimeEnd; @Column(name = "warning_status") private Integer warningStatus; @Column(name = "all_values") @@ -79,6 +83,8 @@ public class ForecastResult implements Serializable, Comparable{ //@JoinColumn(name="forecast_configuration_id",referencedColumnName="forecast_configuration_id") @Column(name = "forecast_configuration_id") private Long forecastConfigurationId; + @Column(name = "valid_geometry", columnDefinition = "Geometry") + private Geometry validGeometry; public ForecastResult() { @@ -88,7 +94,7 @@ public class ForecastResult implements Serializable, Comparable{ try { this.forecastConfigurationId = forecastConfigurationId; this.allValues = new ObjectMapper().writeValueAsString(result.getAllValues()); - this.resultValidTime = result.getResultValidTime(); + this.validTimeStart = result.getValidTimeStart(); this.warningStatus = result.getWarningStatus(); } catch (IOException ex) { Logger.getLogger(ForecastResult.class.getName()).log(Level.SEVERE, null, ex); @@ -107,12 +113,12 @@ public class ForecastResult implements Serializable, Comparable{ this.forecastResultId = forecastResultId; } - public Date getResultValidTime() { - return resultValidTime; + public Date getValidTimeStart() { + return validTimeStart; } - public void setResultValidTime(Date resultValidTime) { - this.resultValidTime = resultValidTime; + public void setValidTimeStart(Date validTimeStart) { + this.validTimeStart = validTimeStart; } public Integer getWarningStatus() { @@ -196,7 +202,7 @@ public class ForecastResult implements Serializable, Comparable{ public int compareTo(ForecastResult other) { - return this.getResultValidTime().compareTo(other.getResultValidTime()); + return this.getValidTimeStart().compareTo(other.getValidTimeStart()); } /** @@ -218,5 +224,33 @@ public class ForecastResult implements Serializable, Comparable{ public Set<String> getKeys() { return this.getAllValuesAsMap().keySet(); } + + /** + * @return the validGeometry + */ + public Geometry getValidGeometry() { + return validGeometry; + } + + /** + * @param validGeometry the validGeometry to set + */ + public void setValidGeometry(Geometry validGeometry) { + this.validGeometry = validGeometry; + } + + /** + * @return the validTimeEnd + */ + public Date getValidTimeEnd() { + return validTimeEnd; + } + + /** + * @param validTimeEnd the validTimeEnd to set + */ + public void setValidTimeEnd(Date validTimeEnd) { + this.validTimeEnd = validTimeEnd; + } } diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java index 28a18dd1..971ac29c 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java @@ -204,7 +204,7 @@ public class MessagingBean { List<ForecastConfiguration> forecastConfigurations = em.createNativeQuery( "SELECT * FROM public.forecast_configuration f " + "WHERE f.forecast_configuration_id IN (" - + " SELECT forecast_configuration_id FROM forecast_result WHERE result_valid_time between :dateStart AND :dateEnd" + + " SELECT forecast_configuration_id FROM forecast_result WHERE valid_time_start between :dateStart AND :dateEnd" + ")", ForecastConfiguration.class ) @@ -229,7 +229,7 @@ public class MessagingBean { // If you find a NEW GREEN_TO_YELLOW event first, add it and search for a new TO_RED event for(ForecastResult result:results) { - if(result.getResultValidTime().before(systemTime) || result.getResultValidTime().after(in10Days)) + if(result.getValidTimeStart().before(systemTime) || result.getValidTimeStart().after(in10Days)) { continue; } @@ -260,7 +260,7 @@ public class MessagingBean { ForecastNotificationLogPK pk = new ForecastNotificationLogPK( conf.getForecastConfigurationId(), currentEvent.getForecastEventId(), - result.getResultValidTime() + result.getValidTimeStart() ); // Could not find same event. We persist it so we won't diff --git a/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java b/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java index 34eec774..32042161 100755 --- a/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java +++ b/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java @@ -448,11 +448,11 @@ public class RoughageService { Map<Date, Result> resultBucket = new HashMap<>(); for(Result result:results) { - resultBucket.put(result.getResultValidTime(), result); + resultBucket.put(result.getValidTimeStart(), result); } for(Result normalDataResult:normalDataResults) { - Result result = resultBucket.get(normalDataResult.getResultValidTime()); + Result result = resultBucket.get(normalDataResult.getValidTimeStart()); if(result != null) { String[] resultKeys = {"Avling", "Beregnet MSC","NDF","INDF","Råprotein","FEm"}; diff --git a/src/test/java/no/nibio/vips/util/weather/dnmipointweb/DMIPointWebDataParserTest.java b/src/test/java/no/nibio/vips/util/weather/dnmipointweb/DMIPointWebDataParserTest.java index 10d9b489..83155f8f 100644 --- a/src/test/java/no/nibio/vips/util/weather/dnmipointweb/DMIPointWebDataParserTest.java +++ b/src/test/java/no/nibio/vips/util/weather/dnmipointweb/DMIPointWebDataParserTest.java @@ -63,7 +63,7 @@ public class DMIPointWebDataParserTest { System.out.println("getData"); DMIPointWebDataParser instance = new DMIPointWebDataParser(); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Copenhagen")); - cal.set(2017, Calendar.JULY, 5, 0, 0, 0); + cal.set(2000, Calendar.JULY, 5, 0, 0, 0); Date dateFrom = cal.getTime(); cal.set(Calendar.DATE, 15); Date dateTo = cal.getTime(); -- GitLab