void FillCache(int itemIndex, int windowSize)
		{
			UIErrorHelper.CheckedExec(delegate
				{
					var list = SuperLog.getPagedEntries(_cookie, (uint)windowSize);
					if (list != null)
					{ 
						int i = 0;
						foreach (var dto in list.getEntries())
						{
							_viewCache[itemIndex + i++] = dto;
						}
					}
					var entries = new List<SuperLogDto>();
					for (int startIndex = _viewCache.Keys.Count-1, i=0 ; startIndex >= 0; startIndex--, i++) {
						if(i> pageSize)
						{
							_viewCache.Remove(startIndex);
						}
						else
						{
							ISuperLogEntry item;
							if (_viewCache.TryGetValue (startIndex, out item)) {
								var endTime = item.getEndTime ();
								var startTime = item.getStartTime ();
								var errorCode = (int)item.getErrorCode ();
								var errordesc = GetErrorDescription (errorCode);
								var dto = new SuperLogDto {
									Port = item.getServerPort ().ToString (),
									LoginDN = item.getLoginDN (),
									Operation = item.getOperation (),
									ErrorCode = errordesc,
									Duration = (endTime - startTime).ToString (),
									DurationLong = (long)(endTime - startTime),
									ClientIP = item.getClientIP (),
									String = item.getString ()
								};
								entries.Add (dto);
							}
						}
					}

					this.SuperLogsTableView.DataSource = new SuperLoggingTableViewDataSource (entries);
					this.SuperLogsTableView.ReloadData ();
				});
		}
		private void btnFilter_Click(object sender, EventArgs e)
		{
			UIErrorHelper.CheckedExec (delegate {
				var row = (int)CboColumns.SelectedIndex;
				var op = (int)CbOperator.SelectedIndex;
				if (row > 0 && !string.IsNullOrEmpty (TxtFilterValue.StringValue) && op >= 0) {
				
					var entries = new List<SuperLogDto> ();
					for (int startIndex = _viewCache.Keys.Count; startIndex >= 0; startIndex--) {
						ISuperLogEntry item;
						if (_viewCache.TryGetValue (startIndex, out item)) {
							var endTime = item.getEndTime ();
							var startTime = item.getStartTime ();
							var errorCode = (int)item.getErrorCode ();
							var errordesc = GetErrorDescription (errorCode);
							var dto = new SuperLogDto {
								Port = item.getServerPort ().ToString (),
								LoginDN = item.getLoginDN (),
								Operation = item.getOperation (),
								ErrorCode = errordesc,
								Duration = (endTime - startTime).ToString (),
								DurationLong = (long)(endTime - startTime),
								ClientIP = item.getClientIP (),
								String = item.getString ()
							};
							entries.Add (dto);
						}
					}

					var filtered = new List<SuperLogDto> ();
					SuperLoggingColumn column; 
					Operation oper; 

					if (Enum.TryParse (row.ToString (), out column) && Enum.TryParse (op.ToString (), out oper)) {
						switch (column) {
						case SuperLoggingColumn.Port:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.Port.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals: 
								filtered = entries.Where (x => x.Port == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.Port.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.Port.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						case SuperLoggingColumn.LoginDN:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.LoginDN.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals: 
								filtered = entries.Where (x => x.LoginDN == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.LoginDN.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.LoginDN.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						case SuperLoggingColumn.Operation:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.Operation.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals: 
								filtered = entries.Where (x => x.Operation == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.Operation.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.Operation.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						case SuperLoggingColumn.ErrorCode:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.ErrorCode.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals:
								filtered = entries.Where (x => x.ErrorCode == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.ErrorCode.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.ErrorCode.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						case SuperLoggingColumn.Duration:
							long value;
							if (long.TryParse (TxtFilterValue.StringValue, out value)) {
								switch (oper) {
								case Operation.StartsWith:
									filtered = entries.Where (x => x.Duration.StartsWith (TxtFilterValue.StringValue)).ToList ();
									break;
								case Operation.GreaterThan:
									filtered = entries.Where (x => x.DurationLong > value).ToList ();
									break;
								case Operation.Equals:
									filtered = entries.Where (x => x.DurationLong == value).ToList ();
									break;
								case Operation.EndsWith: 
									filtered = entries.Where (x => x.Duration.EndsWith (TxtFilterValue.StringValue)).ToList ();
									break;
								case Operation.LessThan:
									filtered = entries.Where (x => x.DurationLong < value).ToList ();
									break;
								case Operation.Contains:
									filtered = entries.Where (x => x.Duration.Contains (TxtFilterValue.StringValue)).ToList ();
									break;
								default:
									break;
								}
							} else
								throw new Exception ("The filer value is not a valid duration");
							break;
						case SuperLoggingColumn.ClientIP:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.ClientIP.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals:
								filtered = entries.Where (x => x.ClientIP == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.ClientIP.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.ClientIP.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						case SuperLoggingColumn.String:
							switch (oper) {
							case Operation.StartsWith: 
							case Operation.GreaterThan:
								filtered = entries.Where (x => x.String.StartsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Equals:
								filtered = entries.Where (x => x.String == TxtFilterValue.StringValue).ToList ();
								break;
							case Operation.EndsWith: 
							case Operation.LessThan:
								filtered = entries.Where (x => x.String.EndsWith (TxtFilterValue.StringValue)).ToList ();
								break;
							case Operation.Contains:
								filtered = entries.Where (x => x.String.Contains (TxtFilterValue.StringValue)).ToList ();
								break;
							default:
								break;
							}
							break;
						}
						this.SuperLogsTableView.DataSource = new SuperLoggingTableViewDataSource (filtered);
						this.SuperLogsTableView.ReloadData ();
					}
				}
			});
		}