Index: Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs =================================================================== diff -u -rba9ec373e2589d5ab99c881af5a32f387ef93c56 -r485254f159763215292faa9bc7f5251f2730ce90 --- Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs (.../StructuresParameterRowsValidator.cs) (revision ba9ec373e2589d5ab99c881af5a32f387ef93c56) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs (.../StructuresParameterRowsValidator.cs) (revision 485254f159763215292faa9bc7f5251f2730ce90) @@ -31,11 +31,6 @@ /// public static class StructuresParameterRowsValidator { - private const string alphanumericalValueColumn = "AlphanumeriekeWaarde"; - private const string numericalValueColumn = "NumeriekeWaarde"; - private const string varianceValueColumn = "Standarddeviatie.variance"; - private const string varianceTypeColumn = "Boolean"; - /// /// Denotes a small enough value, taking possible rounding into account, that the /// value is too close to the value 0.0 that makes a coefficient of variation @@ -284,38 +279,64 @@ private static List DoubleRule(StructuresParameterRow row) { + return ValidateDoubleParameter(row, StructureFilesKeywords.NumericalValueColumnName); + } + + private static List PositiveDoubleRule(StructuresParameterRow row) + { + return ValidatePositiveDoubleParameter(row, StructureFilesKeywords.NumericalValueColumnName); + } + + private static List ValidateDoubleParameter(StructuresParameterRow row, string columnName) + { var messages = new List(); - double value = row.NumericalValue; + double value = GetValueFromRowForColumn(row, columnName); if (double.IsNaN(value) || double.IsInfinity(value)) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_probability_out_of_range, row.LineNumber, numericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ValidateDoubleParameter_ParameterId_0_Line_1_ColumnName_2_not_number, + row.ParameterId, row.LineNumber, columnName)); } return messages; } - private static List PositiveDoubleRule(StructuresParameterRow row) + private static List ValidatePositiveDoubleParameter(StructuresParameterRow row, string columnName) { - List messages = new List(); + var messages = new List(); - double value = row.NumericalValue; + double value = GetValueFromRowForColumn(row, columnName); if (double.IsNaN(value) || double.IsInfinity(value) || value < 0) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_probability_out_of_range, row.LineNumber, numericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ValidatePositiveDoubleParameter_ParameterId_0_Line_1_ColumnName_2_not_positive_number, + row.ParameterId, row.LineNumber, columnName)); } return messages; } + private static double GetValueFromRowForColumn(StructuresParameterRow row, string columnName) + { + switch (columnName) + { + case StructureFilesKeywords.NumericalValueColumnName: + return row.NumericalValue; + case StructureFilesKeywords.VariationValueColumnName: + return row.VarianceValue; + default: + throw new NotImplementedException(); + } + } + private static List ProbabilityRule(StructuresParameterRow row) { var messages = new List(); double mean = row.NumericalValue; if (double.IsNaN(mean) || double.IsInfinity(mean) || mean <= 0 || mean > 1) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_probability_out_of_range, row.LineNumber, numericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ProbabilityRule_ParameterId_0_Line_1_ColumnName_2_probability_out_of_range, + row.ParameterId, row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); } return messages; @@ -346,38 +367,35 @@ var messages = new List(); double mean = row.NumericalValue; - if (double.IsNaN(mean) || double.IsInfinity(mean) || (meanMustBeGreaterThanZero && mean <= 0)) - { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_invalid, row.LineNumber, numericalValueColumn)); - } + var numericalValueColumn1 = StructureFilesKeywords.NumericalValueColumnName; + messages.AddRange(meanMustBeGreaterThanZero ? + ValidatePositiveDoubleParameter(row, numericalValueColumn1) : + ValidateDoubleParameter(row, numericalValueColumn1)); VarianceType type = row.VarianceType; if (type != VarianceType.StandardDeviation && type != VarianceType.CoefficientOfVariation) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_invalid, row.LineNumber, varianceTypeColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_invalid_variancetype_value, + row.ParameterId, row.LineNumber, StructureFilesKeywords.VariationTypeColumnName)); } - double variance = row.VarianceValue; - if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0) - { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_invalid, row.LineNumber, varianceValueColumn)); - } + messages.AddRange(ValidatePositiveDoubleParameter(row, StructureFilesKeywords.VariationValueColumnName)); double absoluteMean = Math.Abs(mean); if (variationAsStandardDeviation) { if (row.VarianceType == VarianceType.CoefficientOfVariation && absoluteMean < valueTooCloseToZero) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Mean_on_Line_0_ColumnName_1_causes_unreliable_variation_value_conversion, - row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_mean_too_small_for_reliable_variation_value_conversion, + row.ParameterId, row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); } } else { if (row.VarianceType == VarianceType.StandardDeviation && absoluteMean < valueTooCloseToZero) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Mean_on_Line_0_ColumnName_1_causes_unreliable_variation_value_conversion, - row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_mean_too_small_for_reliable_variation_value_conversion, + row.ParameterId, row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); } } @@ -391,7 +409,8 @@ double orientation = row.NumericalValue; if (!(orientation >= 0 && orientation <= 360)) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_orientation_out_of_range, row.LineNumber, numericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_orientation_out_of_range, + row.ParameterId, row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); } return messages; @@ -401,20 +420,27 @@ { var messages = new List(); double value = row.NumericalValue; - if (value < 0) + if (!IsValueWholeNumber(value) || value < 0) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_cannot_be_smaller_than_zero, row.LineNumber, numericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_value_must_be_positive_whole_number, + row.ParameterId, row.LineNumber, StructureFilesKeywords.NumericalValueColumnName)); } return messages; } + private static bool IsValueWholeNumber(double value) + { + return (value%1) < double.Epsilon; + } + private static List ClosingStructureInflowModelTypeRule(StructuresParameterRow row) { var messages = new List(); string value = row.AlphanumericValue.ToLower(); if (!closingStructureInflowModelTypeRuleKeywords.Contains(value)) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_invalid, row.LineNumber, alphanumericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_structure_type_invalid, + row.ParameterId, row.LineNumber, StructureFilesKeywords.AlphanumericalValueColumnName)); } return messages; } @@ -425,7 +451,8 @@ string value = row.AlphanumericValue.ToLower(); if (!stabilityPointStructureInflowModelTypeRuleKeywords.Contains(value)) { - messages.Add(string.Format(Resources.StructuresParameterRowsValidator_Line_0_ColumnName_1_value_invalid, row.LineNumber, alphanumericalValueColumn)); + messages.Add(string.Format(Resources.StructuresParameterRowsValidator_ParameterId_0_Line_1_ColumnName_2_structure_type_invalid, + row.ParameterId, row.LineNumber, StructureFilesKeywords.AlphanumericalValueColumnName)); } return messages; }