Beispiel #1
0
        private dynamic GetRealValueFromField(IAttributeSerializationDefinition serializationDefinition, string savedVal)
        {
            switch (serializationDefinition.DataSerializationType)
            {
            case DataSerializationTypes.Guid:
            case DataSerializationTypes.String:
            case DataSerializationTypes.LongString:
            case DataSerializationTypes.Boolean:
                return(savedVal);

            case DataSerializationTypes.SmallInt:
            case DataSerializationTypes.LargeInt:
                int intOut;
                if (int.TryParse(savedVal, out intOut))
                {
                    return(intOut);
                }
                throw new InvalidCastException("Could not parse value " + savedVal + " into an int Type");

            case DataSerializationTypes.Decimal:
                decimal decOut;
                if (decimal.TryParse(savedVal, out decOut))
                {
                    return(decOut);
                }
                throw new InvalidCastException("Could not parse value " + savedVal + " into an decimal Type");

            case DataSerializationTypes.Date:
                var dateTime = ExamineHelper.FromExamineDateTime(savedVal);
                if (dateTime != null)
                {
                    return(dateTime);
                }
                throw new InvalidCastException("Could not parse value " + savedVal + " into an DateTimeOffset Type");

            case DataSerializationTypes.ByteArray:
                throw new NotImplementedException();

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        /// <summary>
        /// Stores the value with the correct data type in Examine
        /// </summary>
        /// <param name="serializationDefinition"></param>
        /// <param name="key"></param>
        /// <param name="val"></param>
        /// <param name="d"></param>
        private void StoreFieldValue(IAttributeSerializationDefinition serializationDefinition, string key, object val, IDictionary <string, ItemField> d)
        {
            if (val == null)
            {
                return;
            }

            switch (serializationDefinition.DataSerializationType)
            {
            case DataSerializationTypes.Guid:
            case DataSerializationTypes.String:
            case DataSerializationTypes.LongString:
            case DataSerializationTypes.Boolean:
                //through the serialization type is string, we still need to detect the 'real' type to see how to convert it to a string. For example,
                // a date shouldn't just be a ToString() since we want to preserve as much information as possible.
                var valType = val.GetType();
                if (TypeFinder.IsTypeAssignableFrom <DateTime>(valType))
                {
                    var dt = (DateTime)val;
                    //convert to the roundtrip date/time format http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#Roundtrip
                    d.Add(key, new ItemField(dt.ToString("o")));
                }
                else if (TypeFinder.IsTypeAssignableFrom <DateTimeOffset>(valType))
                {
                    var dt = (DateTimeOffset)val;
                    //convert to the roundtrip date/time format http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#Roundtrip
                    d.Add(key, new ItemField(dt.ToString("o")));
                }
                else
                {
                    d.Add(key, new ItemField(val.ToString()));
                }
                break;

            case DataSerializationTypes.SmallInt:
            case DataSerializationTypes.LargeInt:
                d.Add(key, new ItemField(val)
                {
                    DataType = FieldDataType.Int
                });
                break;

            case DataSerializationTypes.Decimal:
                d.Add(key, new ItemField(val)
                {
                    DataType = FieldDataType.Double
                });
                break;

            case DataSerializationTypes.Date:
                d.Add(key, new ItemField(val)
                {
                    DataType = FieldDataType.DateTime
                });
                break;

            case DataSerializationTypes.ByteArray:
                throw new NotImplementedException();

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        /// <summary>
        /// Creates an <see cref="IAttributeDefinition"/> with a given <see cref="IAttributeTypeDefinition"/> and references it to a given <see cref="IAttributeGroupDefinition"/>.
        /// </summary>
        /// <typeparam name="TAllowedType"></typeparam>
        /// <param name="alias">The alias.</param>
        /// <param name="name">The name.</param>
        /// <param name="attributeTypeDefinition">The attribute type definition.</param>
        /// <param name="serializationDefinition">The serialization definition.</param>
        /// <param name="attributeGroupDefinition">The attribute group definition.</param>
        /// <returns></returns>
        public static T CreateAttributeIn <T>(string alias, string name, IAttributeTypeDefinition attributeTypeDefinition, IAttributeSerializationDefinition serializationDefinition,
                                              IAttributeGroupDefinition attributeGroupDefinition)
            where T : class, IAttributeDefinition, new()
        {
            var entity = Create <T>(alias, name);

            entity.AttributeType = attributeTypeDefinition;
            entity.AttributeType.SerializationType = serializationDefinition;
            attributeGroupDefinition.AttributeDefinitions.Add(entity);
            return(entity);
        }
 public AttributeType(string @alias, LocalizedString name, LocalizedString description, IAttributeSerializationDefinition serializationType)
 {
     this.Setup(alias, name, description);
     SerializationType = serializationType;
 }