⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 companypreferenceaccessor.cs.svn-base

📁 MIED是用于个人帐务管理的小型软件
💻 SVN-BASE
字号:
using System;
using System.Collections;
using System.Data.Common;
using System.IO;
using System.Xml.Serialization;
using DatabaseUtil;
using Mied.BusinessObject;
using Mied.BusinessObject.Bills;
using Mied.BusinessObject.Preferences;
using Mied.DAL.Internal;
using Mied.DAL.TableSchema;
using NativeInterop;

namespace Mied.DAL.Accesses
{
    public class CompanyPreferenceAccessor : AccessorBase
    {
        public CompanyPreferenceAccessor(MiedDatabase database)
            : base(database, CompanyPreferenceSchema.TableName)
        {
            this.Saved += new EntityHandle(CompanyPreferenceAccessor_Saved);
        }

        public CompanyPreference Select()
        {
            if (this.Cache != null)
                return (CompanyPreference)this.Cache.Clone();

            IList list = this.SelectList();
            if (list.Count == 0)
            {
                CompanyPreference preference = new CompanyPreference();
                this.Save(preference);
            }
            else
            {
                CompanyPreference preference = (CompanyPreference)list[0];
                this.CreateCache(preference);
            }

            return this.Select();
        }

        protected override void SaveBefore(Entity entity, DbTransaction transaction)
        {
            base.DeleteAll(transaction);
        }

        protected override CommandFieldValueList BuildPairList(Entity entity)
        {
            CompanyPreference preference = (CompanyPreference)entity;
            CommandFieldValueList pairList = new CommandFieldValueList(preference.ID);
            byte[] xml = ConvertPreferenceToXml(preference);
            pairList.AddZip(CompanyPreferenceSchema.FieldXml, xml);
            return pairList;
        }

        protected override Entity ReadEntity(RecordReader reader)
        {
            byte[] xml = reader.GetZipBytes(CompanyPreferenceSchema.FieldXml);
            CompanyPreference preference = ConvertXmlToPreference(xml);
            preference.ID = reader.GetInt32(CompanyPreferenceSchema.FieldID);
            return preference;
        }

        protected override void OnDatabaseClosed()
        {
            this.Cache = null;
        }

        private void CompanyPreferenceAccessor_Saved(Entity entity)
        {
            this.CreateCache((CompanyPreference)entity);
            Invoice.OverDueDays = this.Cache.OverdueRules.OverDueDays;
        }

        private void CreateCache(CompanyPreference preference)
        {
            if (this.Cache == null)
                this.Cache = new CompanyPreference();

            preference.CopyTo(this.Cache);
        }

        private CompanyPreference Cache = null;

        private static byte[] ConvertPreferenceToXml(CompanyPreference data)
        {
            byte[] xmlByteArray = null;

            // if email preference is not set yet, we try to get it from registry to which earlier versions stored
            //
            if (data.EmailPreference.Empty)
            {
                LegacyWrapper.TryLoadEmailPreferenceFromRegistry(data.EmailPreference);
            }

            // we need encrypt the password and then set back once the serialization is done
            // 
            string backupPassword = data.EmailPreference.Password;
            data.EmailPreference.Password = JiaJieMi.JiaMiStringToString(backupPassword);
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(CompanyPreference));
                MemoryStream memoryXmlStream = new MemoryStream();
                TextWriter writer = new StreamWriter(memoryXmlStream);
                serializer.Serialize(writer, data);
                writer.Close();

                // prepare the buffer
                xmlByteArray = memoryXmlStream.ToArray();
                memoryXmlStream.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                data.EmailPreference.Password = backupPassword;
            }
            return xmlByteArray;
        }

        private static CompanyPreference ConvertXmlToPreference(byte[] xml)
        {
            CompanyPreference settings = new CompanyPreference();

            XmlSerializer serializer = new XmlSerializer(typeof(CompanyPreference));
            MemoryStream memoryStream = new MemoryStream(xml);
            settings = (CompanyPreference)serializer.Deserialize(memoryStream);

            // decrypt the password
            settings.EmailPreference.Password = JiaJieMi.JieMiStringToString(settings.EmailPreference.Password);

            return settings;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -