Пример #1
0
        /// <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);
        }
Пример #2
0
        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; // パースペクティブの起動完了
            }
        }
Пример #3
0
        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状態に遷移する
                }
            }
        }