public override void Execute(ReactiveStreamContext context) { // TODO: SourcePathのファイルが存在しなかったら終了 var sourcePath = context.SourcePath; var tempOutputFolder = context.TempOutputFolder; try { var sandbox = CreateSandbox(); if (sandbox.Execute(sourcePath, tempOutputFolder)) { context.SetNextWorkingPath(sandbox.ResultPath); } else { context.Failed("Execute failed or timeout"); } } catch (Exception e) { context.Failed("ReactiveStreamFailed on Update", e); } }
private string FinalizeFile(ReactiveStreamContext context, string outputName, DirectoryInfo destFolder) { var outputFileInfo = new FileInfo(context.SourcePath); if (false == outputFileInfo.Exists) { return null; } var extention = Path.GetExtension(context.SourcePath); var finalizeFilePath = Path.Combine( destFolder.FullName, Path.ChangeExtension( outputName, extention ) ); try { var destFileInfo = new FileInfo(finalizeFilePath); if (destFileInfo.Exists) { destFileInfo.Delete(); } outputFileInfo.CopyTo(destFileInfo.FullName); return finalizeFilePath; } catch (Exception e) { context.Failed("ReactiveStreamFailed on Finalize file", e); } return null; }
private string FinalizeFolder(ReactiveStreamContext context, string outputName, DirectoryInfo destFolder) { var outputFolderInfo = new DirectoryInfo(context.SourcePath); if (false == outputFolderInfo.Exists) { return null; } var finalizeFolderPath = Path.Combine( destFolder.FullName, outputName ); var finalizeFolderInfo = new DirectoryInfo(finalizeFolderPath); try { if (finalizeFolderInfo.Exists) { finalizeFolderInfo.Delete(); } outputFolderInfo.MoveTo(finalizeFolderPath); return finalizeFolderPath; } catch (Exception e) { context.Failed("ReactiveStreamFailed on Finalize folder", e); } return null; }
public override void Execute(ReactiveStreamContext context) { // TODO: OutputNameを状態として保持するのは変やで、一時変数に変更しよう var outputPath = FormatedString(this.OutputNamePattern, context); try { // やること // アウトプットしたいファイルまたはフォルダをNameに変更した上でDestinationFolderに移動させる // 例外状況 // DestinationFolderとWorkFolderが同じ場合、かつ // 拡張子を含むOriginalのファイル名とOutputPathのファイル名が同じ場合、かつ // IsProtecteOriginalがtrueのときに // Destinationへの配置が実行できない状況が生まれる // 検証が必要:フォルダでも同様に配置不可な状況が検知できるか var destFolder = GetDestinationFolder(); if (context.WorkFolder.FullName == destFolder.FullName && Path.GetFileName(context.OriginalPath) == Path.GetFileName(context.SourcePath) && context.IsProtectOriginal == true ) { // Finalizeに失敗? outputPath = null; throw new Exception("OutputItem cant deployment to destination folder."); } // OutputPathで指定されたファイルをfinalizer.DestinationFolderにコピーする // コピーする前にファイル名をNameに変更する(拡張子はOutputPathのものを引き継ぐ) string outputName = Path.GetFileNameWithoutExtension(context.OriginalPath); if (false == String.IsNullOrWhiteSpace(outputName)) { outputName = outputPath; } if (context.IsFile) { outputPath = FinalizeFile(context, outputName, destFolder); } else { outputPath = FinalizeFolder(context, outputName, destFolder); } if (outputPath != null) { context.Complete(outputPath); } } catch (Exception e) { context.Failed("ReactiveStreamFailed on Finalize", e); } }