private void RaiseEvent(LogNode logNode,bool isRootItem)
 {
     if (ItemAdded != null)
     {
         ItemAdded.Invoke(this, new LogNodeEvent(logNode, isRootItem));
     }
 }
        public void Consume(IEntryData entryData)
        {
            if (entryData.GetEntryType().FullName == "Whitelog.Interface.LogEntry")
            {
                var titleInfo = (entryData.GetProperties().ElementAt(2).GetValue(entryData) as GenericPackageData);
                int scopeId = (int) (entryData.GetProperties().ElementAt(1).GetValue(entryData));
                if (titleInfo.Type == "Whitelog.Core.OpenLogScopeTitle")
                {
                    int parentScopeId = (int) titleInfo.GetValue(1);
                    var node= new LogNode()
                    {
                        Time = (DateTime) entryData.GetProperties().ElementAt(0).GetValue(entryData),
                        Title = null,
                        Message = titleInfo.GetValue(0).ToString(),
                        Children = new List<LogNode>(),
                    };

                    m_openNodes.Add(scopeId,node);

                    LogNode parentNode;
                    if (m_openNodes.TryGetValue(parentScopeId, out parentNode))
                    {
                        parentNode.Children.Add(node);
                        RaiseEvent(parentNode,false);

                    }
                    else
                    {
                        LogNodes.Add(node);
                        RaiseEvent(node,true);
                    }
                }
                else if (titleInfo.Type == "Whitelog.Core.CloseLogScopeTitle")
                {
                    if (m_openNodes.ContainsKey(scopeId))
                    {
                        LogNode parentNode;
                        if (m_openNodes.TryGetValue(scopeId, out parentNode))
                        {
                            parentNode.Children.Add(new LogNode()
                                                    {
                                                        Message =  "<-",
                                                        Time = (DateTime)entryData.GetProperties().ElementAt(0).GetValue(entryData),
                                                        Title = null,
                                                    });
                            RaiseEvent(parentNode, false);
                        }
                        m_openNodes.Remove(scopeId);
                    }
                }
                else
                {
                    var node = new LogNode()
                               {
                                   Time = (DateTime) entryData.GetProperties().ElementAt(0).GetValue(entryData),
                                   Title = titleInfo.GetValue(1).ToString(),
                                   Message = titleInfo.GetValue(0).ToString(),
                               };
                    LogNode parentNode;
                    if (m_openNodes.TryGetValue(scopeId, out parentNode))
                    {
                        parentNode.Children.Add(node);
                        RaiseEvent(parentNode,false);
                    }
                    else
                    {
                        LogNodes.Add(node);
                        RaiseEvent(node,true);
                    }
                }
            }
        }
 public LogNodeEvent(LogNode logNode,bool isRootItem)
 {
     IsRootItem = isRootItem;
     LogNode = logNode;
 }