DataModel

using System;
using System.Collections;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
using com.tg.framework.common;
using System.Xml;

namespace com.tg.framework.core
{
    /// <summary>
    /// This is the class of data model.
    /// </summary>
    public class DataModel : IDataModel
    {
        #region Constants and Fields
        /// <summary>
        /// define the object id in run time
        /// </summary>
        protected string _OID = null;

        /// <summary>
        /// create time
        /// </summary>
        protected DateTime? CreateTime;

        /// <summary>
        /// the login id of modify
        /// </summary>
        protected string ByLoginId;

        /// <summary>
        /// the login name of modify
        /// </summary>
        protected string ByLoginName;

        /// <summary>
        /// last updated time
        /// </summary>
        protected DateTime? UpdateTime;

        /// <summary>
        /// remote address of operator
        /// </summary>
        protected string ByRemoteAddress;

        /// <summary>
        /// record the create time or update time to table
        /// </summary>
        private bool _UseRecordTime = false;

        /// <summary>
        /// record the information of client, ex: loginid, loginname, remote address....
        /// </summary>
        private bool _UseRecordClient = false;

        /// <summary>
        /// the deafult status is new.
        /// </summary>
        protected DataModelStatus _Status = DataModelStatus.New;        
        
        #endregion
       
        #region Constructors and Destructors
        /// <summary>
        /// Initializes a new instance of the DataModel class.
        /// </summary>
        public DataModel()
        {
            this._OID = System.Guid.NewGuid().ToString();
            this._Status = DataModelStatus.New;
        }

        /// <summary>
        /// Initializes a new instance of the DataModel class.
        /// </summary>
        /// <param name="hashtable">parameter -- hashtable</param>
        public DataModel(Hashtable hashtable)
        {
            Todo, init a object from hashtable
        }

        /// <summary>
        /// Initializes a new instance of the DataModel class.
        /// </summary>
        /// <param name="keys">parameter -- keys</param>
        /// <param name="values">parameter -- values</param>
        public DataModel(string[] keys, object[] values)
        {
            Todo, init a object from keys and values
        }

        #endregion

        /// <summary>
        /// Define the status of datamodel
        /// </summary>
        public enum DataModelStatus
        {
            FromDB, New, Update, Remove
        }

        #region Public Methods
        /// <summary>
        /// Parsing object to hashtable
        /// </summary>
        /// <returns>return hashtable</returns>
        public Hashtable ToHashtable()
        {
            return DataObject.ParseObjectToHashtable(this);
        }

        /// <summary>
        /// Parsing object to keys
        /// </summary>
        /// <returns>return string array</returns>
        public string[] ToKeys()
        {
            return this.GetModelFields();
        }

        /// <summary>
        /// Parsing object to values
        /// </summary>
        /// <returns>return object array</returns>
        public object[] ToValues()
        {
            return this.GetModelValues();
        }

        /// <summary>
        /// Parsing object to xml
        /// </summary>
        /// <returns>return xml string</returns>
        public XmlDocument ToXml()
        {
           return DataObject.ParseObjectToXml(this);
        }

        /// <summary>
        /// New model id
        /// </summary>
        public void NewModelId()
        {
            this._OID = System.Guid.NewGuid().ToString();
        }

        /// <summary>
        /// Get model id
        /// </summary>
        /// <returns>return model id</returns>
        public string GetModelId()
        {
            return this._OID;
        }

        /// <summary>
        /// Get model name
        /// </summary>
        /// <returns>return model name</returns>
        public string GetModelName()
        {
            return this.GetType().Name;
        }

        /// <summary>
        /// Get model status
        /// </summary>
        /// <returns>return model status</returns>
        public DataModelStatus GetModelStatus()
        {
            return this._Status;
        }

        /// <summary>
        /// Set model status
        /// </summary>
        /// <param name="status">parameter -- status</param>
        public void SetModelStatus(DataModelStatus status)
        {
            this._Status = status;
        }

        /// <summary>
        /// Get model create time
        /// </summary>
        /// <returns>return the create time</returns>
        public DateTime? GetCreateTime()
        {
            return this.CreateTime;
        }

        /// <summary>
        /// Set model create time
        /// </summary>
        /// <param name="date">parameter -- date</param>
        public void SetCreateTime(DateTime date)
        {
            this.CreateTime = date;
        }

        /// <summary>
        /// Get model update time
        /// </summary>
        /// <returns>return the update time</returns>
        public DateTime? GetUpdateTime()
        {
            return this.UpdateTime;
        }

        /// <summary>
        /// Set model update time
        /// </summary>
        /// <param name="date">parameter -- date</param>
        public void SetUpdateTime(DateTime date)
        {
            this.UpdateTime = date;
        }

        /// <summary>
        /// get the login id of modify
        /// </summary>
        /// <returns>return the login id of modify</returns>
        public string GetByLoginId()
        {
            return this.ByLoginId;
        }

        /// <summary>
        /// set the login id
        /// </summary>
        /// <param name="id">login id</param>
        public void SetByLoginId(string id)
        {
            this.ByLoginId = id;
        }

        /// <summary>
        /// Get model login name of modify
        /// </summary>
        /// <returns>return the address</returns>
        public string GetByLoginName()
        {
            return this.ByLoginName;
        }

        /// <summary>
        /// Set model login name of modify
        /// </summary>
        /// <param name="loginName">login name</param>
        public void SetByLoginName(string loginName)
        {
            this.ByLoginName = loginName;
        }

        /// <summary>
        /// Get model remote address of modify
        /// </summary>
        /// <returns>return the address</returns>
        public string GetByRemoteAddress()
        {
            return this.ByRemoteAddress;
        }

        /// <summary>
        /// Set model remote address of modify
        /// </summary>
        /// <param name="address">parameter -- address</param>
        public void SetByRemoteAddress(string address)
        {
            this.ByRemoteAddress = address;
        }

        /// <summary>
        /// Get model using record time
        /// </summary>
        /// <returns>return the result</returns>
        public bool GetModelUseRecordTime()
        {
            return this._UseRecordTime;
        }

        /// <summary>
        /// Set model using record time
        /// </summary>
        /// <param name="use">parameter -- use</param>
        public void SetModelUseRecordTime(bool use)
        {
            this._UseRecordTime = use;
        }

        /// <summary>
        /// Get model using record client
        /// </summary>
        /// <returns>return the result</returns>
        public bool GetModelUseRecordClient()
        {
            return this._UseRecordClient;
        }

        /// <summary>
        /// Set model using record client
        /// </summary>
        /// <param name="use">parameter -- use</param>
        public void SetModelUseRecordClient(bool use)
        {
            this._UseRecordClient = use;
        }

        /// <summary>
        /// Get model object fileds
        /// </summary>
        /// <returns>return the string array of model object fields</returns>
        public string[] GetModelFields()
        {
            Type type = this.GetType();
            
            Get all attributes of the class 
            FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            remove system reserve fields, ex: _CreateTime
            var valiableFields = fields.Where(p => p.Name.IndexOf("_") < 0);
            new a return array
            var fieldsReturn = new string[valiableFields.Count()];

            get field name from each fieldinfo
            int i = 0;
            foreach (FieldInfo field in valiableFields)
            {
                fieldsReturn[i] = field.Name;
                i++;
            }

            return fieldsReturn;
        }

        /// <summary>
        /// Get model object values
        /// </summary>
        /// <returns>return the array of model object</returns>
        public object[] GetModelValues()
        {
            var type = this.GetType();

            Get all attributes of the class 
            var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            remove system reserve fields, ex: _CreateTime
            var valiableFields = fields.Where(p => p.Name.IndexOf("_") < 0);
            new a return array
            var fieldsValues = new object[valiableFields.Count()];

            get field name from each fieldinfo
            var i = 0;
            foreach (var field in valiableFields)
            {
                fieldsValues[i] = field.GetValue(this);
                i++;
            }

            return fieldsValues;
        }

        /// <summary>
        /// get a value of model from FieldName
        /// </summary>
        /// <param name="fieldName">FieldName, AttributeName</param>
        /// <returns>the value of attribute</returns>
        public object GetModelValue(string fieldName)
        {
            return this.GetType().GetField(fieldName).GetValue(this);
        }

        /// <summary>
        /// get a value of model from FieldName
        /// </summary>
        /// <param name="fieldName">FieldName, AttributeName</param>
        /// <param name="value">value of </param>
        public void SetModelValue(string fieldName, object value)
        {
            this.GetType().GetField(fieldName).SetValue(this, value);
        }

        /// <summary>
        /// Get update fields of model objects
        /// </summary>
        /// <param name="fields">parameter -- object fields</param>
        /// <param name="objects">parameter -- objects</param>
        public void GetModelUpdatedFields(out string[] fields, out object[] objects)
        {
            var type = this.GetType();

            Get all attributes of the class 
            var fieldsInfo = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            remove system reserve fields, ex: _CreateTime
            var valiableFields = fieldsInfo.Where(p => p.Name.IndexOf("_") < 0 & p.GetValue(this) != null & p.Name != LayerHelper.GeneralLayer.IdentifyName);

            var count = valiableFields.Count();

/*            use create time and update time
            if (this.GetModelUseRecordTime())
            {
                count = count + 1;
            }
            use creator and updator and remoteaddress
            if (this.GetModelUseRecordClient())
            {
                count = count + 3;
            }
 */

            new a return array
            fields = new string[count];
            objects = new object[count];

            get field name from each fieldinfo
            int i = 0;
            foreach (FieldInfo field in valiableFields)
            {
                fields[i] = field.Name;
                objects[i] = field.GetValue(this);
                i++;
            }

/*
            use create time and update time
            if (this.GetModelUseRecordTime())
            {
                fields[i] = LayerConstant.DataModelFieldUpdateTime;
                objects[i] = System.DateTime.Now;
                i = i + 1;
            }
            use creator and updator and remoteaddress
            if (this.GetModelUseRecordClient())
            {
                fields[i] = LayerConstant.DataModelFieldLoginID;
                objects[i] = GlobalObject.GetLoginID();
                fields[i + 1] = LayerConstant.DataModelFieldLoginName;
                objects[i + 1] = GlobalObject.GetLoginName();
                fields[i + 2] = LayerConstant.DataModelFieldRemoteAddress;
                objects[i + 2] = GlobalObject.GetRemoteAddress();
                i = i + 3;
            }
*/
        }

        /// <summary>
        /// Get avaiable fields of model objects
        /// </summary>
        /// <param name="fields">parameter -- object fields</param>
        /// <param name="objects">parameter -- objects</param>
        public void GetModelAvaiableFields(out string[] fields, out object[] objects)
        {
            Type type = this.GetType();

            Get all attributes of the class 
            FieldInfo[] fieldsInfo = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            remove system reserve fields, ex: _CreateTime
            var valiableFields = fieldsInfo.Where(p => p.Name.IndexOf("_") < 0 & p.GetValue(this) != null);

            var count = valiableFields.Count();

/*            use create time and update time
            if (this.GetModelUseRecordTime())
            {
                count = count + 2;
            }
            use creator and updator and remoteaddress
            if (this.GetModelUseRecordClient())
            {
                count = count + 3;
            }
 */

            new a return array
            fields = new string[count];
            objects = new object[count];

            get field name from each fieldinfo
            int i = 0;
            foreach (FieldInfo field in valiableFields)
            {
                fields[i] = field.Name;
                objects[i] = field.GetValue(this);
                i++;
            }

/*
            use create time and update time
            if (this.GetModelUseRecordTime())
            {
                fields[i] = LayerConstant.DataModelFieldCreateTime;
                objects[i] = System.DateTime.Now;
                fields[i + 1] = LayerConstant.DataModelFieldUpdateTime;
                objects[i + 1] = System.DateTime.Now;
                i = i + 2;
            }
            use creator and updator and remoteaddress
            if (this.GetModelUseRecordClient())
            {
                fields[i] = LayerConstant.DataModelFieldLoginID;
                objects[i] = GlobalObject.GetLoginID();
                fields[i + 1] = LayerConstant.DataModelFieldLoginName;
                objects[i + 1] = GlobalObject.GetLoginName();
                fields[i + 2] = LayerConstant.DataModelFieldRemoteAddress;
                objects[i + 2] = GlobalObject.GetRemoteAddress();
                i = i + 3;
            }
*/
        }

        /// <summary>
        /// Get avaiable fields of model objects
        /// </summary>
        /// <param name="sql">parameter -- sql</param>
        /// <returns>return the list of IDataModel</returns>
        public List<IDataModel> GetBySql(string sql)
        {
            List<IDataModel> iDataModel = new List<IDataModel>();

            return iDataModel;
        }

        #endregion
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值