Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r1571 -r1625 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 1571) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 1625) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Deltares.Dam.Data.Sensors; using Deltares.DamEngine.Io.XmlInput; using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; @@ -74,9 +75,67 @@ damProjectData.InputTimeSerieCollection = new TimeSerieCollection(); TransferInputTimeSeries(input.OperationalInputTimeSeries, damProjectData.InputTimeSerieCollection); } + if (input.SensorData != null) + { + damProjectData.SensorData = new SensorData(); + TransferSensorData(input.SensorData, damProjectData.SensorData, dike.Locations); + } return damProjectData; } + private static void TransferSensorData(InputSensorData inputSensorData, SensorData sensorData, IList locations) + { + // Transfer sensors + foreach (var inputSensor in inputSensorData.Sensors) + { + var plLineMappings = new PLLineType[inputSensor.PlLineMapping.Length]; + int plLineMappingIndex = 0; + foreach (var plLineMapping in inputSensor.PlLineMapping) + { + plLineMappings[plLineMappingIndex] = ConversionHelper.ConvertToPlLineType(plLineMapping.PLineType); + plLineMappingIndex++; + } + sensorData.Sensors.Add(new Sensors.Sensor() + { + ID = inputSensor.Id, + RelativeLocation = inputSensor.RelativeLocation, + Type = ConversionHelper.ConvertToSensorType(inputSensor.SensorType), + PLLineMappings = plLineMappings + }); + } + + // Transfer sensorgroups + foreach (var inputSensorGroup in inputSensorData.SensorGroups) + { + var sensorGroup = new Data.Sensors.Group(); + sensorGroup.ID = inputSensorGroup.Id; + foreach (var sensorId in inputSensorGroup.SensorIds) + { + var sensor = sensorData.Sensors.First(s => s.ID.Equals(sensorId.SensorId)); + sensorGroup.Add(sensor); + } + sensorData.SensorGroups.Add(sensorGroup); + } + + // Transfer sensorlocations + foreach (var inputSensorLocation in inputSensorData.SensorLocations) + { + var sensorLocation = new Data.Sensors.SensorLocation(); + sensorLocation.Location = locations.First(l => l.Name.Equals(inputSensorLocation.LocationId)); + sensorLocation.Location.SensorData = sensorLocation; + sensorLocation.Group = sensorData.SensorGroups.First(sg => sg.ID.Equals(inputSensorLocation.GroupId)); + sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder); + sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder); + sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver); + sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside); + sensorLocation.SourceTypePl1WaterLevelAtPolder = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1WaterLevelAtPolder); + sensorLocation.SourceTypePl1WaterLevelAtRiver = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl1WaterLevelAtRiver); + sensorLocation.SourceTypePl3 = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl3); + sensorLocation.SourceTypePl4 = ConversionHelper.ConvertToDataSourceTypeSensors(inputSensorLocation.SourceTypePl4); + sensorData.SensorLocations.Add(sensorLocation); + } + } + private static void TransferInputTimeSeries(DamEngine.Io.XmlInput.TimeSerie[] inputOperationalInputTimeSeries, TimeSerieCollection timeSerieCollection) { foreach (var inputTimeSerie in inputOperationalInputTimeSeries) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r1571 -r1625 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 1571) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 1625) @@ -21,8 +21,8 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; +using Deltares.Dam.Data.Sensors; using Deltares.DamEngine.Io.XmlInput; using Deltares.Geotechnics.SurfaceLines; using Soil = Deltares.Geotechnics.Soils.Soil; @@ -105,9 +105,75 @@ TransferInputTimeSeries(damProjectData.InputTimeSerieCollection, input.OperationalInputTimeSeries); } + if (damProjectData.SensorData != null) + { + input.SensorData = new InputSensorData(); + TransferSensorData(damProjectData.SensorData, input.SensorData); + } return input; } + private static void TransferSensorData(SensorData sensorData, InputSensorData inputSensorData) + { + // Transfer sensorgroups + int sensorGroupIndex = 0; + inputSensorData.SensorGroups = new DamEngine.Io.XmlInput.SensorGroup[sensorData.SensorGroups.Count]; + foreach (var sensorGroup in sensorData.SensorGroups) + { + var inputSensorGroup = new DamEngine.Io.XmlInput.SensorGroup(); + inputSensorGroup.SensorIds = new SensorGroupSensorIds[sensorGroup.SensorCount]; + inputSensorGroup.Id = sensorGroup.ID; + int sensorIdIndex = 0; + foreach (var sensor in sensorGroup.SensorArray) + { + inputSensorGroup.SensorIds[sensorIdIndex] = new SensorGroupSensorIds() { SensorId = sensor.ID }; + sensorIdIndex++; + } + inputSensorData.SensorGroups[sensorGroupIndex] = inputSensorGroup; + sensorGroupIndex++; + } + + // Transfer sensorlocations + int senserLocationIndex = 0; + inputSensorData.SensorLocations = new DamEngine.Io.XmlInput.SensorLocation[sensorData.SensorLocations.Count]; + foreach (var sensorLocation in sensorData.SensorLocations) + { + var inputSensorLocation = new DamEngine.Io.XmlInput.SensorLocation(); + inputSensorLocation.GroupId = sensorLocation.GroupID; + inputSensorLocation.LocationId = sensorLocation.LocationName; + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside); + inputSensorLocation.SourceTypePl1WaterLevelAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtRiver); + inputSensorLocation.SourceTypePl1WaterLevelAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtPolder); + inputSensorLocation.SourceTypePl3 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl3); + inputSensorLocation.SourceTypePl4 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl4); + inputSensorData.SensorLocations[senserLocationIndex] = inputSensorLocation; + senserLocationIndex++; + } + + // Transfer sensors + inputSensorData.Sensors = new DamEngine.Io.XmlInput.Sensor[sensorData.Sensors.Count]; + int sensorIndex = 0; + foreach (var sensor in sensorData.Sensors) + { + var inputSensor = new DamEngine.Io.XmlInput.Sensor(); + inputSensor.Id = sensor.ID; + inputSensor.RelativeLocation = sensor.RelativeLocation; + inputSensor.SensorType = ConversionHelper.ConvertToInputSensorType(sensor.Type); + inputSensor.PlLineMapping = new SensorPlLineMapping[sensor.PLLineMappings.Length]; + int mappingIndex = 0; + foreach (var plLineMapping in sensor.PLLineMappings) + { + inputSensor.PlLineMapping[mappingIndex] = new SensorPlLineMapping() { PLineType = ConversionHelper.ConvertToInputPlLineType(plLineMapping) }; + mappingIndex++; + } + inputSensorData.Sensors[sensorIndex] = inputSensor; + sensorIndex++; + } + } + private static void TransferInputTimeSeries(TimeSerieCollection inputTimeSerieCollection, DamEngine.Io.XmlInput.TimeSerie[] operationalInputTimeSeries) { int timeSerieIndex = 0; Index: DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r1571 -r1625 --- DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 1571) +++ DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 1625) @@ -36,6 +36,7 @@ using Segment = Deltares.Dam.Data.Segment; using Soil = Deltares.Geotechnics.Soils.Soil; using SoilProfile1D = Deltares.Geotechnics.Soils.SoilProfile1D; +using Deltares.Dam.Data.Sensors; namespace Deltares.Dam.Tests.DamEngineIo { @@ -106,9 +107,82 @@ locationJob.Run = true; } FillInputTimeSeries(damProjectData); + FillSensorData(damProjectData); return damProjectData; } + private void FillSensorData(DamProjectData damProjectData) + { + damProjectData.SensorData = new SensorData(); // SensorLocations, Sensors and SensorGroups are automatically created + var sensorData = damProjectData.SensorData; + var sensor1 = new Data.Sensors.Sensor() + { + ID = 1, + RelativeLocation = 12.2, + Type = SensorType.WaterLevel, + PLLineMappings = new[] { PLLineType.PL1 } + }; + sensorData.Sensors.Add(sensor1); + var sensor2 = new Data.Sensors.Sensor() + { + ID = 2, + RelativeLocation = 24.2, + Type = SensorType.PolderLevel, + PLLineMappings = new[] { PLLineType.PL1 } + }; + sensorData.Sensors.Add(sensor2); + var sensorGroup1 = new Group() + { + ID = 1, + SensorArray = new Data.Sensors.Sensor[] { sensor1, sensor2 } + }; + sensorData.SensorGroups.Add(sensorGroup1); + var sensorLocation1 = new Data.Sensors.SensorLocation() + { + Location = damProjectData.WaterBoard.Dikes[0].Locations[0], + Group = sensorGroup1, + SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor, + SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor, + SourceTypePl3 = DataSourceTypeSensors.Sensor, + SourceTypePl4 = DataSourceTypeSensors.Sensor, + SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData + }; + damProjectData.WaterBoard.Dikes[0].Locations[0].SensorData = sensorLocation1; + sensorData.SensorLocations.Add(sensorLocation1); + + var sensor3 = new Data.Sensors.Sensor() + { + ID = 3, + RelativeLocation = 8.8, + Type = SensorType.PiezometricHead, + PLLineMappings = new[] { PLLineType.PL3, PLLineType.PL4 } + }; + sensorData.Sensors.Add(sensor3); + var sensorGroup2 = new Group() + { + ID = 2, + SensorArray = new Data.Sensors.Sensor[] { sensor3 } + }; + sensorData.SensorGroups.Add(sensorGroup2); + var sensorLocation2 = new Data.Sensors.SensorLocation() + { + Location = damProjectData.WaterBoard.Dikes[0].Locations[0], + Group = sensorGroup1, + SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor, + SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor, + SourceTypePl3 = DataSourceTypeSensors.Sensor, + SourceTypePl4 = DataSourceTypeSensors.Sensor, + SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData + }; + damProjectData.WaterBoard.Dikes[0].Locations[2].SensorData = sensorLocation2; + sensorData.SensorLocations.Add(sensorLocation2); + } private void FillInputTimeSeries(DamProjectData damProjectData) { const int timeSeriesCount = 2; @@ -485,6 +559,7 @@ "WaterBoardJob", "LocationJobs", "SelectedLocationJobs", + "PickSensors", "MapForSoilGeometries2D" }; var result = compare.Compare(expected, actual);