protected override void Execute(CodeActivityContext context) { IWorkflowContext workflowContext = context.GetExtension <IWorkflowContext>(); ParameterStack pstack = context.GetValue <ParameterStack>(this.Parameter); var aclhash = context.GetValue <string>(Aclhash); var outputname = context.GetValue <string>(OutputName); var workspace = pstack.GetValue <Workspace>(ActivityParameterStack.WORKSPACE); var fileinfo = pstack.GetValue <FileSystemInfo>(ActivityParameterStack.WORKSPACE_FILEINFO); // Guard Ensure.That(workspace).IsNotNull(); Ensure.That(fileinfo).IsNotNull(); var entity = new FileMappingInfo { AclHash = aclhash, Workspace = workspace, Mimetype = "image/png", // 未実装(テスト実装) MappingFilePath = workspace.TrimWorekspacePath(fileinfo.FullName, false), }; pstack.SetValue(outputname, entity); }
/// <summary> /// [LLD-03-05-01:01-01-02] /// </summary> private void file_create_acl(AppDbContext dbc, FileUpdateQueueItem item, Workspace 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)を突き合わせる FileMappingInfo entity = null; var repo = new FileMappingInfoRepository(dbc); entity = repo.LoadByAclHash(aclhash); if (entity == null) { throw new ApplicationException(); } if (entity.Workspace == null || entity.Workspace.Id != workspace.Id) { throw new ApplicationException(); } // 5. ファイルマッピング情報を参照し、物理ファイルが存在するかチェックする var phyFileInfo = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, entity.MappingFilePath)); if (!phyFileInfo.Exists) { throw new ApplicationException(); } // 6. 物理ファイルを、ACLファイルのパスに対応する物理空間のパスへ移動する // 移動先が、同じ場所となる場合は処理しない。 var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName, false); var extFilePath = Path.Combine(Path.GetDirectoryName(aclfileLocalPath_Update), Path.GetFileNameWithoutExtension(aclfileLocalPath_Update)); var toFileInfo = new FileInfo(Path.Combine(workspace.PhysicalSpacePath, extFilePath)); if (phyFileInfo.FullName != toFileInfo.FullName) { Directory.CreateDirectory(toFileInfo.Directory.FullName); File.Move(phyFileInfo.FullName, toFileInfo.FullName); // 7. ファイルマッピング情報をDBに書き込む(コンテキスト初期化) entity = repo.LoadByAclHash(aclhash); entity.MappingFilePath = extFilePath; // 新しいファイルマップパス dbc.SaveChanges(); } }
private Artifact ReadByFileMappingInfo(FileMappingInfo fileMappingInfo, DbContext dbcontext) { var repo = new ArtifactRepository(dbcontext); return(repo.LoadByFileMappingInfo(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)); }
public Artifact LoadByFileMappingInfo(FileMappingInfo filemappinginfo) { return(_dbset.Where(prop => prop.FileMappingInfo.Id == filemappinginfo.Id).FirstOrDefault()); }