From 38d92be58609f8fdde419d1bde4537ebb3a25399 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@bioforsk.no>
Date: Mon, 25 Aug 2014 15:11:52 +0200
Subject: [PATCH] Outsourced weather data validation  (at least some of it)

---
 .../model/applescabmodel/AppleScabModel.java  | 39 +++----------------
 1 file changed, 5 insertions(+), 34 deletions(-)

diff --git a/src/main/java/no/bioforsk/vips/model/applescabmodel/AppleScabModel.java b/src/main/java/no/bioforsk/vips/model/applescabmodel/AppleScabModel.java
index a49df19..7ba5f20 100644
--- a/src/main/java/no/bioforsk/vips/model/applescabmodel/AppleScabModel.java
+++ b/src/main/java/no/bioforsk/vips/model/applescabmodel/AppleScabModel.java
@@ -320,47 +320,18 @@ public class AppleScabModel extends I18nImpl implements Model{
             }
         }
         
+        // Basic time series health check
         WeatherUtil wUtil = new WeatherUtil();
         
-        // Must be of same length, 
-        if(this.TM.size() != this.RR.size() || this.TM.size() != BT.size())
+        try
         {
-            throw new ConfigValidationException("Unequal length of weather parameter lists. "
-                    + "Temperature list size = " + this.TM.size()
-                    + ", precipitation list size = " + this.RR.size()
-                    + ", leaf wetness list size = " + this.BT.size()
-            );
+            wUtil.isHomogenousTimeSeries(this.TM, this.RR, this.BT);
         }
-        
-        // Must be starting at same time
-        if(
-                this.TM.get(0).getTimeMeasured().compareTo(this.RR.get(0).getTimeMeasured()) != 0
-                || this.TM.get(0).getTimeMeasured().compareTo(this.BT.get(0).getTimeMeasured()) != 0
-        )
+        catch(WeatherObservationListException ex)
         {
-            throw new ConfigValidationException("Weather parameter lists do not start at same time "
-                    + "Temperature list starts at = " + this.TM.get(0).getTimeMeasured()
-                    + ", precipitation list starts at = " + this.RR.get(0).getTimeMeasured()
-                    + ", leaf wetness list starts at = " + this.BT.get(0).getTimeMeasured()
-            );
+            throw new ConfigValidationException(ex.getMessage());
         }
         
-        // Must be ending at same time
-        int lastIndex = this.TM.size() -1;
-        if(
-                this.TM.get(lastIndex).getTimeMeasured().compareTo(this.RR.get(lastIndex).getTimeMeasured()) != 0
-                || this.TM.get(lastIndex).getTimeMeasured().compareTo(this.BT.get(lastIndex).getTimeMeasured()) != 0
-        )
-        {
-            throw new ConfigValidationException("Weather parameter lists do not end at same time "
-                    + "Temperature list ends at = " + this.TM.get(lastIndex).getTimeMeasured()
-                    + ", precipitation list ends at = " + this.RR.get(lastIndex).getTimeMeasured()
-                    + ", leaf wetness list ends at = " + this.BT.get(lastIndex).getTimeMeasured()
-            );
-        }
-        
-        
-        
         // If all that's OK, chop of all hour values exceeding the last full day
         // of hourly data
         this.TM = wUtil.cutTrailingHourlyValues(this.TM, timeZone);
-- 
GitLab