예제 #1
0
        /// <summary>
        /// Appends the marble and create new diagrams tab per keyword
        /// </summary>
        public void AppendMarble(MarbleItemViewModel value)
        {
            #region Pause Switching

            if (PauseState == RESUME_TEXT)
            {
                // route the traffic to a replay subject during the pause stage
                _pauseSubject.OnNext(value);
                return;
            }

            #endregion Pause Switching

            #region TabTemplateSelectorPlugins

            foreach (ITabPlugin tab in MarbleController.TabTemplateSelectorPlugins)
            {
                try
                {
                    tab.TabModel.AppendMarble(value);
                }
                #region Exception Handling

                catch (Exception ex)
                {
                    TraceSourceMonitorHelper.Error("TabTemplateSelectorPlugin filed: {0}", ex);
                }

                #endregion Exception Handling
            }

            #endregion TabTemplateSelectorPlugins

            foreach (var keyword in value.Item.Keywords)
            {
                #region Add MarbleDiagramsViewModel if not exists

                var diagrams = _diagramsByKeywords.GetOrAdd(keyword, key =>
                {
                    var dgm = new MarbleDiagramsViewModel(keyword, this);
                    Tabs.AddAsync(dgm);
                    return(dgm);
                });

                #endregion Add MarbleDiagramsViewModel if not exists

                diagrams.AppendMarble(value);
            }

            #region InterceptionPlugins

            foreach (var plugin in MarbleController.InterceptionPlugins)
            {
                try
                {
                    plugin.AppendMarble(value.Item);
                }

                #region Exception Handling

                catch (Exception ex)
                {
                    TraceSourceMonitorHelper.Error("InterceptionPlugin filed: {0}", ex);
                }

                #endregion Exception Handling
            }

            #endregion InterceptionPlugins
        }