예제 #1
0
        public void FilterLogTabItems(FilterCommand filterIntent = FilterCommand.Filter)
        {
            try
            {
                List <FilterFileItem> filterFileItems = new List <FilterFileItem>(_filterViewModel.FilterList());
                SetStatus(string.Format("filterLogTabItems:enter filterIntent: {0}", filterIntent));
                LogFile logFile;

                // get current log file
                if (_logFileManager.FileManager.Count > 0)
                {
                    logFile = (LogFile)CurrentFile();
                }
                else
                {
                    return;
                }

                LogTabViewModel logTab = (LogTabViewModel)TabItems[SelectedIndex];

                // dont check filter need if intent is to reset list to current filter or to show all
                if (filterIntent == FilterCommand.Filter)
                {
                    FilterNeed filterNeed = _filterViewModel.CompareFilterList(GetPreviousFilter());
                    SetStatus(string.Format("filterLogTabItems: filterNeed: {0}", filterNeed));

                    switch (filterNeed)
                    {
                    case FilterNeed.ApplyColor:
                    {
                        logTab.ContentList = _logFileManager.ApplyColor(logFile.ContentItems, filterFileItems);
                        SaveCurrentFilter(filterFileItems);
                        return;
                    }

                    case FilterNeed.Current:
                    {
                        if (PreviousIndex == SelectedIndex)
                        {
                            SetStatus("filterLogTabItems:no change");
                            return;
                        }

                        break;
                    }

                    case FilterNeed.ShowAll:
                    {
                        filterIntent = FilterCommand.ShowAll;
                        break;
                    }

                    case FilterNeed.Filter:
                        break;

                    case FilterNeed.Unknown:

                    default:
                        SaveCurrentFilter(filterFileItems);
                        return;
                    }
                }

                SetCurrentStatus(CurrentStatusSetting.filtering);

                switch (filterIntent)
                {
                case FilterCommand.Filter:
                {
                    SetStatus(string.Format("switch:Filter: filterIntent:{0}", filterIntent));
                    logTab.ContentList = _logFileManager.ApplyColor(
                        _logFileManager.ApplyFilter(
                            logTab,
                            logFile,
                            filterFileItems,
                            filterIntent),
                        filterFileItems);
                    SetCurrentStatus(CurrentStatusSetting.filtered);
                    break;
                }

                case FilterCommand.Hide:
                {
                    SetStatus(string.Format("switch:Hide: filterIntent:{0}", filterIntent));
                    logTab.ContentList = new ObservableCollection <LogFileItem>(logFile.ContentItems.Where(x => x.FilterIndex > -2));
                    SetCurrentStatus(CurrentStatusSetting.filtered);
                    break;
                }

                case FilterCommand.ShowAll:
                {
                    SetStatus(string.Format("switch:ShowAll: filterIntent:{0}", filterIntent));
                    logTab.ContentList = logFile.ContentItems;
                    break;
                }

                case FilterCommand.Unknown:
                default:
                {
                    break;
                }
                }

                // update line total counts
                LineTotals = string.Format("{0}/{1}", logTab.ContentList.Count, logFile.ContentItems.Count);

                // set current status message
                if (logTab.ContentList.Count == logFile.ContentItems.Count)
                {
                    SetCurrentStatus(CurrentStatusSetting.showing_all);
                }
                else if (_filterViewModel.QuickFindItem.Enabled)
                {
                    SetCurrentStatus(CurrentStatusSetting.quick_filtered);
                }
                else
                {
                    SetCurrentStatus(CurrentStatusSetting.filtered);
                }

                SaveCurrentFilter(filterFileItems);
            }
            catch (Exception e)
            {
                SetStatus("FilterLogTabItems:exception" + e.ToString());
            }
        }
예제 #2
0
        public FilterNeed CompareFilterList(List <FilterFileItem> previousFilterFileItems)
        {
            SetStatus("CompareFilterList: enter");

            FilterNeed            retval        = FilterNeed.Unknown;
            List <FilterFileItem> currentItems  = FilterList();
            List <FilterFileItem> previousItems = previousFilterFileItems;

            if (previousItems == null && currentItems != null)
            {
                SetStatus("CompareFilterList: previous null, current not null");
                retval = FilterNeed.Filter;
            }
            else if (currentItems == null)
            {
                SetStatus("CompareFilterList: current null");
                retval = FilterNeed.ShowAll;
            }
            else if (currentItems.Count == 0)
            {
                SetStatus("CompareFilterList: current count = 0");
                retval = FilterNeed.ShowAll;
            }
            else if (previousItems.Count == 0)
            {
                SetStatus("CompareFilterList: previous count = 0");
                retval = FilterNeed.Filter;
            }
            else if (currentItems.Count > 0 &&
                     previousItems.Count > 0 &&
                     currentItems.Count == previousItems.Count)
            {
                SetStatus("CompareFilterList: previous not null, current not null, count is same");
                int i = 0;
                foreach (FilterFileItem previousItem in previousItems)
                {
                    FilterFileItem currentItem = currentItems[i++];
                    if (currentItem.Enabled != previousItem.Enabled
                        | currentItem.Exclude != previousItem.Exclude
                        | currentItem.Include != previousItem.Include
                        | currentItem.Regex != previousItem.Regex
                        | currentItem.Filterpattern != previousItem.Filterpattern
                        | currentItem.CaseSensitive != previousItem.CaseSensitive
                        | currentItem.Index != previousItem.Index)
                    {
                        retval = FilterNeed.Filter;
                        SetStatus("CompareFilterList: there is a difference in filter items. setting to filter.");
                        break;
                    }
                    else if (currentItem.BackgroundColor != previousItem.BackgroundColor ||
                             currentItem.ForegroundColor != previousItem.ForegroundColor)
                    {
                        retval = FilterNeed.ApplyColor;
                        SetStatus("CompareFilterList: there is a difference in filter item color. setting to apply color.");
                        break;
                    }

                    //SetStatus("CompareFilterList: there is no difference in each filter item. setting to current.");
                    retval = FilterNeed.Current;
                }
            }
            else if (currentItems.Count > 0 &&
                     previousItems.Count > 0 &&
                     currentItems.Count < previousItems.Count)
            {
                SetStatus("CompareFilterList: current items count less than previous items count");
                retval = FilterNeed.Filter;
            }
            else if (currentItems.Count > 0 &&
                     previousItems.Count > 0 &&
                     currentItems.Count > previousItems.Count)
            {
                SetStatus("CompareFilterList: current items count greater than previous items count");
                retval = FilterNeed.Filter;
            }
            else
            {
                SetStatus("CompareFilterList: unknown");
                retval = FilterNeed.Filter;
            }

            SetStatus(string.Format("CompareFilterList:returning:{0}, previous count:{1}, current count:{2}", retval, previousItems.Count, currentItems.Count));
            // WriteFilterList(currentItems, "current items"); WriteFilterList(previousItems,
            // "previous Items");

            return(retval);
        }
예제 #3
0
        private WorkerItem ModifiedFilterFile()
        {
            SetStatus("Parser:ModifiedFilterFile:enter");
            List <IFile <FilterFileItem> > currentFilterFiles = CurrentFilterFiles();
            FilterFile currentFilterFile = CurrentFilterFile();

            //LogFile currentLog = (LogFile)_logViewModel.CurrentFile();

            if (currentFilterFiles == null) // || currentFilterFile == null)
            {
                // SyncFilterFiles();
                return(new WorkerItem());
            }

            if (currentFilterFiles.Count > 0 && _previousFilterFiles.Count == currentFilterFiles.Count)
            {
                SetStatus("Parser:ModifiedFilterFile:same count");
                WorkerItem filterFileWorkerItem = new WorkerItem()
                {
                    WorkerModification = WorkerItem.Modification.Unknown,
                    FilterFile         = currentFilterFile,
                    LogFile            = (LogFile)_logViewModel.CurrentFile()
                };

                FilterNeed filterNeed = FilterNeed.Unknown;
                //if (_previousFilterFiles.Contains(currentFilterFile))
                if (_previousFilterFiles.Exists(x => x.Tag == currentFilterFile.Tag))
                {
                    SetStatus("Parser:ModifiedFilterFile:have previous version");
                    FilterFile previousVersionFilterFile = _previousFilterFiles.First(x => x.Tag == currentFilterFile.Tag);
                    filterNeed = _FilterViewModel.CompareFilterList(previousVersionFilterFile.ContentItems.ToList());
                }
                else
                {
                    filterNeed = FilterNeed.Filter;
                }

                if (currentFilterFile != _filterFilePrevious)
                {
                    SetStatus("Parser:ModifiedFilterFile:current filter file changed");
                    filterFileWorkerItem.WorkerModification = WorkerItem.Modification.FilterIndex;
                    filterNeed          = FilterNeed.Filter;
                    _filterFilePrevious = currentFilterFile;
                }

                switch (filterNeed)
                {
                case FilterNeed.Unknown:
                case FilterNeed.ShowAll:
                case FilterNeed.Filter:
                case FilterNeed.ApplyColor:
                    filterFileWorkerItem.FilterNeed         = filterNeed;
                    filterFileWorkerItem.WorkerModification = WorkerItem.Modification.FilterModified;
                    return(filterFileWorkerItem);

                case FilterNeed.Current:
                    SetStatus("Parser:ModifiedFilterFile:current");
                    filterFileWorkerItem.FilterNeed         = FilterNeed.Current;
                    filterFileWorkerItem.WorkerModification = WorkerItem.Modification.Unknown;
                    return(filterFileWorkerItem);

                default:
                    break;
                }
            }
            else if (_previousFilterFiles.Count < currentFilterFiles.Count)
            {
                SetStatus("Parser:ModifiedFilterFile:filter file added");
                SyncFilterFiles();
                EnableFilterFileMonitoring(true);
                // todo : re parse current log with new filter
                return(new WorkerItem()
                {
                    FilterFile = CurrentFilterFile(),
                    FilterNeed = FilterNeed.Filter,
                    WorkerModification = WorkerItem.Modification.FilterAdded
                });
            }
            else
            {
                SetStatus("Parser:ModifiedFilterFile:filter file removed");
                SyncFilterFiles();
                EnableFilterFileMonitoring(false);
                // todo : re parse current log with new filter
                return(new WorkerItem()
                {
                    FilterFile = CurrentFilterFile(),
                    FilterNeed = FilterNeed.Filter,
                    WorkerModification = WorkerItem.Modification.FilterRemoved
                });
            }

            return(new WorkerItem()
            {
                FilterNeed = FilterNeed.Unknown,
                WorkerModification = WorkerItem.Modification.Unknown
            });
        }