Example #1
0
        /// <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);
        }
Example #2
0
 /// <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);
     }
 }
Example #3
0
        /// <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);
            }
        }
Example #4
0
            /// <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);
                }
            }
Example #5
0
        /// <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);
            }
        }
Example #7
0
        /// <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);
            }
        }