Skip to content
Snippets Groups Projects
Commit dd850cdb authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Allowing for just one of height / MSC to be set of the optimization parameters

Avoiding some ConcurrentModificationExceptions by copying list 
parent 7571ac60
Branches
No related tags found
No related merge requests found
...@@ -65,6 +65,10 @@ public class OptimizationObservation implements Comparable{ ...@@ -65,6 +65,10 @@ public class OptimizationObservation implements Comparable{
*/ */
public Double getAvling() public Double getAvling()
{ {
if(this.getHeight() == null)
{
return null;
}
return 34.86f + 0.017f * (Double) Math.pow(this.getHeight(), 2) + 10.21f * this.getHeight(); return 34.86f + 0.017f * (Double) Math.pow(this.getHeight(), 2) + 10.21f * this.getHeight();
} }
......
...@@ -236,8 +236,7 @@ public class RoughageNutritionModel implements Model { ...@@ -236,8 +236,7 @@ public class RoughageNutritionModel implements Model {
@Override @Override
public void setConfiguration(ModelConfiguration config) throws ConfigValidationException { public void setConfiguration(ModelConfiguration config) throws ConfigValidationException {
/* /*
// Daily values // Daily values
List<WeatherObservation> luftTemperatur, TM List<WeatherObservation> luftTemperatur, TM
...@@ -456,27 +455,36 @@ public class RoughageNutritionModel implements Model { ...@@ -456,27 +455,36 @@ public class RoughageNutritionModel implements Model {
} }
} }
private List<OptimizationObservation> parseOptimizationInfo(List<String> optimizationInfo, TimeZone timeZone) { private List<OptimizationObservation> parseOptimizationInfo(List<String> optimizationInfo, TimeZone timeZone) throws ConfigValidationException {
List<OptimizationObservation> retVal = new ArrayList<>(); List<OptimizationObservation> retVal = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(timeZone); format.setTimeZone(timeZone);
for(String line:optimizationInfo) for(String line:optimizationInfo)
{ {
String[] parts = line.split(","); // The -1 as second parameter ensures that trailing delimiters will not be discarded,
// Thus avoiding ArrayIndexOutOfBoundsException when parsing
// E.g. "2015-06-02,2,3,,,,"
String[] parts = line.split(",",-1);
try try
{ {
OptimizationObservation optObs = new OptimizationObservation( OptimizationObservation optObs = new OptimizationObservation(
format.parse(parts[0]), // Date format.parse(parts[0]), // Date
Double.parseDouble(parts[1]), // Height (! parts[1].trim().isEmpty() ? Double.parseDouble(parts[1]) : null), // Height
Double.parseDouble(parts[2]), // MSC (! parts[2].trim().isEmpty() ? Double.parseDouble(parts[2]) : null), // MSC
Double.parseDouble(parts[4]), // NDF (! parts[4].trim().isEmpty() ? Double.parseDouble(parts[4]) : null), // NDF
Double.parseDouble(parts[5]), // INDF (! parts[5].trim().isEmpty() ? Double.parseDouble(parts[5]) : null), // INDF
Double.parseDouble(parts[6]), // Raw protein (! parts[6].trim().isEmpty() ? Double.parseDouble(parts[6]) : null), // Raw protein
Double.parseDouble(parts[3]) // FEm (! parts[3].trim().isEmpty() ? Double.parseDouble(parts[3]) : null) // FEm
); );
if(optObs.getHeight() == null && optObs.getMSC() == null)
{
throw new ConfigValidationException("Optimization error: Height and/or MSC must be set");
}
retVal.add(optObs); retVal.add(optObs);
} }
catch(ArrayIndexOutOfBoundsException | ParseException ex) { catch(ArrayIndexOutOfBoundsException | ParseException ex) {
throw new ConfigValidationException("There's something wrong with this line of optimization observations: " +
line + " . The error is: " + ex.getClass() + ":" + ex.getMessage());
} }
} }
return retVal; return retVal;
......
...@@ -28,6 +28,7 @@ import com.ibm.icu.util.Calendar; ...@@ -28,6 +28,7 @@ import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.TimeZone; import com.ibm.icu.util.TimeZone;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
...@@ -87,6 +88,9 @@ public class RoughageNutritionModelTest { ...@@ -87,6 +88,9 @@ public class RoughageNutritionModelTest {
config.setConfigParameter("firstHarvest", cal.getTime()); config.setConfigParameter("firstHarvest", cal.getTime());
config.setConfigParameter("soilType", RoughageNutritionModel.JORDTYPE_SAND); config.setConfigParameter("soilType", RoughageNutritionModel.JORDTYPE_SAND);
config.setConfigParameter("cloverShare", RoughageNutritionModel.ENGSAMMENSETNING_KLOEVERANDEL_LITEN); config.setConfigParameter("cloverShare", RoughageNutritionModel.ENGSAMMENSETNING_KLOEVERANDEL_LITEN);
String[] optimizationInfoLines = {"2015-06-02,2,3,,,,"};
List<String> optimizationInfo = Arrays.asList(optimizationInfoLines);
config.setConfigParameter("optimizationInfo", optimizationInfo);
RoughageNutritionModel instance = new RoughageNutritionModel(); RoughageNutritionModel instance = new RoughageNutritionModel();
instance.setConfiguration(config); instance.setConfiguration(config);
//List<Result> expResult = null; //List<Result> expResult = null;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment