Esempio n. 1
0
        /// <summary>
        /// Converts the specified value.
        /// </summary>
        /// <param name="value">
        /// The value to convert.
        /// </param>
        /// <param name="valueType">
        /// The unified value type.
        /// </param>
        /// <param name="converter">
        /// The converter to use for conversion.
        /// </param>
        /// <typeparam name="T">
        /// The type to convert to.
        /// </typeparam>
        /// <returns>
        /// The converted value as the specified type.
        /// </returns>
        /// <exception cref="BusinessException">
        /// The value could not be converted. The inner exception provides additional details.
        /// </exception>
        private static T ConvertValue <T>(object value, UnifiedValueType valueType, Func <object, T> converter)
        {
            T convertedValue;

            try
            {
                convertedValue = converter(value);
            }
            catch (FormatException ex)
            {
                var failureMessage = $"Value '{value}' cannot be converted to type '{valueType}'.";
                throw new BusinessException(value, failureMessage, ex);
            }
            catch (OverflowException ex)
            {
                var failureMessage = $"Value '{value}' cannot be converted to type '{valueType}'.";
                throw new BusinessException(value, failureMessage, ex);
            }
            catch (InvalidCastException ex)
            {
                var failureMessage = $"Value '{value}' cannot be converted to type '{valueType}'.";
                throw new BusinessException(value, failureMessage, ex);
            }

            return(convertedValue);
        }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UnifiedField"/> class.
 /// </summary>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="unifiedFieldType">
 /// The unified field type.
 /// </param>
 /// <param name="unifiedValueType">
 /// The unified value type.
 /// </param>
 /// <param name="unifiedFieldId">
 /// The unified field ID.
 /// </param>
 /// <param name="customFieldId">
 /// The custom field ID.
 /// </param>
 /// <param name="systemFieldId">
 /// The system field ID.
 /// </param>
 public UnifiedField(
     string name,
     UnifiedFieldType unifiedFieldType,
     UnifiedValueType unifiedValueType,
     int?unifiedFieldId = null,
     int?customFieldId  = null,
     int?systemFieldId  = null)
 {
     this.Name                = name;
     this.UnifiedFieldType    = unifiedFieldType;
     this.UnifiedValueType    = unifiedValueType;
     this.UnifiedFieldId      = unifiedFieldId;
     this.CustomFieldId       = customFieldId;
     this.SystemFieldSourceId = systemFieldId;
 }
Esempio n. 3
0
        /// <summary>
        /// Loads user sourced values into the specified filtered values list.
        /// </summary>
        /// <param name="values">
        /// The values to load.
        /// </param>
        /// <param name="valueType">
        /// The value type to load.
        /// </param>
        /// <param name="filteredValues">
        /// The filtered values list.
        /// </param>
        /// <exception cref="BusinessException">
        /// <paramref name="valueType"/> is unknown.
        /// </exception>
        /// <exception cref="ArgumentOutOfRangeException">
        /// The enumeration value of <paramref name="valueType"/> is not one of the named values.
        /// </exception>
        private void LoadUserSourcedValues(IEnumerable <object> values, UnifiedValueType valueType, List <object> filteredValues)
        {
            switch (valueType)
            {
            case UnifiedValueType.Unknown:

                throw new BusinessException(this.UnifiedField, "Unknown field type can't have value set.");

            case UnifiedValueType.Integer:

                filteredValues.AddRange(values.Select(value => ConvertValue(value, valueType, Convert.ToInt64)).Cast <object>());

                break;

            case UnifiedValueType.Decimal:
            case UnifiedValueType.Currency:

                filteredValues.AddRange(values.Select(value => ConvertValue(value, valueType, Convert.ToDouble)).Cast <object>());

                break;

            case UnifiedValueType.Date:

                foreach (var value in values)
                {
                    // Here we use the implicit nullable cast to catch both nullable and value date types.
                    var dateTimeOffset = value as DateTimeOffset?;

                    if (dateTimeOffset != null)
                    {
                        filteredValues.Add(value);
                        continue;
                    }

                    var dateTime = value as DateTime?;

                    if (dateTime != null)
                    {
                        filteredValues.Add(new DateTimeOffset(dateTime.GetValueOrDefault()));
                        continue;
                    }

                    var            dateTimeString = Convert.ToString(value);
                    DateTimeOffset dateTimeOffsetValue;

                    if (DateTimeOffset.TryParse(dateTimeString, out dateTimeOffsetValue))
                    {
                        filteredValues.Add(dateTimeOffsetValue);
                        continue;
                    }

                    var message = $"Value '{value}' cannot be converted to type '{valueType}'.";
                    throw new BusinessException(value, message);
                }

                break;

            case UnifiedValueType.Text:

                filteredValues.AddRange(values.Select(Convert.ToString));

                break;

            case UnifiedValueType.Attachment:

                foreach (var value in values)
                {
                    var documentVersion = value as DocumentVersion;

                    if (documentVersion == null)
                    {
                        var message = $"Value '{value}' cannot be converted to type '{valueType}'.";
                        throw new BusinessException(value, message);
                    }

                    filteredValues.Add(value);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(valueType));
            }
        }