コード例 #1
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 保存副本
        /// </summary>
        /// <param name="deltaMaterials">已经复制完成的副本的delta对象</param>
        /// <param name="sourceRootPathName">源文件的主路径的配置节点名称</param>
        /// <param name="destRootPathName">目标文件的主路径的配置节点名称</param>
        public void SaveCopyVersion(DeltaMaterialList deltaMaterials, string destRootPathName)
        {
            ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            if (string.IsNullOrEmpty(deltaMaterials.RootPathName))
            {
                deltaMaterials.RootPathName = MaterialAdapter.DefaultUploadPathName;
            }

            ExceptionHelper.CheckStringIsNullOrEmpty(destRootPathName, "destRootPathName");

            string sql = this.GetCopyFilesSql(deltaMaterials);

            if (string.IsNullOrEmpty(sql) == false)
            {
                using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required))
                {
                    DbHelper.RunSql(sql, GetConnectionName());

                    DoFilesCopy(deltaMaterials.Inserted, deltaMaterials.RootPathName, destRootPathName, true);
                    DoFilesCopy(deltaMaterials.Updated, deltaMaterials.RootPathName, destRootPathName, true);
                    DoFilesCopy(deltaMaterials.Deleted, deltaMaterials.RootPathName, destRootPathName, false);

                    scope.Complete();
                }
            }
        }
コード例 #2
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        ///
        /// </summary>
        /// <param name="deltaMaterials"></param>
        /// <param name="doFileOperations"></param>
        public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials, bool doFileOperations)
        {
            ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            string rootPathName = deltaMaterials.RootPathName;

            if (string.IsNullOrEmpty(rootPathName))
            {
                rootPathName = MaterialAdapter.DefaultUploadPathName;
            }

            StringBuilder strB = new StringBuilder(1024);

            List <MaterialFileOeprationInfo> fileOPList = new List <MaterialFileOeprationInfo>();

            string sql = FillMaterialSqlAndFileOpList(deltaMaterials, fileOPList);

            if (string.IsNullOrEmpty(sql) == false)
            {
                using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required))
                {
                    DbHelper.RunSql(sql, GetConnectionName());

                    if (doFileOperations)
                    {
                        DoFileOperations(rootPathName, fileOPList);
                    }

                    scope.Complete();
                }
            }
        }
コード例 #3
0
ファイル: DeltaMaterialList.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 根据delta数据产生副本的delta数据
        /// </summary>
        /// <returns>产生的副本delta数据</returns>
        public DeltaMaterialList GenerateCopyVersion()
        {
            ExceptionHelper.TrueThrow <ArgumentNullException>(this == null, "this");

            DeltaMaterialList deltaData = new DeltaMaterialList();

            #region 新增和删除的文件 直接生成副本

            if (this.Inserted != null)
            {
                deltaData.Inserted.Append(this.Inserted.GenerateCopyVersion());
            }

            if (this.Deleted != null)
            {
                deltaData.Deleted.Append(this.Deleted.GenerateCopyVersion());
            }

            #endregion

            #region 更新的文件,检查是否已存在该环节的副本

            if (this.Updated != null && this.Updated.Count != 0)
            {
                foreach (Material material in this.Updated)
                {
                    deltaData.Updated.Add(material.GenerateCopyVersion());
                }
            }

            #endregion

            return(deltaData);
        }
コード例 #4
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 删除指定ResourceID的附件
        /// </summary>
        /// <param name="rootPathName">根目录配置名称</param>
        /// <param name="resourceID">资源ID</param>
        private void InnerDeleteMaterialsByResourceID(string rootPathName, string resourceID)
        {
            ExceptionHelper.CheckStringIsNullOrEmpty(resourceID, "resourceID");

            MaterialList materialList = this.LoadMaterialsByResourceID(resourceID);

            DeltaMaterialList deltaMaterialList = new DeltaMaterialList();

            deltaMaterialList.RootPathName = rootPathName;

            foreach (Material material in materialList)
            {
                deltaMaterialList.Deleted.Add(material);
            }

            this.SaveDeltaMaterials(deltaMaterialList, string.IsNullOrEmpty(rootPathName) == false);
        }
コード例 #5
0
        /// <summary>
        /// 将变化的的附件合并到MaterialList中
        /// </summary>
        /// <param name="delta"></param>
        public void Merge(DeltaMaterialList delta)
        {
            delta.NullCheck("delta");

            MaterialList copiedMaterialed = new MaterialList();

            copiedMaterialed.CopyFrom(this);

            copiedMaterialed.RemoveExistsMaterials(delta.Inserted);
            copiedMaterialed.RemoveExistsMaterials(delta.Updated);
            copiedMaterialed.RemoveExistsMaterials(delta.Deleted);
            copiedMaterialed.CopyFrom(delta.Inserted);
            copiedMaterialed.CopyFrom(delta.Updated);

            copiedMaterialed.Sort((m1, m2) => m1.SortID - m2.SortID);

            this.Clear();
            this.CopyFrom(copiedMaterialed);
        }
コード例 #6
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 形成更新副本的SQL
        /// </summary>
        /// <param name="deltaMaterials">要更新的DeltaMaterialList对象</param>
        /// <returns>形成的SQL语句</returns>
        private string GetCopyFilesSql(DeltaMaterialList deltaMaterials)
        {
            ExceptionHelper.TrueThrow <ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            StringBuilder strB = new StringBuilder(256);

            //新增
            foreach (Material material in deltaMaterials.Inserted)
            {
                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(ORMapping.GetInsertSql <Material>(material, TSqlBuilder.Instance));
            }

            //更新
            foreach (Material material in deltaMaterials.Updated)
            {
                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

                wBuilder.AppendItem("PARENT_ID", material.ParentID);
                wBuilder.AppendItem("WF_ACTIVITY_ID", material.WfActivityID);
                wBuilder.AppendItem("VERSION_TYPE", (int)MaterialVersionType.CopyVersion);

                strB.Append(string.Format(
                                @"IF EXISTS(SELECT * FROM WF.MATERIAL WHERE {0})
							{1}
						  ELSE
							{2}"                            ,
                                wBuilder.ToSqlString(TSqlBuilder.Instance),
                                ORMapping.GetUpdateSql <Material>(material, TSqlBuilder.Instance),
                                ORMapping.GetInsertSql <Material>(material, TSqlBuilder.Instance)));
            }

            return(strB.ToString());
        }
コード例 #7
0
        /// <summary>
        /// 转化为DeltaMaterialList
        /// </summary>
        /// <returns>DeltaMaterial对象</returns>
        public DeltaMaterialList ConvertToDelatMaterialList()
        {
            DeltaMaterialList deltaMaterials = new DeltaMaterialList();

            if (this.Inserted != null)
            {
                deltaMaterials.Inserted = this.Inserted.ConvertToMaterialList();
            }

            if (this.Updated != null)
            {
                deltaMaterials.Updated = this.Updated.ConvertToMaterialList();
            }

            if (this.Deleted != null)
            {
                deltaMaterials.Deleted = this.Deleted.ConvertToMaterialList();
            }

            return(deltaMaterials);
        }
コード例 #8
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 生成SQL,形成文件操作集合
        /// </summary>
        /// <param name="deltaMaterials">Material操作集合</param>
        /// <param name="fileOPList">文件操作集合</param>
        /// <returns>形成的SQL语句</returns>
        private string FillMaterialSqlAndFileOpList(DeltaMaterialList deltaMaterials, List <MaterialFileOeprationInfo> fileOPList)
        {
            StringBuilder strB = new StringBuilder(1024);

            string sql = GetMaterialsOperationSql(deltaMaterials.Inserted, fileOPList, GetInsertMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
            {
                strB.Append(sql);
            }

            sql = GetMaterialsOperationSql(deltaMaterials.Updated, fileOPList, GetUpdateMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
            {
                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(sql);
            }

            sql = GetMaterialsOperationSql(deltaMaterials.Deleted, fileOPList, GetDeleteMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
            {
                if (strB.Length > 0)
                {
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);
                }

                strB.Append(sql);
            }

            return(strB.ToString());
        }
コード例 #9
0
ファイル: MaterialAdapter.cs プロジェクト: wooln/AK47Source
        /// <summary>
        /// 保存deltaMaterials
        /// </summary>
        /// <param name="deltaMaterials">DeltaMaterialList</param>
        public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials)
        {
            SaveDeltaMaterials(deltaMaterials, true);

            deltaMaterials.Clear();
        }