// Copyright (C) Stichting Deltares 2023. 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.Collections.Generic;
using Deltares.DamEngine.Io.XmlOutput;
using Deltares.Standard.Logging;
namespace Deltares.Dam.Data.DamEngineIo;
///
///
///
public class FillXmlOutputFromDamUi
{
///
/// Class to fill the output xml based on the results in DamProjectData
///
public static Output CreateOutput(DamProjectData damProjectData)
{
var output = new Output();
output.Results = new OutputResults();
output.Results.CalculationMessages = new Message[damProjectData.CalculationMessages.Count];
TransferOutputCalculationMessages(damProjectData.CalculationMessages, output.Results);
if (damProjectData.OutputTimeSerieCollection != null)
{
output.Results.OperationalOutputTimeSeries = new DamEngine.Io.XmlOutput.TimeSerie[damProjectData.OutputTimeSerieCollection.Series.Count];
TransferOutputTimeSeries(damProjectData.OutputTimeSerieCollection, output.Results.OperationalOutputTimeSeries);
}
return output;
}
private static void TransferOutputTimeSeries(TimeSerieCollection outputTimeSerieCollection, DamEngine.Io.XmlOutput.TimeSerie[] outputTimeSeries)
{
var timeSerieIndex = 0;
foreach (TimeSerie damTimeSerie in outputTimeSerieCollection.Series)
{
var outputTimeSerie = new DamEngine.Io.XmlOutput.TimeSerie();
outputTimeSerie.Entries = new TimeSerieEntries();
outputTimeSerie.Entries.TimeSerieEntry = new TimeSerieEntriesTimeSerieEntry[damTimeSerie.Entries.Count];
outputTimeSerie.TimeStep = new TimeSerieTimeStep();
outputTimeSerie.LocationId = damTimeSerie.LocationId;
outputTimeSerie.ParameterId = damTimeSerie.ParameterId;
outputTimeSerie.ForecastDateTime = damTimeSerie.ForecastDateTime;
outputTimeSerie.Type = damTimeSerie.Type;
outputTimeSerie.StartDateTime = damTimeSerie.StartDateTime;
outputTimeSerie.EndDateTime = damTimeSerie.EndDateTime;
outputTimeSerie.MissVal = damTimeSerie.MissVal;
outputTimeSerie.LongName = damTimeSerie.LongName;
outputTimeSerie.StationName = damTimeSerie.StationName;
outputTimeSerie.Units = damTimeSerie.Units;
outputTimeSerie.SourceOrganisation = damTimeSerie.SourceOrganisation;
outputTimeSerie.SourceSystem = damTimeSerie.SourceSystem;
outputTimeSerie.FileDescription = damTimeSerie.FileDescription;
outputTimeSerie.Region = damTimeSerie.Region;
outputTimeSerie.TimeStep.Multiplier = damTimeSerie.TimeStep.Multiplier;
outputTimeSerie.TimeStep.Divider = damTimeSerie.TimeStep.Divider;
outputTimeSerie.TimeStep.MultiplierSpecified1 = damTimeSerie.TimeStep.MultiplierSpecified;
outputTimeSerie.TimeStep.DividerSpecified1 = damTimeSerie.TimeStep.DividerSpecified;
outputTimeSerie.TimeStep.TimeStepUnit = ConversionHelper.ConvertToInputTimeStepUnit(damTimeSerie.TimeStep.Unit);
var timeSerieEntryIndex = 0;
foreach (TimeSerieEntry timestepEntry in damTimeSerie.Entries)
{
TimeSerieEntriesTimeSerieEntryStochastValue stochastValue = null;
if (timestepEntry.StochastValue != null)
{
stochastValue = new TimeSerieEntriesTimeSerieEntryStochastValue
{
Distribution = timestepEntry.StochastValue.Distribution,
Mean = timestepEntry.StochastValue.Mean,
StandardDeviation = timestepEntry.StochastValue.StandardDeviation
};
}
var timeStep = new TimeSerieEntriesTimeSerieEntry
{
DateTime = timestepEntry.DateTime,
Value = timestepEntry.Value,
BasisFileNameWMF = timestepEntry.BasisFileName,
Flagnietechtgebruikt = timestepEntry.Flag,
RelativeCalculationPathName = timestepEntry.RelativeCalculationPathName,
StochastValue = stochastValue
};
outputTimeSerie.Entries.TimeSerieEntry[timeSerieEntryIndex] = timeStep;
timeSerieEntryIndex++;
}
outputTimeSeries[timeSerieIndex] = outputTimeSerie;
timeSerieIndex++;
}
}
private static void TransferOutputCalculationMessages(List calculationMessages, OutputResults outputResults)
{
//var calculationMessages = damProjectData.CalculationMessages;
if (calculationMessages != null)
{
outputResults.CalculationMessages = new Message[calculationMessages.Count];
for (var i = 0; i < calculationMessages.Count; i++)
{
var message = new Message();
message.MessageType = ConversionHelper.ConvertToInputMessageType(calculationMessages[i].MessageType);
message.Message1 = calculationMessages[i].Message;
outputResults.CalculationMessages[i] = message;
}
}
}
}