Exemplo n.º 1
0
        protected override bool Execute(CodeActivityContext context)
        {
            IWorkflowContext workflowContext = context.GetExtension <IWorkflowContext>();
            ParameterStack   pstack          = context.GetValue <ParameterStack>(this.Parameter);

            var target    = pstack.GetValue <FileMappingInfo>(ActivityParameterStack.TARGET);
            var workspace = pstack.GetValue <Workspace>(ActivityParameterStack.WORKSPACE);

            // Guard
            Ensure.That(target).IsNotNull();
            Ensure.That(workspace).IsNotNull();

            var aclfilepath = Path.Combine(workspace.WorkspacePath, target.MappingFilePath);

            aclfilepath += ".aclgene";

            // ACLファイルの作成を行います。
            //
            var data = new AclFileStructure();

            data.Version    = AclFileStructure.CURRENT_VERSION;
            data.LastUpdate = DateTime.Now;
            data.Data       = new KeyValuePair <string, string>[] {
                new KeyValuePair <string, string>("ACLHASH", target.AclHash)
            };

            using (var file = File.Create(aclfilepath))
            {
                Serializer.Serialize(file, data);
            }

            return(true);
        }
Exemplo n.º 2
0
        public IFileMappingInfo RegisterFile(FileInfo file, IFileMappingInfo fileMappingInfo)
        {
            var workspace = fileMappingInfo.GetWorkspace();
            var aclhash   = fileMappingInfo.AclHash;

            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(file.FullName);

            mLogger.Info($"aclfileLocalPath_Update={aclfileLocalPath_Update}");

            // 移動先のディレクトリがサブディレクトリを含む場合、存在しないサブディレクトリを作成します。
            var newFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, aclfileLocalPath_Update));

            Directory.CreateDirectory(newFileInfo.Directory.FullName);

            // ファイル移動
            var fromFile = file;
            var toFile   = new FileInfo(Path.Combine(workspace.PhysicalPath, aclfileLocalPath_Update + ".tmp"));

            mLogger.Info($"[ファイル移動] {file.FullName}を、{toFile.FullName}へ移動します。");
            File.Move(fromFile.FullName, toFile.FullName);

            // 仮想領域にACLファイルの作成
            var aclFileInfo = new FileInfo(Path.Combine(workspace.VirtualPath, aclfileLocalPath_Update) + ".aclgene");
            // インポート処理の場合は、仮想領域にフォルダがないためディレクトリを作成する。
            // 仮想領域での処理の場合は、フォルダが既に存在するはずなので、なにもしない。
            var dir = aclFileInfo.Directory.FullName;

            Directory.CreateDirectory(aclFileInfo.Directory.FullName);

            var data = new AclFileStructure()
            {
                Version    = AclFileStructure.CURRENT_VERSION,
                LastUpdate = DateTime.Now,
                Data       = new KeyValuePair <string, string>[] {
                    new KeyValuePair <string, string> ("ACLHASH", aclhash)
                }
            };

            using (var aclFile = File.Create(aclFileInfo.FullName)) {
                Serializer.Serialize(aclFile, data);
            }

            CleanAclFile(toFile);

            return(fileMappingInfo);
        }
        /// <summary>
        /// [LLD-03-05-01:01-01-01]
        /// </summary>
        private void file_create_normal(AppDbContext dbc, FileUpdateQueueItem item, Workspace workspace)
        {
            // 1. 対象ファイルが存在するかチェック
            if (!item.Target.Exists)
            {
                throw new ApplicationException("対象ファイルが指定位置に存在しません。");
            }

            // 2. 対象ファイルを、物理空間に移動する(ディレクトリが無い場合は、ディレクトリも作成する)
            //    一時ファイル名を使用する。
            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName, false);
            // 移動先のディレクトリがサブディレクトリを含む場合、
            // 存在しないサブディレクトリを作成します。
            var newFileInfo = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, aclfileLocalPath_Update));

            Directory.CreateDirectory(newFileInfo.Directory.FullName);

            var fromFilePath = new FileInfo(Path.Combine(workspace.VirtualSpacePath, aclfileLocalPath_Update));
            var toFilePath   = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, aclfileLocalPath_Update + ".tmp"));

            File.Move(fromFilePath.FullName, toFilePath.FullName);

            // 3. ACLファイルを仮想空間に作成する
            var aclfilepath = Path.Combine(workspace.VirtualSpacePath, aclfileLocalPath_Update) + ".aclgene";
            // ACLファイルの作成を行います。
            string aclhash = VfsLogicUtils.GenerateACLHash();
            var    data    = new AclFileStructure();

            data.Version    = AclFileStructure.CURRENT_VERSION;
            data.LastUpdate = DateTime.Now;
            data.Data       = new KeyValuePair <string, string>[] {
                new KeyValuePair <string, string>("ACLHASH", aclhash)
            };

            using (var file = File.Create(aclfilepath))
            {
                Serializer.Serialize(file, data);
            }

            // 4. ファイルマッピング情報を作成し、データベースに格納する
            var entity = new FileMappingInfo
            {
                AclHash         = aclhash,
                Workspace       = workspace,
                Mimetype        = "image/png",          // 未実装(テスト実装)
                MappingFilePath = aclfileLocalPath_Update,
                LostFileFlag    = false,
            };

            VfsLogicUtils.UpdateOrCreate(dbc, entity);
            dbc.SaveChanges();

            // 5. 一時ファイル名を、正しいファイル名にリネームする
            if (!File.Exists(toFilePath.FullName))
            {
                throw new ApplicationException(toFilePath.FullName + "が見つかりません");
            }
            var extFileName = Path.GetFileNameWithoutExtension(toFilePath.Name);

            toFilePath.MoveTo(Path.Combine(toFilePath.DirectoryName, extFileName));
        }
        /// <summary>
        /// [LLD-03-05-01:01-01-01]
        /// </summary>
        public void file_create_normal(FileUpdateQueueItem item, IWorkspace workspace)
        {
            // 1. 対象ファイルが存在するかチェック
            if (!item.Target.Exists)
            {
                throw new ApplicationException("対象ファイルが指定位置に存在しません。");
            }

            // 2. 対象ファイルを、物理空間に移動する(ディレクトリが無い場合は、ディレクトリも作成する)
            //    一時ファイル名を使用する。
            var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName);
            // 移動先のディレクトリがサブディレクトリを含む場合、
            // 存在しないサブディレクトリを作成します。
            var newFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, aclfileLocalPath_Update));

            Directory.CreateDirectory(newFileInfo.Directory.FullName);

            var fromFilePath = new FileInfo(Path.Combine(workspace.VirtualPath, aclfileLocalPath_Update));
            var toFilePath   = new FileInfo(Path.Combine(workspace.PhysicalPath, aclfileLocalPath_Update + ".tmp"));

            File.Move(fromFilePath.FullName, toFilePath.FullName);

            // 3. ACLファイルを仮想空間に作成する
            var aclfilepath = Path.Combine(workspace.VirtualPath, aclfileLocalPath_Update) + ".aclgene";
            // ACLファイルの作成を行います。
            string aclhash = VfsLogicUtils.GenerateACLHash();
            var    data    = new AclFileStructure();

            data.Version    = AclFileStructure.CURRENT_VERSION;
            data.LastUpdate = DateTime.Now;
            data.Data       = new KeyValuePair <string, string>[] {
                new KeyValuePair <string, string>("ACLHASH", aclhash)
            };

            using (var file = File.Create(aclfilepath))
            {
                Serializer.Serialize(file, data);
            }

            // 4. ファイルマッピング情報を作成し、データベースに格納する
            var entity = mFileMappingInfoRepository.New();

            entity.AclHash = aclhash;
            entity.SetWorkspace(workspace);
            entity.Mimetype        = "image/png"; // 未実装(テスト実装)
            entity.MappingFilePath = aclfileLocalPath_Update;
            entity.LostFileFlag    = false;
            mFileMappingInfoRepository.Save();

            // 5. 一時ファイル名を、正しいファイル名にリネームする
            if (!File.Exists(toFilePath.FullName))
            {
                throw new ApplicationException(toFilePath.FullName + "が見つかりません");
            }
            var extFileName = Path.GetFileNameWithoutExtension(toFilePath.Name);

            toFilePath.MoveTo(Path.Combine(toFilePath.DirectoryName, extFileName));

            // 6. コンテンツ情報の作成(Category作成→Content作成→タグ・ラベル作成)
            var content = UpdateContentFromFileMapping(entity);

            // 7. サムネイル作成
            GenerateArtifact(content, workspace);
        }