// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets 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 Application.Ringtoets.Storage.DbContext;
using Application.Ringtoets.Storage.Serializers;
using Core.Common.Base.Data;
using Core.Common.Base.Geometry;
using Ringtoets.MacroStabilityInwards.Data;
namespace Application.Ringtoets.Storage.Read.MacroStabilityInwards
{
///
/// This class defines extension methods for read operations for an
/// based on the .
///
internal static class MacroStabilityInwardsCalculationOutputEntityReadExtensions
{
///
/// Read the and use the information to
/// construct a .
///
/// The to create
/// for.
/// A new .
/// Thrown when is null.
public static MacroStabilityInwardsOutput Read(this MacroStabilityInwardsCalculationOutputEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException(nameof(entity));
}
MacroStabilityInwardsSlipPlaneUpliftVan slipPlane = ReadSlipPlane(entity);
MacroStabilityInwardsSlidingCurve slidingCurve = ReadSlidingCurve(entity);
return new MacroStabilityInwardsOutput(slidingCurve, slipPlane, new MacroStabilityInwardsOutput.ConstructionProperties
{
FactorOfStability = entity.FactorOfStability.ToNullAsNaN(),
ForbiddenZonesXEntryMax = entity.ForbiddenZonesXEntryMax.ToNullAsNaN(),
ForbiddenZonesXEntryMin = entity.ForbiddenZonesXEntryMin.ToNullAsNaN(),
ZValue = entity.ZValue.ToNullAsNaN()
});
}
private static MacroStabilityInwardsSlipPlaneUpliftVan ReadSlipPlane(MacroStabilityInwardsCalculationOutputEntity entity)
{
var leftGrid = new MacroStabilityInwardsGrid(entity.SlipPlaneLeftGridXLeft.ToNullAsNaN(),
entity.SlipPlaneLeftGridXRight.ToNullAsNaN(),
entity.SlipPlaneLeftGridZTop.ToNullAsNaN(),
entity.SlipPlaneLeftGridZBottom.ToNullAsNaN())
{
NumberOfHorizontalPoints = entity.SlipPlaneLeftGridNrOfHorizontalPoints,
NumberOfVerticalPoints = entity.SlipPlaneLeftGridNrOfVerticalPoints
};
var rightGrid = new MacroStabilityInwardsGrid(entity.SlipPlaneRightGridXLeft.ToNullAsNaN(),
entity.SlipPlaneRightGridXRight.ToNullAsNaN(),
entity.SlipPlaneRightGridZTop.ToNullAsNaN(),
entity.SlipPlaneRightGridZBottom.ToNullAsNaN()
)
{
NumberOfHorizontalPoints = entity.SlipPlaneRightGridNrOfHorizontalPoints,
NumberOfVerticalPoints = entity.SlipPlaneRightGridNrOfVerticalPoints
};
RoundedDouble[] tangentLines = new TangentLinesXmlSerializer().FromXml(entity.SlipPlaneTangentLinesXml);
return new MacroStabilityInwardsSlipPlaneUpliftVan(leftGrid, rightGrid, tangentLines);
}
private static MacroStabilityInwardsSlidingCurve ReadSlidingCurve(MacroStabilityInwardsCalculationOutputEntity entity)
{
var leftCircle = new MacroStabilityInwardsSlidingCircle(new Point2D(entity.SlidingCurveLeftSlidingCircleCenterX.ToNullAsNaN(),
entity.SlidingCurveLeftSlidingCircleCenterY.ToNullAsNaN()),
entity.SlidingCurveLeftSlidingCircleRadius.ToNullAsNaN(),
Convert.ToBoolean(entity.SlidingCurveLeftSlidingCircleIsActive),
entity.SlidingCurveLeftSlidingCircleNonIteratedForce.ToNullAsNaN(),
entity.SlidingCurveLeftSlidingCircleIteratedForce.ToNullAsNaN(),
entity.SlidingCurveLeftSlidingCircleDrivingMoment.ToNullAsNaN(),
entity.SlidingCurveLeftSlidingCircleResistingMoment.ToNullAsNaN());
var rightCircle = new MacroStabilityInwardsSlidingCircle(new Point2D(entity.SlidingCurveRightSlidingCircleCenterX.ToNullAsNaN(),
entity.SlidingCurveRightSlidingCircleCenterY.ToNullAsNaN()),
entity.SlidingCurveRightSlidingCircleRadius.ToNullAsNaN(),
Convert.ToBoolean(entity.SlidingCurveRightSlidingCircleIsActive),
entity.SlidingCurveRightSlidingCircleNonIteratedForce.ToNullAsNaN(),
entity.SlidingCurveRightSlidingCircleIteratedForce.ToNullAsNaN(),
entity.SlidingCurveRightSlidingCircleDrivingMoment.ToNullAsNaN(),
entity.SlidingCurveRightSlidingCircleResistingMoment.ToNullAsNaN());
MacroStabilityInwardsSlice[] slices = new MacroStabilityInwardsSliceXmlSerializer().FromXml(entity.SlidingCurveSliceXML);
return new MacroStabilityInwardsSlidingCurve(leftCircle,
rightCircle,
slices,
entity.SlidingCurveNonIteratedHorizontalForce.ToNullAsNaN(),
entity.SlidingCurveIteratedHorizontalForce.ToNullAsNaN());
}
}
}