/// <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); }
internal void LifecicleStart() { // すべてのResume状態のコンテントが、LifecicleStartを呼び出しているかチェックする var r = from u in Contents where u.Status == ContentStatus.Resume && u.StartCompleteFlag == false select u; // すべてのResume状態コンテントがLifecicleStart済みならば、 if (r.Count() == 0) { // Stop状態のコンテントを、Suspend/End状態へ遷移する var r_prestopcontent = from u in Contents where u.Status == ContentStatus.Stop select u; WorkflowManagerContext context = new WorkflowManagerContext(); foreach (var content in r_prestopcontent) { content.Forward(); // Stop状態コンテントのForwardなので、Suspend/End状態に遷移する } // Resume状態コンテントのForward(Run状態へ遷移) var rContentResume = from u in Contents where u.Status == ContentStatus.Resume select u; foreach (var content in rContentResume) { DoPerspectiveStart(content.Perspective); } // End状態コンテントのForward(Idle状態へ遷移) var rContentEnd = from u in Contents where u.Status == ContentStatus.End select u; foreach (var content in rContentEnd) { DoPerspectiveEnd(content.Perspective); } _PerspectiveProcessingStartFlag = false; // パースペクティブの起動完了 } }
internal void LifecicleStop() { // すべてのStop状態のコンテントが、LifecicleStopを呼び出しているかチェックする var r = from u in Contents where (u.Status == ContentStatus.PreStop || u.Status == ContentStatus.Stop) && u.StopCompleteFlag == false select u; // すべてのStop状態コンテントがLifecicleStop済みならば、 if (r.Count() == 0) { // PreResume状態のコンテントをResume状態へ遷移する var r_preresumecontent = from u in Contents where u.Status == ContentStatus.PreResume select u; WorkflowManagerContext context = new WorkflowManagerContext(); foreach (var content in r_preresumecontent) { content.Forward(); // PreResume状態コンテントのForwardなので、Resume状態に遷移する } } }