Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r571 -r574 --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 571) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 574) @@ -67,7 +67,7 @@ private static void ValidateInput(Input input) { if (input == null) - { + { throw new NullReferenceException("No input defined"); } if (input.Locations == null) @@ -112,31 +112,12 @@ { for (int i = 0; i < inputSurfaceLines.Length; i++) { - var surfaceLine = new SurfaceLine2(); var inputSurfaceLine = inputSurfaceLines[i]; - surfaceLine.Name = inputSurfaceLine.Name; - surfaceLine.CharacteristicPoints.Geometry = surfaceLine.Geometry; - AddPointsToSurfaceLine(inputSurfaceLine, surfaceLine); + var surfaceLine = FillDamUiFromXmlHelper.ConvertXmlSurfaceLineToSurfaceLine2(inputSurfaceLine); dikeSurfaceLines.Add(surfaceLine); } } - private static void AddPointsToSurfaceLine(SurfaceLine inputSurfaceLine, SurfaceLine2 surfaceLine) - { - surfaceLine.Geometry = new LocalizedGeometryPointString(); - for (int j = 0; j < inputSurfaceLine.Points.Length; j++) - { - var inputPoint = inputSurfaceLine.Points[j]; - var geometryPoint = new GeometryPoint() - { - X = inputPoint.X, - Y = 0.0, - Z = inputPoint.Z - }; - surfaceLine.AddCharacteristicPoint(geometryPoint, ConversionHelper.ConvertToDamPointType(inputPoint.PointType)); - } - } - private static void TransferLocations(DamEngine.Io.XmlInput.Location[] inputLocations, IList dikeLocations, IList dikeSurfaceLines2) { for (int i = 0; i < inputLocations.Length; i++) @@ -192,11 +173,11 @@ designScenario.RequiredSafetyFactorPiping = (inputLocationDesignScenario.RequiredSafetyFactorPipingSpecified ? (double?)inputLocationDesignScenario.RequiredSafetyFactorPiping : null); location.Scenarios.Add(designScenario); - } - } - dikeLocations.Add(location); } } + dikeLocations.Add(location); + } +} private static void TransferSoilProfiles1D(DamEngine.Io.XmlInput.SoilProfile1D[] inputSoilProfiles1D, IList dikeSoilProfiles, SoilList soils) { @@ -208,20 +189,20 @@ var inputSoilProfile1D = inputSoilProfiles1D[i]; soilProfile1D.Name = inputSoilProfile1D.Name; soilProfile1D.BottomLevel = inputSoilProfile1D.BottomLevel; - AddLayers(inputSoilProfile1D, soilProfile1D, soils); + AddLayers1D(inputSoilProfile1D, soilProfile1D, soils); dikeSoilProfiles.Add(soilProfile1D); } } } - private static void AddLayers(DamEngine.Io.XmlInput.SoilProfile1D inputSoilProfile1D, SoilProfile1D soilProfile1D, SoilList soils) + private static void AddLayers1D(DamEngine.Io.XmlInput.SoilProfile1D inputSoilProfile1D, SoilProfile1D soilProfile1D, SoilList soils) { if (inputSoilProfile1D != null) { - for (int i = 0; i < inputSoilProfile1D.Layers.Length; i++) + for (int i = 0; i < inputSoilProfile1D.Layers1D.Length; i++) { var layer = new SoilLayer1D(); - var inputLayer = inputSoilProfile1D.Layers[i]; + var inputLayer = inputSoilProfile1D.Layers1D[i]; layer.Name = inputLayer.Name; layer.Soil = soils.GetSoilByName(inputLayer.SoilName); layer.TopLevel = inputLayer.TopLevel; Index: dam clients/DamUI/trunk/src/Dam/Data/Deltares.Dam.Data.csproj =================================================================== diff -u -r560 -r574 --- dam clients/DamUI/trunk/src/Dam/Data/Deltares.Dam.Data.csproj (.../Deltares.Dam.Data.csproj) (revision 560) +++ dam clients/DamUI/trunk/src/Dam/Data/Deltares.Dam.Data.csproj (.../Deltares.Dam.Data.csproj) (revision 574) @@ -190,6 +190,7 @@ + Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlHelper.cs =================================================================== diff -u --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlHelper.cs (revision 0) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlHelper.cs (revision 574) @@ -0,0 +1,61 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of the application DAM - UI. +// +// DAM - UI is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Deltares.Geometry; +using Deltares.Geotechnics.GeotechnicalGeometry; +using Deltares.Geotechnics.SurfaceLines; +using SurfaceLine = Deltares.DamEngine.Io.XmlInput.SurfaceLine; + +namespace Deltares.Dam.Data.DamEngineIo +{ + public class FillDamUiFromXmlHelper + { + public static SurfaceLine2 ConvertXmlSurfaceLineToSurfaceLine2(SurfaceLine inputSurfaceLine) + { + var surfaceLine = new SurfaceLine2(); + surfaceLine.Name = inputSurfaceLine.Name; + surfaceLine.CharacteristicPoints.Geometry = surfaceLine.Geometry; + AddPointsToSurfaceLine(inputSurfaceLine, surfaceLine); + return surfaceLine; + } + + private static void AddPointsToSurfaceLine(SurfaceLine inputSurfaceLine, SurfaceLine2 surfaceLine) + { + surfaceLine.Geometry = new LocalizedGeometryPointString(); + for (int j = 0; j < inputSurfaceLine.Points.Length; j++) + { + var inputPoint = inputSurfaceLine.Points[j]; + var geometryPoint = new GeometryPoint() + { + X = inputPoint.X, + Y = 0.0, + Z = inputPoint.Z + }; + surfaceLine.AddCharacteristicPoint(geometryPoint, ConversionHelper.ConvertToDamPointType(inputPoint.PointType)); + } + } + } +} Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r571 -r574 --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 571) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 574) @@ -237,7 +237,7 @@ { Name = soilProfile1D.Name, BottomLevel = soilProfile1D.BottomLevel, - Layers = new SoilProfile1DLayer[soilProfile1D.LayerCount] + Layers1D = new SoilProfile1DLayer1D[soilProfile1D.LayerCount] }; AddLayers1D(soilProfile1D, inputSoilProfile1D); inputSoilProfiles1D[i] = inputSoilProfile1D; @@ -249,7 +249,7 @@ for (int i = 0; i < soilProfile1D.LayerCount; i++) { var layer = soilProfile1D.Layers[i]; - var inputLayer = new SoilProfile1DLayer + var inputLayer = new SoilProfile1DLayer1D { Name = layer.Name, SoilName = layer.Soil.Name, @@ -258,7 +258,7 @@ WaterpressureInterpolationModel = ConversionHelper.ConvertToInputWaterpressureInterpolationModel( layer.WaterpressureInterpolationModel) }; - inputSoilProfile1D.Layers[i] = inputLayer; + inputSoilProfile1D.Layers1D[i] = inputLayer; } } private static void TransferSegments(IList segments, DamEngine.Io.XmlInput.Segment[] inputSegments) Index: dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs =================================================================== diff -u -r531 -r574 --- dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 531) +++ dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 574) @@ -1,4 +1,5 @@ // Copyright (C) Stichting Deltares 2017. All rights reserved. +using System.Collections.Generic; // // This file is part of the application DAM - UI. // @@ -19,12 +20,116 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using Deltares.Dam.Data; +using Deltares.Dam.Data.DamEngineIo; +using Deltares.DamEngine.Io; +using Deltares.DamEngine.Io.XmlOutput; +using KellermanSoftware.CompareNetObjects; using NUnit.Framework; namespace Deltares.Dam.Tests.DamEngineIo { [TestFixture] public class FillDamUiFromXmlOutputTests { + [Test] + public void SimpleTest() + { +// var output = CreateTestOutput(); +// var damProjectData = new DamProjectData(); +// FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); + + const string inputFilename = "OutputFile.xml"; + //DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); + var output = CreateTestOutput(); + var damProjectData = CreateInputProjectData(); + var expectedDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); + // Input input = FillXmlInputFromDamUi.CreateInput(expectedDamProjectData); + DamXmlSerialization.SaveOutputAsXmlFile(inputFilename, output); + output = DamXmlSerialization.LoadOutputFromXmlFile(inputFilename); + DamProjectData actualDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); + ; + CompareDamProjectData(actualDamProjectData, expectedDamProjectData); + } + + private DamProjectData CreateInputProjectData() + { + var project = new DamProjectData(); + project.WaterBoard.Dikes.Add(new Dike()); + + var location1 = new Location("Location 1"); + var scenario1 = new Scenario(); + scenario1.LocationScenarioID = "Scenario 1"; + scenario1.Location = location1; + location1.Scenarios.Add(scenario1); + project.Locations.Add(location1); + + var location2 = new Location("Location 2"); + var scenario2 = new Scenario(); + scenario2.LocationScenarioID = "Scenario 2"; + scenario2.Location = location2; + location2.Scenarios.Add(scenario2); + project.Locations.Add(location2); + + var location3 = new Location("Location 3"); + var scenario3 = new Scenario(); + scenario3.LocationScenarioID = "Scenario 3"; + scenario3.Location = location3; + location3.Scenarios.Add(scenario3); + project.Locations.Add(location3); + + return project; + } + + private Output CreateTestOutput() + { + var output = new Output(); + output.Results = new OutputResults(); + output.Results.CalculationResults = new CalculationResults(); + output.Results.CalculationResults.DesignResults = new DesignResult[3]; + for (int i = 0; i < 3; i++) + { + var desResult = new DesignResult + { + Id = i.ToString(), + LocationName = "Location " + (i + 1).ToString(), + ScenarioName = "Scenario " + (i + 1).ToString(), + ProfileName = "Profile " + (i + 1).ToString(), + SafetyFactorSpecified = true, + SafetyFactor = 0.44 * i, + FailureProbabilitySpecified = false, + CalculationResult = 1 * i + }; + output.Results.CalculationResults.DesignResults[i] = desResult; + } + return output; + } + + private void CompareDamProjectData(DamProjectData actual, DamProjectData expected) + { + var compare = new CompareLogic + { + Config = + { + MaxDifferences = 100 + } + }; + compare.Config.MembersToIgnore = new List + { + "SheetPilePoint", + "SheetPilePointX", + "SheetPilePointY", + "SheetPilePointZ", + "LocalXZSheetPilePoint", + "SoilbaseDB", + "SurfaceLine", + "LocalXZSurfaceLine", + "SoilLayer1D", + "SoildatabaseName", + "MapForSoilGeometries2D" + }; + var result = compare.Compare(expected, actual); + Assert.AreEqual(0, result.Differences.Count, "Differences found read/write Input object"); + } } }