/// <summary> /// Reads a <see cref="SoilLayer1D"/> from the given <paramref name="reader"/>. /// </summary> /// <exception cref="SoilProfileReadException">Thrown when reading properties of the layers failed.</exception> private static SoilLayer1D ReadSoilLayerFrom(IRowBasedDatabaseReader reader, string profileName) { var properties = new Layer1DProperties(reader, profileName); var soilLayer = new SoilLayer1D(properties.Top); SoilLayerHelper.SetSoilLayerBaseProperties(soilLayer, properties); return(soilLayer); }
/// <summary> /// Creates a new instance of <see cref="RequiredProfileProperties"/> which contains properties /// that are required to create a complete <see cref="SoilProfile1D"/>. If these properties /// cannot be read, then the reader can proceed to the next profile. /// </summary> /// <param name="reader">The <see cref="IRowBasedDatabaseReader"/> to read the required /// profile property values from.</param> /// <param name="profileName">The profile name used in generating exceptions messages /// if casting failed.</param> /// <exception cref="SoilProfileReadException">Thrown when the values in the database could not be /// casted to the expected column types.</exception> internal RequiredProfileProperties(IRowBasedDatabaseReader reader, string profileName) { try { Bottom = reader.ReadOrDefault <double?>(SoilProfileTableDefinitions.Bottom) ?? double.NaN; } catch (InvalidCastException e) { string message = string.Format(Resources.SoilProfileReader_Profile_Name_0_has_invalid_value_on_Column_1, profileName, SoilProfileTableDefinitions.Bottom); throw new SoilProfileReadException(message, profileName, e); } }
/// <summary> /// Reads a <see cref="SoilLayer2DGeometry"/> from the given <paramref name="databaseReader"/>. /// </summary> /// <param name="databaseReader">The reader to read a geometry from.</param> /// <param name="geometryReader">The geometry reader to use.</param> /// <param name="profileName">The name of the profile to read a geometry for.</param> /// <param name="soilLayerGeometriesLookup">The lookup to add the read data to.</param> /// <exception cref="SoilProfileReadException">Thrown when reading properties of the geometry failed.</exception> private static void ReadSoilLayerGeometryFrom(IRowBasedDatabaseReader databaseReader, SoilLayer2DGeometryReader geometryReader, string profileName, IDictionary <SoilLayer2DGeometry, Layer2DProperties> soilLayerGeometriesLookup) { var properties = new Layer2DProperties(databaseReader, profileName); try { soilLayerGeometriesLookup[geometryReader.Read(properties.GeometryValue)] = properties; } catch (SoilLayerConversionException e) { throw CreateSoilProfileReadException(databaseReader.Path, profileName, e); } }
/// <summary> /// Creates a new instance of <see cref="Layer1DProperties"/> which contains properties /// that are required to create a complete <see cref="SoilLayer1D"/>. If these properties /// cannot be read, then the reader can proceed to the next profile. /// </summary> /// <param name="reader">The <see cref="IRowBasedDatabaseReader"/> to read the required layer property values from.</param> /// <param name="profileName">The profile name used in generating exceptions messages if casting failed.</param> /// <exception cref="SoilProfileReadException">Thrown when the values in the database could not be /// casted to the expected column types.</exception> internal Layer1DProperties(IRowBasedDatabaseReader reader, string profileName) : base(reader, profileName) { const string readColumn = SoilProfileTableDefinitions.Top; try { Top = reader.Read <double>(readColumn); } catch (InvalidCastException e) { string message = string.Format(Resources.SoilProfileReader_Profile_Name_0_has_invalid_value_on_Column_1, profileName, readColumn); throw new SoilProfileReadException(message, profileName, e); } }
/// <summary> /// Creates a new instance of <see cref="CriticalProfileProperties"/> which contains properties /// that are critical for reading profiles. If these properties cannot be read, then something /// went wrong while querying the database. /// </summary> /// <param name="reader">The <see cref="IRowBasedDatabaseReader"/> from which to obtain the critical properties.</param> /// <exception cref="CriticalFileReadException">Thrown when the values in the database could not be /// casted to the expected column types.</exception> public CriticalProfileProperties(IRowBasedDatabaseReader reader) { try { ProfileName = reader.Read <string>(SoilProfileTableDefinitions.ProfileName); LayerCount = reader.Read <long>(SoilProfileTableDefinitions.LayerCount); ProfileId = reader.Read <long>(SoilProfileTableDefinitions.SoilProfileId); } catch (InvalidCastException e) { var messageBuilder = new FileReaderErrorMessageBuilder(reader.Path); if (!string.IsNullOrEmpty(ProfileName)) { messageBuilder.WithSubject(string.Format(Resources.SoilProfileReader_SoilProfileName_0_, ProfileName)); } string message = messageBuilder.Build(Resources.SoilProfileReader_Critical_Unexpected_value_on_column); throw new CriticalFileReadException(message, e); } }
/// <summary> /// Creates a new instance of <see cref="PreconsolidationStressReadValues"/> /// which contains properties that are required to create preconsolidation /// stresses for a soil layer. /// </summary> /// <param name="reader">The <see cref="IRowBasedDatabaseReader"/> to obtain /// the preconsolidation stress properties from.</param> /// <param name="profileName">The profile name used for generating exception messages /// if reading property values fails.</param> /// <exception cref="ArgumentNullException">Thrown when any of the parameters /// are <c>null</c>.</exception> /// <exception cref="SoilProfileReadException">Thrown when the values in the database /// cannot be casted to the expected column types.</exception> public PreconsolidationStressReadValues(IRowBasedDatabaseReader reader, string profileName) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (profileName == null) { throw new ArgumentNullException(nameof(profileName)); } string readColumn = null; try { readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressXCoordinate; XCoordinate = reader.ReadOrDefault <double?>(readColumn); readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressZCoordinate; ZCoordinate = reader.ReadOrDefault <double?>(readColumn); readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressDistributionType; StressDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressMean; StressMean = reader.ReadOrDefault <double?>(readColumn); readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressCoefficientOfVariation; StressCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = PreconsolidationStressTableDefinitions.PreconsolidationStressShift; StressShift = reader.ReadOrDefault <double?>(readColumn); } catch (InvalidCastException e) { string message = new FileReaderErrorMessageBuilder(reader.Path) .WithSubject(string.Format(Resources.SoilProfileReader_SoilProfileName_0_, profileName)) .Build(string.Format(Resources.SoilProfileReader_Profile_has_invalid_value_on_Column_0_, readColumn)); throw new SoilProfileReadException(message, profileName, e); } }
/// <summary> /// Creates a new instance of <see cref="LayerProperties"/> which contains properties /// that are required to create a complete soil layer. /// </summary> /// <param name="reader">The <see cref="IRowBasedDatabaseReader"/> to obtain the required /// layer property values from.</param> /// <param name="profileName">The profile name used for generating exception messages /// if reading property values fails.</param> /// <exception cref="ArgumentNullException">Thrown when any of the input parameters is /// <c>null</c>.</exception> /// <exception cref="SoilProfileReadException">Thrown when the values in the database /// cannot be casted to the expected column types.</exception> internal LayerProperties(IRowBasedDatabaseReader reader, string profileName) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (profileName == null) { throw new ArgumentNullException(nameof(profileName)); } string readColumn = SoilProfileTableDefinitions.IsAquifer; try { IsAquifer = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.MaterialName; MaterialName = reader.ReadOrDefault <string>(readColumn); readColumn = SoilProfileTableDefinitions.Color; Color = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.BelowPhreaticLevelDistributionType; BelowPhreaticLevelDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.BelowPhreaticLevelShift; BelowPhreaticLevelShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.BelowPhreaticLevelMean; BelowPhreaticLevelMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.BelowPhreaticLevelDeviation; BelowPhreaticLevelDeviation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.BelowPhreaticLevelCoefficientOfVariation; BelowPhreaticLevelCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.DiameterD70DistributionType; DiameterD70DistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.DiameterD70Shift; DiameterD70Shift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.DiameterD70Mean; DiameterD70Mean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.DiameterD70CoefficientOfVariation; DiameterD70CoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PermeabilityDistributionType; PermeabilityDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.PermeabilityShift; PermeabilityShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PermeabilityMean; PermeabilityMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PermeabilityCoefficientOfVariation; PermeabilityCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.UsePop; UsePop = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.ShearStrengthModel; ShearStrengthModel = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.AbovePhreaticLevelDistributionType; AbovePhreaticLevelDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.AbovePhreaticLevelMean; AbovePhreaticLevelMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.AbovePhreaticLevelCoefficientOfVariation; AbovePhreaticLevelCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.AbovePhreaticLevelShift; AbovePhreaticLevelShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.CohesionDistributionType; CohesionDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.CohesionMean; CohesionMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.CohesionCoefficientOfVariation; CohesionCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.CohesionShift; CohesionShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.FrictionAngleDistributionType; FrictionAngleDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.FrictionAngleMean; FrictionAngleMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.FrictionAngleCoefficientOfVariation; FrictionAngleCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.FrictionAngleShift; FrictionAngleShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.ShearStrengthRatioDistributionType; ShearStrengthRatioDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.ShearStrengthRatioMean; ShearStrengthRatioMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.ShearStrengthRatioCoefficientOfVariation; ShearStrengthRatioCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.ShearStrengthRatioShift; ShearStrengthRatioShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.StrengthIncreaseExponentDistributionType; StrengthIncreaseExponentDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.StrengthIncreaseExponentMean; StrengthIncreaseExponentMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.StrengthIncreaseExponentCoefficientOfVariation; StrengthIncreaseExponentCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.StrengthIncreaseExponentShift; StrengthIncreaseExponentShift = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PopDistributionType; PopDistributionType = reader.ReadOrDefault <long?>(readColumn); readColumn = SoilProfileTableDefinitions.PopMean; PopMean = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PopCoefficientOfVariation; PopCoefficientOfVariation = reader.ReadOrDefault <double?>(readColumn); readColumn = SoilProfileTableDefinitions.PopShift; PopShift = reader.ReadOrDefault <double?>(readColumn); } catch (InvalidCastException e) { string message = new FileReaderErrorMessageBuilder(reader.Path) .WithSubject(string.Format(Resources.SoilProfileReader_SoilProfileName_0_, profileName)) .Build(string.Format(Resources.SoilProfileReader_Profile_has_invalid_value_on_Column_0_, readColumn)); throw new SoilProfileReadException(message, profileName, e); } }