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); }
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); }