Index: DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r1695 -r2109 --- DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 1695) +++ DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 2109) @@ -549,6 +549,66 @@ damProjectData.WaterBoard.Segments.Add(segment); } } + [Test] + [TestCase("location_12_2_1D1")] // Between "location_12" and "_2_1D1" there are 2 illegal characters (1F hex) + [ExpectedException(typeof(IdValidatorException), ExpectedMessage = "Location has an invalid name location_12_2_1D1")] + public void GivenDataSetContainingIllegalCharactersWhenWritingXmlThenRaiseExceptionWithClearMessage(string id) + { + // Given DataSet Containing Illegal Characters + DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); + var location = expectedDamProjectData.WaterBoard.Dikes[0].Locations[0]; + location.Name = id; + + // When Writing Xml + string xmlString; + Input input = FillXmlInputFromDamUi.CreateInput(expectedDamProjectData); + xmlString = DamXmlSerialization.SaveInputAsXmlString(input); + + // Then Raise Exception With Clear Message() + input = DamXmlSerialization.LoadInputFromXmlString(xmlString); + DamProjectData actualDamProjectData = FillDamUiFromXmlInput.CreateDamProjectData(input); + CompareDamProjectData(actualDamProjectData, expectedDamProjectData); + + } + + [Test] + [TestCase("ABCDEFGHIJLMNOPQRSTUVWXYZ")] + [TestCase("A")] + [TestCase("Z")] + [TestCase("K")] + [TestCase("JUSTATEST")] + [TestCase("abcdefghijklmnopqrstuvwxyz")] + [TestCase("a")] + [TestCase("z")] + [TestCase("k")] + [TestCase("justatest")] + [TestCase("01234567879")] + [TestCase("0")] + [TestCase("9")] + [TestCase("5")] + [TestCase("!#$%&()*+,-./")] + [TestCase(":;<=>?@")] + [TestCase(@"[\]^_`")] + [TestCase("{|}~")] + [TestCase("!")] + public void GivenDataSetContainingIdWithLegalCharactersWhenWritingXmlThenSucceeds(string id) + { + // Given DataSet Containing Illegal Characters + DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); + var location = expectedDamProjectData.WaterBoard.Dikes[0].Locations[0]; + location.Name = id; + + // When Writing Xml + string xmlString; + Input input = FillXmlInputFromDamUi.CreateInput(expectedDamProjectData); + xmlString = DamXmlSerialization.SaveInputAsXmlString(input); + + // Then Raise Exception With Clear Message() + input = DamXmlSerialization.LoadInputFromXmlString(xmlString); + DamProjectData actualDamProjectData = FillDamUiFromXmlInput.CreateDamProjectData(input); + CompareDamProjectData(actualDamProjectData, expectedDamProjectData); + + } private void CompareDamProjectData(DamProjectData actual, DamProjectData expected) { var compare = new CompareLogic { Config = { MaxDifferences = 10 } }; Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r2089 -r2109 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 2089) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 2109) @@ -22,7 +22,9 @@ using System; using System.Collections.Generic; using System.Linq; +using Deltares.Dam.Data.Properties; using Deltares.Dam.Data.Sensors; +using Deltares.DamEngine.Io; using Deltares.DamEngine.Io.XmlInput; using Deltares.Geotechnics.SurfaceLines; using Soil = Deltares.Geotechnics.Soils.Soil; @@ -398,6 +400,42 @@ { throw new NullReferenceException("No soilprofiles1D defined in this project"); } + // Check for invalid Id names + foreach (var location in dike.Locations) + { + if (!IdValidator.IsCorrectName(location.Name)) + { + throw new IdValidatorException(string.Format("Location has an invalid name {0}", location.Name)); + } + } + foreach (var segment in damProjectData.WaterBoard.Segments) + { + if (!IdValidator.IsCorrectName(segment.Name)) + { + throw new IdValidatorException(string.Format("Segment has an invalid name {0}", segment.Name)); + } + } + foreach (var surfaceLine2 in dike.SurfaceLines2) + { + if (!IdValidator.IsCorrectName(surfaceLine2.Name)) + { + throw new IdValidatorException(string.Format("Surfaceline has an invalid name {0}", surfaceLine2.Name)); + } + } + foreach (var soilProfile in dike.SoilProfiles) + { + if (!IdValidator.IsCorrectName(soilProfile.Name)) + { + throw new IdValidatorException(string.Format("Soilprofile has an invalid name {0}", soilProfile.Name)); + } + } + foreach (var soil in dike.SoilList.Soils) + { + if (!IdValidator.IsCorrectName(soil.Name)) + { + throw new IdValidatorException(string.Format("Soil has an invalid name {0}", soil.Name)); + } + } } private static void TransferSoils(List soils, DamEngine.Io.XmlInput.Soil[] inputSoils) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs =================================================================== diff -u -r2089 -r2109 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 2089) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 2109) @@ -33,6 +33,7 @@ using Deltares.Maps; using Deltares.Standard; using Deltares.Standard.Logging; +using Deltares.Standard.Validation; using GeoAPI.Geometries; namespace Deltares.Dam.Data.DataPlugins @@ -1010,7 +1011,7 @@ { if (location.DamType == damType) { - // Replace if location exists� else add + // Replace if location exists else add Location existingLocation = dike.Locations.FirstOrDefault(l => l.Name == location.Name); if (existingLocation != null) { @@ -1319,7 +1320,8 @@ Location.DamProjectType = DamProjectType.Assessment; foreach (var location in waterBoard.Locations) { - var res = location.ValidateLocationHasSegment(); + ValidationResult[] res; + res = location.ValidateLocationHasSegment(); if (res.Any()) { removeLocations.Add(location);