Moved Pithos data and logs from the GRNET folder under AppData to a GRNET\PITHOS...
[pithos-ms-client] / trunk / Pithos.Client.WPF / LogConsole / LogConsoleViewModel.cs
1 // -----------------------------------------------------------------------
2 // <copyright file="LogConsoleViewModel.cs" company="Microsoft">
3 // TODO: Update copyright text.
4 // </copyright>
5 // -----------------------------------------------------------------------
6
7 using System.ComponentModel.Composition;
8 using System.Reflection;
9 using Caliburn.Micro;
10 using log4net.Appender;
11 using log4net.Core;
12 using log4net.Repository.Hierarchy;
13
14 namespace Pithos.Client.WPF.LogConsole
15 {
16     using System;
17     using System.Collections.Generic;
18     using System.Linq;
19     using System.Text;
20
21     /// <summary>
22     /// TODO: Update summary.
23     /// </summary>
24     [Export(typeof(LogConsoleViewModel))]
25     public class LogConsoleViewModel:Screen
26     {
27         private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
28
29         private readonly MemoryAppender _memoryAppender;
30         private BindableCollection<LoggingEvent> _events;
31
32         public LogConsoleViewModel()
33         {
34             var loggerRepository = (Hierarchy)log4net.LogManager.GetRepository();
35
36             var appenders = loggerRepository.GetAppenders();
37             
38             _memoryAppender= appenders.OfType<MemoryAppender>().FirstOrDefault();
39             if (_memoryAppender == null)
40             {
41                 _memoryAppender = new MemoryAppender{Name="MemoryAppender"};
42                 _memoryAppender.ActivateOptions();
43                 loggerRepository.Root.AddAppender(_memoryAppender);
44                 loggerRepository.RaiseConfigurationChanged(EventArgs.Empty);
45             }
46             RefreshEvents();
47         }
48
49         private void RefreshEvents()
50         {
51             Events =new BindableCollection<LoggingEvent>(_memoryAppender.GetEvents());
52         }
53
54         protected BindableCollection<LoggingEvent> Events
55         {
56             get {
57                 return _events;
58             }
59             set {
60                 _events = value;
61                 NotifyOfPropertyChange(()=>Events);
62             }
63         }
64     }
65 }