Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs
===================================================================
diff -u -rc4f75aa39431df092fc41bd13c1bd66c52b9e36e -r6d67c42595915b7385a6cf2f13885abc9ed1fad0
--- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision c4f75aa39431df092fc41bd13c1bd66c52b9e36e)
+++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/IllustrationPoints/IllustrationPointsParser.cs (.../IllustrationPointsParser.cs) (revision 6d67c42595915b7385a6cf2f13885abc9ed1fad0)
@@ -29,6 +29,9 @@
namespace Ringtoets.HydraRing.Calculation.Parsers.IllustrationPoints
{
+ ///
+ /// Parser for transforming values for illustration points from the database into a data structure.
+ ///
public class IllustrationPointsParser : IHydraRingFileParser
{
private readonly Dictionary> faultTreeStochasts = new Dictionary>();
@@ -37,11 +40,15 @@
private readonly Dictionary> subMechanismStochasts = new Dictionary>();
private readonly Dictionary subMechanismBetaValues = new Dictionary();
private readonly Dictionary> subMechanismResults = new Dictionary>();
- public GeneralResult Output = new GeneralResult();
private IDictionary windDirections;
private IDictionary closingSituations;
+ ///
+ /// The result of parsing the illustration points in the Hydra-Ring database.
+ ///
+ public readonly GeneralResult Output = new GeneralResult();
+
public void Parse(string workingDirectory, int sectionId)
{
string query = string.Concat(
@@ -102,18 +109,18 @@
private void SetSubMechanismAsRootIllustrationPoint()
{
- var rootIllustrationPoints = new List();
+ var rootIllustrationPoints = new Dictionary();
foreach (Tuple windDirectionClosingSituation in GetAllWindDirectionClosingSituationCombinations())
{
- var illustrationPoint = new SubmechanismIllustrationPoint
+ var illustrationPoint = new SubMechanismIllustrationPoint
{
- Beta = subMechanismBetaValues.First().Value,
- ClosingSituation = windDirectionClosingSituation.Item4,
- WindDirection = windDirectionClosingSituation.Item2
+ Beta = subMechanismBetaValues.First().Value
};
AddRange(illustrationPoint.Results, subMechanismResults.First().Value);
AddRange(illustrationPoint.Stochasts, subMechanismStochasts.First().Value);
- rootIllustrationPoints.Add(new IllustrationPointTreeNode(illustrationPoint));
+
+ rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] =
+ new IllustrationPointTreeNode(illustrationPoint);
}
Output.IllustrationPoints = rootIllustrationPoints;
}
@@ -227,42 +234,53 @@
private void ParseFaultTree(HydraRingDatabaseReader reader)
{
-
IEnumerable> windDirectionClosingSituations =
GetAllWindDirectionClosingSituationCombinations();
Dictionary[] readFaultTrees = GetIterator(reader).TakeWhile(r => r != null).ToArray();
if (readFaultTrees.Length > 0)
{
- var rootIllustrationPoints = new List();
+ List> results = CreateResultTuples(readFaultTrees);
- var results = new List>();
-
- foreach (Dictionary readFaultTree in readFaultTrees)
- {
- object parentIdObject = readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeParentId];
- int? parentId = parentIdObject != DBNull.Value ? Convert.ToInt32(parentIdObject) : (int?) null;
- int id = Convert.ToInt32(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeId]);
- string type = Convert.ToString(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeType]);
- string combine = Convert.ToString(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeCombine]);
-
- results.Add(Tuple.Create(
- parentId,
- id,
- type == "faulttree" ? typeof(FaultTreeIllustrationPoint) : typeof(SubmechanismIllustrationPoint),
- combine == "and" ? CombinationType.And : CombinationType.Or));
- }
-
+ var rootIllustrationPoints = new Dictionary();
foreach (Tuple windDirectionClosingSituation in windDirectionClosingSituations)
{
Tuple root = results.Single(r => !r.Item1.HasValue);
- rootIllustrationPoints.Add(BuildFaultTree(windDirectionClosingSituation, root.Item2, root.Item4, results));
+
+ rootIllustrationPoints[CreateFaultTreeKey(windDirectionClosingSituation)] =
+ BuildFaultTree(windDirectionClosingSituation, root.Item2, root.Item4, results);
}
Output.IllustrationPoints = rootIllustrationPoints;
}
}
+ private static List> CreateResultTuples(Dictionary[] readFaultTrees)
+ {
+ var results = new List>();
+
+ foreach (Dictionary readFaultTree in readFaultTrees)
+ {
+ object parentIdObject = readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeParentId];
+ int? parentId = parentIdObject != DBNull.Value ? Convert.ToInt32(parentIdObject) : (int?) null;
+ int id = Convert.ToInt32(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeId]);
+ string type = Convert.ToString(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeType]);
+ string combine = Convert.ToString(readFaultTree[IllustrationPointsDatabaseConstants.RecursiveFaultTreeCombine]);
+
+ results.Add(Tuple.Create(
+ parentId,
+ id,
+ type == "faulttree" ? typeof(FaultTreeIllustrationPoint) : typeof(SubMechanismIllustrationPoint),
+ combine == "and" ? CombinationType.And : CombinationType.Or));
+ }
+ return results;
+ }
+
+ private static WindDirectionClosingSituation CreateFaultTreeKey(Tuple windDirectionClosingSituation)
+ {
+ return new WindDirectionClosingSituation(windDirectionClosingSituation.Item2, windDirectionClosingSituation.Item4);
+ }
+
private IEnumerable> GetAllWindDirectionClosingSituationCombinations()
{
return windDirections.SelectMany(windDirection =>
@@ -279,8 +297,6 @@
var dataKey = new ThreeKeyIndex(windDirectionClosingSituation.Item1, windDirectionClosingSituation.Item3, faultTreeId);
var illustrationPoint = new FaultTreeIllustrationPoint
{
- WindDirection = windDirectionClosingSituation.Item2,
- ClosingSituation = windDirectionClosingSituation.Item4,
Beta = faultTreeBetaValues[dataKey],
Combine = combinationType
};
@@ -302,10 +318,8 @@
private IllustrationPointTreeNode BuildSubMechanism(Tuple windDirectionClosingSituation, int subMechanismId)
{
var dataKey = new ThreeKeyIndex(windDirectionClosingSituation.Item1, windDirectionClosingSituation.Item3, subMechanismId);
- var illustrationPoint = new SubmechanismIllustrationPoint
+ var illustrationPoint = new SubMechanismIllustrationPoint
{
- WindDirection = windDirectionClosingSituation.Item2,
- ClosingSituation = windDirectionClosingSituation.Item4,
Beta = subMechanismBetaValues[dataKey]
};
if (subMechanismStochasts.ContainsKey(dataKey))
@@ -433,41 +447,5 @@
&& illustrationPointId == other.illustrationPointId;
}
}
-
- private struct WindDirectionClosingSituation
- {
- private readonly WindDirection windDirection;
- private readonly string closingSituation;
-
- public WindDirectionClosingSituation(WindDirection windDirection, string closingSituation)
- {
- this.windDirection = windDirection;
- this.closingSituation = closingSituation;
- }
-
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
- return obj is WindDirectionClosingSituation
- && Equals((WindDirectionClosingSituation) obj);
- }
-
- public override int GetHashCode()
- {
- unchecked
- {
- return ((windDirection?.GetHashCode() ?? 0) * 397) ^ (closingSituation?.GetHashCode() ?? 0);
- }
- }
-
- private bool Equals(WindDirectionClosingSituation other)
- {
- return Equals(windDirection, other.windDirection)
- && string.Equals(closingSituation, other.closingSituation);
- }
- }
}
}
\ No newline at end of file