/// <summary>
        ///
        /// </summary>
        /// <param name="item"></param>
        /// <param name="workspace"></param>
        public void file_create_acl(FileUpdateQueueItem item, IWorkspace workspace)
        {
            // 1. 対象ファイルが存在するかチェック
            if (!item.Target.Exists)
            {
                throw new ApplicationException("対象ファイルが指定位置に存在しません。");
            }

            // 3. ACLファイルから、ACLハッシュを取得する
            var aclbin  = VfsLogicUtils.ReadACLFile(new FileInfo(item.Target.FullName));
            var aclhash = aclbin.FindKeyValue("ACLHASH");

            // 4. データベースを参照し、ACLハッシュとファイルマッピング情報(AclHash)を突き合わせる
            IFileMappingInfo entity = mFileMappingInfoRepository.LoadByAclHash(aclhash);

            if (entity == null)
            {
                throw new ApplicationException();
            }
            if (entity.GetWorkspace() == null || entity.GetWorkspace().Id != workspace.Id)
            {
                throw new ApplicationException();
            }


            // 5. ファイルマッピング情報を参照し、物理ファイルが存在するかチェックする
            var phyFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, entity.MappingFilePath));

            if (!phyFileInfo.Exists)
            {
                throw new ApplicationException();
            }

            // 6. 物理ファイルを、ACLファイルのパスに対応する物理空間のパスへ移動する
            //    移動先が、同じ場所となる場合は処理しない。
            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName);
            var extFilePath             = Path.Combine(Path.GetDirectoryName(aclfileLocalPath_Update), Path.GetFileNameWithoutExtension(aclfileLocalPath_Update));
            var toFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, extFilePath));

            if (phyFileInfo.FullName != toFileInfo.FullName)
            {
                Directory.CreateDirectory(toFileInfo.Directory.FullName);
                File.Move(phyFileInfo.FullName, toFileInfo.FullName);

                // 7. ファイルマッピング情報をDBに書き込む(コンテキスト初期化)
                entity = mFileMappingInfoRepository.LoadByAclHash(aclhash);
                entity.MappingFilePath = extFilePath; // 新しいファイルマップパス
            }

            mFileMappingInfoRepository.Save();
        }
示例#2
0
        private IFileMappingInfo CreateFileMappingInfo(string aclHash, IWorkspace workspace, FileInfo file)
        {
            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(file.FullName);

            string mimetype = "";

            switch (file.Extension)
            {
            case ".png":
                mimetype = "image/png";
                break;

            case ".jpg":
            case ".jpeg":
                mimetype = "image/jpg";
                break;

            case ".gif":
                mimetype = "image/gif";
                break;
            }

            var entity = mFileMappingInfoRepository.New();

            entity.AclHash = aclHash;
            entity.SetWorkspace(workspace);
            entity.Mimetype        = mimetype;
            entity.MappingFilePath = aclfileLocalPath_Update;
            entity.LostFileFlag    = false;
            mFileMappingInfoRepository.Save();
            return(entity);
        }