Mercurial > pub > bltoolkit
diff Source/Reflection/MetadataProvider/MetadataProviderBase.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Source/Reflection/MetadataProvider/MetadataProviderBase.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,349 @@ +using System; +using System.Collections.Generic; + +using BLToolkit.Common; +using BLToolkit.DataAccess; + +namespace BLToolkit.Reflection.MetadataProvider +{ + using Extension; + using Mapping; + + public delegate void OnCreateProvider(MetadataProviderBase parentProvider); + public delegate MetadataProviderBase CreateProvider(); + public delegate MemberMapper EnsureMapperHandler(string mapName, string origName); + + public abstract class MetadataProviderBase + { + #region Provider Support + + public virtual void AddProvider(MetadataProviderBase provider) + { + } + + public virtual void InsertProvider(int index, MetadataProviderBase provider) + { + } + + public virtual MetadataProviderBase[] GetProviders() + { + return new MetadataProviderBase[0]; + } + + #endregion + + #region GetFieldName + + public virtual string GetFieldName(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return member.Name; + } + + #endregion + + public virtual string GetSequenceName(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #region GetFieldStorage + + public virtual string GetFieldStorage(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetInheritanceDiscriminator + + public virtual bool GetInheritanceDiscriminator(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return false; + } + + #endregion + + #region EnsureMapper + + public virtual void EnsureMapper(TypeAccessor typeAccessor, MappingSchema mappingSchema, EnsureMapperHandler handler) + { + } + + #endregion + + #region GetMapIgnore + + public virtual bool GetMapIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + + return + TypeHelper.IsScalar(member.Type) == false;// || + //(member.MemberInfo is FieldInfo && ((FieldInfo)member.MemberInfo).IsLiteral); + } + + #endregion + + #region GetMapField + + public virtual MapFieldAttribute GetMapField(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetDbType + + [CLSCompliant(false)] + public virtual DbTypeAttribute GetDbType(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetPrimaryKey + + public virtual PrimaryKeyAttribute GetPrimaryKey(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetTrimmable + + public virtual bool GetTrimmable(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = member.Type != typeof(string); + return isSet? false: TrimmableAttribute.Default.IsTrimmable; + } + + #endregion + + #region GetMapValues + + public virtual MapValue[] GetMapValues(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + public virtual MapValue[] GetMapValues(TypeExtension typeExtension, Type type, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetDefaultValue + + public virtual object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + public virtual object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, Type type, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetNullable + + public virtual bool GetNullable(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return + //member.Type.IsClass || + member.Type.IsGenericType && member.Type.GetGenericTypeDefinition() == typeof (Nullable<>) + /*|| + member.Type == typeof(System.Data.Linq.Binary) || + member.Type == typeof(byte[])*/; + } + + #endregion + + #region GetLazyInstance + + public virtual bool GetLazyInstance(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return false; + } + + #endregion + + #region GetNullValue + + public virtual object GetNullValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + + if (member.Type.IsEnum) + return null; + + var value = mappingSchema.GetNullValue(member.Type); + + if (value is Type && (Type)value == typeof(DBNull)) + { + value = DBNull.Value; + + if (member.Type == typeof(string)) + value = null; + } + + return value; + } + + #endregion + + #region GetDbName + + public virtual string GetDatabaseName(Type type, ExtensionList extensions, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetOwnerName + + public virtual string GetOwnerName(Type type, ExtensionList extensions, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetTableName + + public virtual string GetTableName(Type type, ExtensionList extensions, out bool isSet) + { + isSet = false; + return + type.IsInterface && type.Name.StartsWith("I") + ? type.Name.Substring(1) + : type.Name; + } + + #endregion + + #region GetPrimaryKeyOrder + + public virtual int GetPrimaryKeyOrder(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet) + { + isSet = false; + return 0; + } + + #endregion + + #region GetNonUpdatableAttribute + + public virtual NonUpdatableAttribute GetNonUpdatableAttribute(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet) + { + isSet = false; + return null; + } + + #endregion + + #region GetSqlIgnore + + public virtual bool GetSqlIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet) + { + isSet = false; + return false; + } + + #endregion + + #region GetRelations + + public virtual List<MapRelationBase> GetRelations(MappingSchema schema, ExtensionList typeExt, Type master, Type slave, out bool isSet) + { + isSet = false; + return new List<MapRelationBase>(); + } + + protected static List<string> GetPrimaryKeyFields(MappingSchema schema, TypeAccessor ta, TypeExtension tex) + { + var mdp = schema.MetadataProvider; + var keys = new List<string>(); + + foreach (MemberAccessor sma in ta) + { + bool isSetFlag; + + mdp.GetPrimaryKeyOrder(ta.Type, tex, sma, out isSetFlag); + + if (isSetFlag) + { + var name = mdp.GetFieldName(tex, sma, out isSetFlag); + keys.Add(name); + } + } + + return keys; + } + + #endregion + + #region GetAssociation + + public virtual Association GetAssociation(TypeExtension typeExtension, MemberAccessor member) + { + return null; + } + + #endregion + + #region GetInheritanceMapping + + public virtual InheritanceMappingAttribute[] GetInheritanceMapping(Type type, TypeExtension typeExtension) + { + return Array<InheritanceMappingAttribute>.Empty; + } + + #endregion + + #region Static Members + + public static event OnCreateProvider OnCreateProvider; + + private static CreateProvider _createProvider = CreateInternal; + public static CreateProvider CreateProvider + { + get { return _createProvider; } + set { _createProvider = value ?? new CreateProvider(CreateInternal); } + } + + private static MetadataProviderBase CreateInternal() + { + var list = new MetadataProviderList(); + + if (OnCreateProvider != null) + OnCreateProvider(list); + + return list; + } + + #endregion + } +}