Example #1
0
        private object ProcessData(DataTable dataTable, ILogger logger, IEnumerable <PageLifeCycleMessage> pageLifeCycleMessages)
        {
            if (dataTable != null)
            {
                var controlList = new List <ControlTreeItemModel>();
                var nodeGraph   = new ControlTreeItemTrackModel {
                    ControlId = "ROOT", Indent = -1
                };
                var nodeList = new Dictionary <string, ControlTreeItemTrackModel> {
                    { "ROOT", nodeGraph }
                };

                logger.Debug("Start processing `Trace_Control_Tree`");

                var enumerator = dataTable.Rows.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var item    = new ControlTreeItemModel();
                    var current = enumerator.Current as DataRow;

                    item.ParentControlId = current["Trace_Parent_Id"].CastOrDefault <string>();
                    item.ControlId       = current["Trace_Control_Id"].CastOrDefault <string>();

                    var num = nodeList[item.ParentControlId].Indent + 1;
                    nodeList[item.ControlId] = new ControlTreeItemTrackModel
                    {
                        ParentControlId = item.ParentControlId,
                        ControlId       = item.ControlId,
                        Indent          = num,
                        Record          = item
                    };
                    nodeList[item.ParentControlId].Children.Add(nodeList[item.ControlId]);

                    //This logic shouldn't be here
                    for (var index = 0; index < num; ++index)
                    {
                        item.ControlId = "\t" + item.ControlId;
                    }

                    item.Level            = num;
                    item.Type             = current["Trace_Type"].CastOrDefault <string>();
                    item.RenderSize       = current["Trace_Render_Size"].CastOrDefault <int>();
                    item.ViewstateSize    = current["Trace_Viewstate_Size"].CastOrDefault <int>();
                    item.ControlstateSize = current["Trace_Controlstate_Size"].CastOrDefault <int>();

                    controlList.Add(item);
                }

                logger.Debug("Finish processing `Trace_Control_Tree` - Count {0}", nodeList.Count);

                viewStateFormatter.Process(nodeGraph);
                dataBindFormatter.Process(nodeGraph, pageLifeCycleMessages);

                return(controlList);
            }

            return(null);
        }
Example #2
0
        public void Process(ControlTreeItemTrackModel root)
        {
            Logger.Debug("Start merginging in the viewState data to the ControlTree");

            var viewState = HttpContext.Current.Items["_GlimpseWebFormViewState"] as Pair;
            var controlTypes = HttpContext.Current.Items["_GlimpseWebFormControlTreeType"] as Dictionary<string, Type>;

            if (viewState != null && root.Children.Count > 0)
            {
                Logger.Debug("Process Rroot node for viewState data to the ControlTree mapping");
                ProcessRecord(root.Children[0], viewState, controlTypes);
            }

            Logger.Debug("Finish merginging in the viewState data to the ControlTree");
        }
Example #3
0
        private void ProcessRecord(ControlTreeItemTrackModel item, Dictionary<string, List<DataBindParameterModel>> dataBindInfo, IEnumerable<PageLifeCycleMessage> pageLifeCycleMessages)
        {
            if (dataBindInfo.ContainsKey(item.ControlId))
            {
                item.Record.DataBindParameters = new List<DataBindModel>();
                var dataBindModel = new DataBindModel(null, null);
                foreach (var parameterModel in dataBindInfo[item.ControlId])
                {
                    var dataBindParameters = new List<ModelBindParameter>();
                    var time = DateTime.MinValue;
                    foreach (var parameter in parameterModel.DataBindParameters)
                    {
                        dataBindParameters.Add(parameter);
                    }

                    var lifeCycleEvent = pageLifeCycleMessages.First(p => p.Offset <= parameterModel.Offset);
                    if (dataBindModel.Event == lifeCycleEvent.EventName)
                    {
                        var multipleEventParameters = dataBindModel.Parameters as List<EventParameterModel>;
                        if (multipleEventParameters == null)
                        {
                            var existingEventParameters = (List<ModelBindParameter>)dataBindModel.Parameters;
                            multipleEventParameters = new List<EventParameterModel>();
                            dataBindModel.Parameters = multipleEventParameters;
                            multipleEventParameters.Add(new EventParameterModel(0, existingEventParameters));
                        }

                        multipleEventParameters.Add(new EventParameterModel(multipleEventParameters.Count, dataBindParameters));
                    }
                    else
                    {
                        dataBindModel = new DataBindModel(lifeCycleEvent.EventName, dataBindParameters);
                        item.Record.DataBindParameters.Add(dataBindModel);
                    }
                }
            }

            foreach (var child in item.Children)
            {
                ProcessRecord(child, dataBindInfo, pageLifeCycleMessages);
            }
        }
Example #4
0
 private void ProcessRecord(ControlTreeItemTrackModel item, object viewstate, Dictionary<string, Type> controlTypes)
 {
     if (viewstate != null)
     {
         var viewStateType = viewstate.GetType();
         if (viewStateType == typeof(Pair))
         {
             var pair = (Pair)viewstate;
             if (controlTypes.ContainsKey(item.ControlId))
             {
                 item.Record.Viewstate = ProcessData(controlTypes[item.ControlId], item.Record.Type, pair.First);
                 ProcessRecord(item, pair.Second, controlTypes);
             }
             else
             {
                 Logger.Warn("Could not locate control {0} in controlTypes", item.ControlId);
             }
         }
         else if (viewStateType == typeof(Triplet))
         {
             var triplet = (Triplet)viewstate;
             item.Record.Viewstate = ProcessData(controlTypes[item.ControlId], item.Record.Type, triplet.First);
                 
             // NEED TO DO SOMETHING WITH SECOND ITEM?
             ProcessRecord(item, triplet.Third, controlTypes);
         }
         else if (viewStateType == typeof(ArrayList))
         {
             var list = (ArrayList)viewstate;
             for (var i = 0; i < list.Count; i = i + 2)
             {
                 var index = (int)list[i];
                 ProcessRecord(item.Children[index], list[i + 1], controlTypes);
             }
         }
     }
 }
Example #5
0
 public void Process(ControlTreeItemTrackModel root, IEnumerable<PageLifeCycleMessage> pageLifeCycleMessages)
 {
     ProcessRecord(root, (Dictionary<string, List<DataBindParameterModel>>)HttpContext.Current.Items["_GlimpseWebFormDataBinding"], pageLifeCycleMessages.OrderByDescending(p => p.Offset));
 }
Example #6
0
        private object ProcessData(DataTable dataTable, ILogger logger)
        {
            if (dataTable != null)
            {
                var controlList = new List<ControlTreeItemModel>(); 
                var nodeGraph = new ControlTreeItemTrackModel {ControlId = "ROOT", Indent = -1}; 
                var nodeList = new Dictionary<string, ControlTreeItemTrackModel> {{"ROOT", nodeGraph}};

                logger.Debug("Start processing `Trace_Control_Tree`");

                var enumerator = dataTable.Rows.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var item = new ControlTreeItemModel();
                    var current = enumerator.Current as DataRow;

                    item.ParentControlId = current["Trace_Parent_Id"].CastOrDefault<string>();
                    item.ControlId = current["Trace_Control_Id"].CastOrDefault<string>();

                    var num = nodeList[item.ParentControlId].Indent + 1;
                    nodeList[item.ControlId] = new ControlTreeItemTrackModel
                    {
                        ParentControlId = item.ParentControlId,
                        ControlId = item.ControlId,
                        Indent = num,
                        Record = item
                    };
                    nodeList[item.ParentControlId].Children.Add(nodeList[item.ControlId]);

                    //This logic shouldn't be here
                    for (var index = 0; index < num; ++index)
                        item.ControlId = "\t" + item.ControlId;

                    item.Level = num;
                    item.Type = current["Trace_Type"].CastOrDefault<string>();
                    item.RenderSize = current["Trace_Render_Size"].CastOrDefault<int>();
                    item.ViewstateSize = current["Trace_Viewstate_Size"].CastOrDefault<int>();
                    item.ControlstateSize = current["Trace_Controlstate_Size"].CastOrDefault<int>();

                    controlList.Add(item);
                }

                logger.Debug("Finish processing `Trace_Control_Tree` - Count {0}", nodeList.Count);

                viewStateFormatter.Process(nodeGraph);

                return controlList;
            }

            return null;
        }