/// <summary> /// 後勝調停モード /// </summary> private DoArbitrationResult doArbitration_AWAB(Perspective pPerspective) { //_logger.Debug("AWAB調停処理を開始します"); DoArbitrationResult result = new DoArbitrationResult(); WorkflowManagerContext context = new WorkflowManagerContext(); foreach (var frameName in pPerspective.FrameList) { bool bPreEndSuccess = true; bool bPreStartSuccess = false; Content wEndContent = null; Content startContent = pPerspective.GetFrameContent(frameName); var stack = _FrameList.GetContentStack(frameName); if (stack.Count > 0) { //_logger.Debug("{}フレームの最上位コンテントの終了ライフサイクル処理を開始します", frameName); wEndContent = stack.Peek(); if (wEndContent != startContent) { bPreEndSuccess = wEndContent.Stop(); } } if (bPreEndSuccess) { startContent = pPerspective.GetFrameContent(frameName); //_logger.Debug("{}フレームに新規コンテントの開始ライフサイクル処理を開始します", frameName); bPreStartSuccess = startContent.Begin(pPerspective); if (bPreStartSuccess) { if (stack.Count > 0) { wEndContent = stack.Pop(); // スタックから除去する //_logger.Debug("{}フレームのコンテントスタックから除去します", frameName); result.EndContentList.Add(wEndContent); } //_logger.Debug("{}フレームのコンテントスタックに新規コンテントを追加します。", frameName); // 新しいパースペクティブのコンテントをスタックに積む stack.Push(startContent); result.StartContentList.Add(startContent); } else { //_logger.Warn("{}フレームの新規コンテントを追加に失敗しました。ロールバックを行います。", frameName); // TODO: Stackのコンテント(wEndContent)のロールバック } } else { //_logger.Warn("{}フレームの最上位コンテントの終了ライフサイクル処理に失敗しました", frameName); } } return(result); }
private DoArbitrationResult doArbitration_BWAB(Perspective pPerspective) { //_logger.Debug("BWAB調停処理を開始します"); DoArbitrationResult result = new DoArbitrationResult(); foreach (var frameName in pPerspective.FrameList) { bool bPreStartSuccess = false; Content startContent = null; // コンテントを作成 var stack = _FrameList.GetContentStack(frameName); if (stack.Count > 0) { //_logger.Debug("{}フレームの最上位コンテントが存在するためスキップします。", frameName); continue; } startContent = pPerspective.GetFrameContent(frameName); //_logger.Debug("{}フレームに新規コンテントの開始ライフサイクル処理を開始します", frameName); bPreStartSuccess = startContent.Begin(pPerspective); if (bPreStartSuccess) { //_logger.Debug("{}フレームのコンテントスタックに新規コンテントを追加します。", frameName); // 新しいパースペクティブのコンテントをスタックに積む stack.Push(startContent); result.StartContentList.Add(startContent); } else { //_logger.Warn("{}フレームの新規コンテントを追加に失敗しました。ロールバックを行います。", frameName); // TODO: Stackのコンテント(wEndContent)のロールバック } } return(result); }
private DoArbitrationResult doArbitration_INTRCOOR(Perspective pPerspective) { //_logger.Debug("INTRCOOR調停処理を開始します"); DoArbitrationResult result = new DoArbitrationResult(); List <Perspective> clearPerspectiveList = new List <Perspective>(); // クリアするPerspective List <Content> restartContentList = new List <Content>(); // すべてのフレームを巡回し、コンテントをサスペンド状態にする foreach (var frameName in pPerspective.FrameList) { var stack = _FrameList.GetContentStack(frameName); foreach (var content in stack) { if (pPerspective.Contents.Contains(content)) { // 起動しようとしているPerspectiveと同じコンテントが含まれている場合は、 // 終了判定は行わない。 restartContentList.Add(content); } else { bool bEnd = content.Suspend(); if (bEnd) { result.EndContentList.Add(content); } else { // result.EndContentListのすべてのContentをロールバックする } } } } foreach (var frameName in pPerspective.FrameList) { bool bPreStartSuccess = false; Content startContent = null; var stack = _FrameList.GetContentStack(frameName); startContent = pPerspective.GetFrameContent(frameName); //_logger.Debug("{}フレームに新規コンテントの開始ライフサイクル処理を開始します", frameName); bPreStartSuccess = startContent.Begin(pPerspective); if (bPreStartSuccess) { //_logger.Debug("{}フレームのコンテントスタックに新規コンテントを追加します。", frameName); // 新しいパースペクティブのコンテントをスタックに積む stack.Push(startContent); result.StartContentList.Add(startContent); } else { //_logger.Warn("{}フレームの新規コンテントを追加に失敗しました。ロールバックを行います。", frameName); // TODO: Stackのコンテント(wEndContent)のロールバック } } return(result); }