public static VariantValue Create(FieldType fieldType,
                                          [CanBeNull] object value)
        {
            VariantValueType valueType = GetValueType(fieldType);

            return(new VariantValue(value, valueType));
        }
Beispiel #2
0
        private static Type GetType(VariantValueType valueType)
        {
            switch (valueType)
            {
            case VariantValueType.Null:
                return(null);

            case VariantValueType.Boolean:
                return(typeof(bool));

            case VariantValueType.DateTime:
                return(typeof(DateTime));

            case VariantValueType.Double:
                return(typeof(double));

            case VariantValueType.Integer:
                return(typeof(int));

            case VariantValueType.String:
                return(typeof(string));

            default:
                throw new ArgumentException(
                          string.Format("Unknown value type: {0}", valueType));
            }
        }
Beispiel #3
0
        public ObjectSubtype AddObjectSubType([NotNull] string name,
                                              [NotNull] ObjectAttribute attribute,
                                              [CanBeNull] object attributeValue,
                                              VariantValueType valueType =
                                              VariantValueType.Null)
        {
            Assert.ArgumentNotNullOrEmpty(name, nameof(name));
            Assert.ArgumentNotNull(attribute, nameof(attribute));

            ObjectSubtype objectSubtype = AddObjectSubType(name);

            objectSubtype.AddCriterion(attribute, attributeValue, valueType);

            return(objectSubtype);
        }
Beispiel #4
0
        public ObjectSubtype AddObjectSubType([NotNull] string name,
                                              [NotNull] string attributeName,
                                              [CanBeNull] object attributeValue,
                                              VariantValueType valueType =
                                              VariantValueType.Null)
        {
            Assert.ArgumentNotNullOrEmpty(name, nameof(name));
            Assert.ArgumentNotNullOrEmpty(attributeName, nameof(attributeName));

            ObjectAttribute attribute = ObjectDataset.GetAttribute(attributeName);

            Assert.NotNull(attribute, "attribute '{0}' not found in '{1}' ",
                           attributeName, ObjectDataset.Name);

            return(AddObjectSubType(name, attribute, attributeValue, valueType));
        }
Beispiel #5
0
        public ObjectSubtypeCriterion AddCriterion([NotNull] string attributeName,
                                                   object attributeValue,
                                                   VariantValueType valueType =
                                                   VariantValueType.Null)
        {
            Assert.ArgumentNotNullOrEmpty(attributeName, nameof(attributeName));

            ObjectAttribute attribute =
                _objectType.ObjectDataset.GetAttribute(attributeName);

            Assert.NotNull(attribute, "Attribute {0} not found for {1}",
                           attributeName,
                           _objectType.ObjectDataset.Name);

            return(AddCriterion(attribute, attributeValue, valueType));
        }
Beispiel #6
0
        public bool CanChangeTo(VariantValueType type)
        {
            if (_stringValue == null)
            {
                return(true);
            }

            if (type == VariantValueType.Null)
            {
                return(true);
            }

            object result;

            return(ConversionUtils.TryParseTo(GetType(type),
                                              _stringValue, _culture, out result));
        }
Beispiel #7
0
        private static bool TryGetValueType(object value, out VariantValueType variantType)
        {
            bool ok = true;

            if (value == null)
            {
                variantType = VariantValueType.Null;
            }
            else
            {
                Type type = value.GetType();

                if (type == typeof(double))
                {
                    variantType = VariantValueType.Double;
                }
                else if (type == typeof(int))
                {
                    variantType = VariantValueType.Integer;
                }
                else if (type == typeof(bool))
                {
                    variantType = VariantValueType.Boolean;
                }
                else if (type == typeof(string))
                {
                    variantType = VariantValueType.String;
                }
                else if (type == typeof(DateTime))
                {
                    variantType = VariantValueType.DateTime;
                }
                else if (type.IsEnum)
                {
                    variantType = VariantValueType.Integer;
                }
                else
                {
                    variantType = VariantValueType.Null;
                    ok          = false;
                }
            }

            return(ok);
        }
Beispiel #8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ObjectSubtypeCriterion"/> class.
        /// </summary>
        /// <param name="attribute">The attribute that the criterion is based on.</param>
        /// <param name="attributeValue">The attribute value.</param>
        /// <param name="valueType">Type of the value.</param>
        public ObjectSubtypeCriterion([NotNull] ObjectAttribute attribute,
                                      [CanBeNull] object attributeValue,
                                      VariantValueType valueType = VariantValueType.Null)
        {
            Assert.ArgumentNotNull(attribute, nameof(attribute));

            _attribute = attribute;

            if (valueType == VariantValueType.Null)
            {
                // attributeValue = null; // "" can not be cast to numeric
                _attributeValue = VariantValueFactory.Create(attribute, attributeValue);
            }
            else
            {
                _attributeValue = new VariantValue(attributeValue, valueType);
            }
        }
        private static bool TryGetValueType(FieldType fieldType,
                                            out VariantValueType valueType)
        {
            switch (fieldType)
            {
            case FieldType.ShortInteger:
            case FieldType.LongInteger:
                valueType = VariantValueType.Integer;
                return(true);

            case FieldType.Float:
            case FieldType.Double:
                valueType = VariantValueType.Double;
                return(true);

            case FieldType.Text:
                valueType = VariantValueType.String;
                return(true);

            case FieldType.Date:
                valueType = VariantValueType.DateTime;
                return(true);

            case FieldType.ObjectID:
            case FieldType.Geometry:
            case FieldType.Blob:
            case FieldType.Raster:
            case FieldType.Guid:
            case FieldType.GlobalID:
            case FieldType.Xml:
                valueType = VariantValueType.Null;
                return(false);

            default:
                throw new ArgumentOutOfRangeException(
                          nameof(fieldType), fieldType,
                          string.Format("Unknown field type: {0}", fieldType));
            }
        }
Beispiel #10
0
        public ObjectSubtypeCriterion AddCriterion([NotNull] ObjectAttribute attribute,
                                                   object attributeValue,
                                                   VariantValueType variantValueType =
                                                   VariantValueType.Null)
        {
            Assert.ArgumentNotNull(attribute, nameof(attribute));

            var criterion = new ObjectSubtypeCriterion(attribute, attributeValue,
                                                       variantValueType);

            if (_criteria.Contains(criterion))
            {
                throw new ArgumentException(
                          string.Format(
                              "Criterion already exists in collection. Attribue={0}, Value={1}",
                              attribute.Name, attributeValue ?? "<null>"));
            }

            _criteria.Add(criterion);

            return(criterion);
        }
Beispiel #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="VariantValue"/> class.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="type">The type.</param>
        public VariantValue([CanBeNull] object value, VariantValueType type)
        {
            _type = type;

            Value = value;
        }