/com.plugin.log4j.viewer/src/com/log4jviewer/ui/preferences/filters/FilterController.java
Java | 180 lines | 145 code | 28 blank | 7 comment | 53 complexity | f53dafd225bb73a36a83262e706cb58d MD5 | raw file
- package com.log4jviewer.ui.preferences.filters;
- import java.io.IOException;
- import java.util.List;
- import javax.xml.parsers.ParserConfigurationException;
- import org.eclipse.jface.preference.IPreferenceStore;
- import org.eclipse.jface.viewers.ColumnViewerEditor;
- import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
- import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
- import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
- import org.eclipse.jface.viewers.ISelectionChangedListener;
- import org.eclipse.jface.viewers.SelectionChangedEvent;
- import org.eclipse.jface.viewers.TableViewer;
- import org.eclipse.jface.viewers.TableViewerEditor;
- import org.eclipse.jface.viewers.TableViewerFocusCellManager;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.events.MouseEvent;
- import org.eclipse.swt.graphics.Point;
- import org.eclipse.swt.graphics.Rectangle;
- import org.eclipse.swt.widgets.Table;
- import org.eclipse.swt.widgets.TableItem;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.log4jviewer.filters.ConfigFilterSaver;
- import com.log4jviewer.filters.FilterItemModel;
- import com.log4jviewer.filters.FilterModel;
- import com.log4jviewer.ui.preferences.DefaultPreferences;
- /**
- * Controller for filters' preferences. It's a channel between filter's and filter items' ui components.
- *
- * @authors <a href="mailto:rd.ryly@gmail.com">Ruslan Diachenko </a></br><a
- * href="mailto:Daniil.Yaroslavtsev@gmail.com">Daniil Yaroslavtsev</a>
- */
- public class FilterController {
- private final Logger logger = LoggerFactory.getLogger(getClass());
- private FilterRuleSettings filterRuleSettings;
- public void setFilterRuleSettings(final FilterRuleSettings filterRuleSettings) {
- this.filterRuleSettings = filterRuleSettings;
- }
- public void saveFilters(final String filtersConfigFilePath, final List<FilterModel> filterModels)
- throws IOException,
- ParserConfigurationException {
- ConfigFilterSaver filterSaver = new ConfigFilterSaver();
- filterSaver.saveFilters(filtersConfigFilePath, filterModels);
- logger.debug("Filters were saved.");
- }
- public void saveActiveFilter(final IPreferenceStore store, final int activeFilterIndex) {
- store.setValue(DefaultPreferences.FilterPreferences.getId(), activeFilterIndex);
- logger.debug("Active filter with index = {} was saved.", activeFilterIndex);
- }
- public void removeItemsFromFilterRuleTable() {
- filterRuleSettings.getTableViewer().getTable().removeAll();
- filterRuleSettings.checkAndSetAddButtonState();
- }
- public void addFilterTableListener(final TableViewer filterTableViewer,
- final FilterContentProvider filterContentProvider) {
- filterTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
- @Override
- public void selectionChanged(final SelectionChangedEvent event) {
- TableViewer filterRuleTableViewer = filterRuleSettings.getTableViewer();
- filterRuleTableViewer.getTable().removeAll();
- int selectedFilterIndex = filterTableViewer.getTable().getSelectionIndex();
- if (selectedFilterIndex >= 0) {
- filterContentProvider.setSelectedFilterIndex(selectedFilterIndex);
- List<FilterItemModel> filterItemModels = filterContentProvider
- .getFilterItems(selectedFilterIndex);
- filterRuleTableViewer.setInput(filterItemModels);
- }
- filterRuleSettings.checkAndSetAddButtonState();
- logger.debug("Index of selected filter = {}", selectedFilterIndex);
- }
- });
- }
- public void setCellEditingStrategy(final TableViewer tableViewer) {
- TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(tableViewer,
- new FocusCellOwnerDrawHighlighter(tableViewer));
- ColumnViewerEditorActivationStrategy activationStrategy =
- new ColumnViewerEditorActivationStrategy(tableViewer) {
- @Override
- protected boolean isEditorActivationEvent(
- final ColumnViewerEditorActivationEvent event) {
- boolean result = false;
- Table table = tableViewer.getTable();
- int selectedCellIndex = getSelectedCellIndex(event, table);
- if (table.getColumnCount() == FilterSettings.COLUMN_COUNT) {
- result = getFilterTableActivationStrategy(event, selectedCellIndex);
- } else if (table.getColumnCount() == FilterRuleSettings.COLUMN_NUMBER) {
- result = getFilterRuleTableActivationStrategy(event, selectedCellIndex);
- }
- return result;
- }
- };
- TableViewerEditor.create(tableViewer, focusCellManager, activationStrategy,
- ColumnViewerEditor.TABBING_HORIZONTAL
- | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
- | ColumnViewerEditor.TABBING_VERTICAL
- | ColumnViewerEditor.KEYBOARD_ACTIVATION);
- }
- private boolean getFilterTableActivationStrategy(final ColumnViewerEditorActivationEvent evt,
- final int selectedCellIndex) {
- boolean result = false;
- if (selectedCellIndex == FilterSettings.ENABLE_COLUMN_INDEX) {
- result = (evt.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION);
- } else {
- result = (evt.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL)
- || (evt.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION)
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED) && (evt.keyCode == SWT.CR))
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED) && (evt.keyCode == SWT.F2))
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED)
- && (evt.keyCode == SWT.KEYPAD_CR))
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED)
- && (evt.keyCode > 31) && (evt.keyCode < 127))
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED)
- && (evt.keyCode >= SWT.KEYPAD_MULTIPLY) && (evt.keyCode <= SWT.KEYPAD_9))
- || (evt.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC);
- }
- return result;
- }
- private boolean getFilterRuleTableActivationStrategy(final ColumnViewerEditorActivationEvent evt,
- final int selectedCellIndex) {
- boolean result = false;
- if (selectedCellIndex == FilterRuleSettings.ENABLE_COLUMN_INDEX) {
- result = (evt.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION);
- } else {
- result = (evt.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL)
- || ((evt.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED) && (evt.keyCode == SWT.F2))
- || (evt.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION)
- || (evt.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC);
- }
- return result;
- }
- // Looking for selected cell index in table item
- private int getSelectedCellIndex(final ColumnViewerEditorActivationEvent event,
- final Table table) {
- int cellIndex = -1;
- if (event.sourceEvent instanceof MouseEvent) {
- int x = ((MouseEvent) event.sourceEvent).x;
- int y = ((MouseEvent) event.sourceEvent).y;
- Point clickLocation = new Point(x, y);
- TableItem tableItem = table.getItem(clickLocation);
- if (tableItem != null) {
- for (int i = 0; i < table.getColumnCount(); i++) {
- Rectangle rect = tableItem.getBounds(i);
- if (rect.contains(clickLocation)) {
- cellIndex = i;
- break;
- }
- }
- }
- }
- return cellIndex;
- }
- }