示例#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
        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);
        }
示例#3
0
        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);
        }