svn commit: r1378 - in logbackPDE/trunk/plugins/ConsolePlugin: . META-INF lib src/main/java/ch/qos/logback/eclipse/actions src/main/java/ch/qos/logback/eclipse/dialog src/main/java/ch/qos/logback/eclipse/model src/main/java/ch/qos/logback/eclipse/views

Author: seb Date: Thu Mar 1 18:17:22 2007 New Revision: 1378 Added: logbackPDE/trunk/plugins/ConsolePlugin/lib/janino-2.4.3.jar (contents, props changed) logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/actions/LogbackFilterAction.java logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/dialog/LogbackFilterDialog.java logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/EventFilter.java logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java Modified: logbackPDE/trunk/plugins/ConsolePlugin/META-INF/MANIFEST.MF logbackPDE/trunk/plugins/ConsolePlugin/build.properties logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LogbackView.java Log: First version of a EvaluatorFilter editor Modified: logbackPDE/trunk/plugins/ConsolePlugin/META-INF/MANIFEST.MF ============================================================================== --- logbackPDE/trunk/plugins/ConsolePlugin/META-INF/MANIFEST.MF (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/META-INF/MANIFEST.MF Thu Mar 1 18:17:22 2007 @@ -6,7 +6,8 @@ Bundle-ClassPath: logbackPlugin.jar, lib/slf4j-api-1.2.jar, lib/logback-classic-0.9.jar, - lib/logback-core-0.9.1-SNAPSHOT.jar + lib/logback-core-0.9.1-SNAPSHOT.jar, + lib/janino-2.4.3.jar Bundle-Activator: ch.qos.logback.eclipse.LogbackPlugin Bundle-Vendor: QOS.ch Bundle-Localization: plugin Modified: logbackPDE/trunk/plugins/ConsolePlugin/build.properties ============================================================================== --- logbackPDE/trunk/plugins/ConsolePlugin/build.properties (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/build.properties Thu Mar 1 18:17:22 2007 @@ -6,6 +6,7 @@ lib/,\ lib/logback-classic-0.9.jar,\ lib/logback-core-0.9.1-SNAPSHOT.jar,\ - lib/logback-core-0.9.jar + lib/logback-core-0.9.jar,\ + lib/janino-2.4.3.jar source.logbackPlugin.jar = src/main/java/ source.lib/logback-core-0.9.jar = src/main/java/ Added: logbackPDE/trunk/plugins/ConsolePlugin/lib/janino-2.4.3.jar ============================================================================== Binary file. No diff available. Added: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/actions/LogbackFilterAction.java ============================================================================== --- (empty file) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/actions/LogbackFilterAction.java Thu Mar 1 18:17:22 2007 @@ -0,0 +1,27 @@ +package ch.qos.logback.eclipse.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.console.TextConsoleViewer; + +import ch.qos.logback.eclipse.dialog.LogbackFilterDialog; + + +public class LogbackFilterAction extends Action { + private static String PREF_ACTION_MESSAGE = "Filter..."; + + private final Shell shell; + + public LogbackFilterAction(TextConsoleViewer viewer) { + super(PREF_ACTION_MESSAGE); + shell = viewer.getControl().getShell(); + } + + public void run() { + LogbackFilterDialog dialog = new LogbackFilterDialog(shell); + if (dialog.open() != InputDialog.OK) { + return; + } + } +} Added: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/dialog/LogbackFilterDialog.java ============================================================================== --- (empty file) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/dialog/LogbackFilterDialog.java Thu Mar 1 18:17:22 2007 @@ -0,0 +1,234 @@ +package ch.qos.logback.eclipse.dialog; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.Text; + +import ch.qos.logback.classic.boolex.JaninoEventEvaluator; +import ch.qos.logback.core.filter.EvaluatorFilter; +import ch.qos.logback.eclipse.model.EventFilter; +import ch.qos.logback.eclipse.model.FilterContentProvider; + +public class LogbackFilterDialog extends Dialog { + + private static String ERROR_MESSAGE_EXPRESSION = "The new expression is not correct."; + + private TableViewer viewer; + private TableColumn codeColumn; + private TableColumn onMatchColumn; + private TableColumn onMismatchColumn; + + private Text expressionField; + private Text matchField; + private Text mismatchField; + + private EvaluatorFilter current = null; + + public LogbackFilterDialog(Shell parentShell) { + super(parentShell); + + setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL); + } + + protected Control createDialogArea(Composite parent) { + Composite container = (Composite) super.createDialogArea(parent); + container.setSize(1000, 3000); + + FillLayout layout = new FillLayout(); + layout.type = SWT.VERTICAL; + container.setLayout(layout); + + createTable(container); + Composite editComposite = new Composite(container, SWT.BORDER); + editComposite.setSize(1000, 1000); + createEditionUIPart(editComposite); + + //initContent(); + + return container; + } + + private void createEditionUIPart(Composite container) { + final GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 2; + container.setLayout(gridLayout); + + final Label infoLabel = new Label(container, SWT.NONE); + infoLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1)); + infoLabel.setText("Enter java code in the expression field."); + final Label infoLabel2 = new Label(container, SWT.NONE); + infoLabel2.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 2, 1)); + infoLabel2.setText("Enter ACCEPT, DENY or NEUTRAL in the other two fields."); + + expressionField = new Text(container, SWT.WRAP | SWT.V_SCROLL | SWT.MULTI); + GridData gridData = new GridData(); + gridData.grabExcessHorizontalSpace = true; + gridData.grabExcessVerticalSpace = true; + gridData.heightHint = 75; + gridData.widthHint = 300; + gridData.horizontalSpan = 2; + gridData.verticalSpan = 2; + expressionField.setLayoutData(gridData); + + final Label infoLabel3 = new Label(container, SWT.NONE); + infoLabel3.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1)); + infoLabel3.setText("Action on filter match"); + matchField = new Text(container, SWT.BORDER); + Rectangle bounds2 = matchField.getBounds(); + bounds2.width = 150; + matchField.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + + final Label infoLabel4 = new Label(container, SWT.NONE); + infoLabel4.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1)); + infoLabel4.setText("Action on filter mismatch"); + mismatchField = new Text(container, SWT.BORDER); + Rectangle bounds3 = mismatchField.getBounds(); + bounds3.width = 150; + mismatchField.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); + + final Button saveButton = new Button(container, SWT.PUSH); + saveButton.setText("Save"); + saveButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + super.widgetSelected(e); + saveCurrentFilter(); + viewer.refresh(); + } + }); + + final Button newButton = new Button(container, SWT.PUSH); + newButton.setText("New"); + newButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + super.widgetSelected(e); + viewer.setSelection(StructuredSelection.EMPTY); + createNewFilter(); + viewer.refresh(); + } + }); + + final Button deleteButton = new Button(container, SWT.PUSH); + deleteButton.setText("Delete"); + deleteButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + super.widgetSelected(e); + deleteCurrentFilter(); + viewer.refresh(); + } + }); + } + + private void createTable(Composite container) { + viewer = new TableViewer(container, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE + | SWT.FULL_SELECTION); + + FilterContentProvider.getProvider().setViewer(viewer); + + final Table table = viewer.getTable(); + + codeColumn = new TableColumn(table, SWT.LEFT); + codeColumn.setText("Expression"); + codeColumn.setWidth(200); + + onMatchColumn = new TableColumn(table, SWT.LEFT); + onMatchColumn.setText("On match"); + onMatchColumn.setWidth(80); + + onMismatchColumn = new TableColumn(table, SWT.LEFT); + onMismatchColumn.setText("On mismatch"); + onMismatchColumn.setWidth(80); + + table.setHeaderVisible(true); + table.setLinesVisible(true); + + viewer.setContentProvider(FilterContentProvider.getProvider()); + viewer.setLabelProvider(FilterContentProvider.getProvider()); + viewer.setInput(FilterContentProvider.getProvider()); + + viewer.addSelectionChangedListener(new ISelectionChangedListener() { + + public void selectionChanged(SelectionChangedEvent event) { + StructuredSelection sel = (StructuredSelection)event.getSelection(); + if (!sel.equals(StructuredSelection.EMPTY)) { + editFilter(sel.getFirstElement()); + } + } + }); + } + + private void editFilter(Object element) { + current = (EvaluatorFilter)element; + JaninoEventEvaluator eval = (JaninoEventEvaluator)current.getEvaluator(); + expressionField.setText(eval.getExpression()); + } + + private void saveCurrentFilter() { + current.stop(); + JaninoEventEvaluator eval = (JaninoEventEvaluator)current.getEvaluator(); + eval.stop(); + String oldExp = eval.getExpression(); + eval.setExpression(expressionField.getText()); + eval.start(); + if (!eval.isStarted()) { + eval.stop(); + eval.setExpression(oldExp); + eval.start(); + MessageDialog.openInformation(getShell(), "Logback View", ERROR_MESSAGE_EXPRESSION); + } + EventFilter.add(current); + emptyEditionUI(); + } + + private void emptyEditionUI() { + current = null; + expressionField.setText(""); + expressionField.redraw(); + matchField.setText(""); + matchField.redraw(); + mismatchField.setText(""); + mismatchField.redraw(); + } + + private void createNewFilter() { + current = FilterContentProvider.getProvider().createNewFilter(); + expressionField.setText("Enter an expression"); + matchField.setText("Enter an action"); + mismatchField.setText("Enter an action"); + } + + private void deleteCurrentFilter() { + current.stop(); + JaninoEventEvaluator eval = (JaninoEventEvaluator) current.getEvaluator(); + eval.stop(); + EventFilter.remove(current); + FilterContentProvider.getProvider().remove(current); + emptyEditionUI(); + } + + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText("Logback View Filtering"); + } +} Added: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/EventFilter.java ============================================================================== --- (empty file) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/EventFilter.java Thu Mar 1 18:17:22 2007 @@ -0,0 +1,75 @@ +package ch.qos.logback.eclipse.model; + +import java.util.ArrayList; +import java.util.List; + +import ch.qos.logback.classic.boolex.JaninoEventEvaluator; +import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.core.Context; +import ch.qos.logback.core.ContextBase; +import ch.qos.logback.core.filter.EvaluatorFilter; + +public class EventFilter { + + private static ContextBase context = new ContextBase(); + + private static List<EvaluatorFilter> filterList = new ArrayList<EvaluatorFilter>(); + + private static EvaluatorFilter first; + + static { + { + EvaluatorFilter filter = new EvaluatorFilter(); + filter.setContext(context); + JaninoEventEvaluator eval = new JaninoEventEvaluator(); + eval.setExpression("level == DEBUG"); + eval.setContext(context); + eval.setName("eval1"); + filter.setEvaluator(eval); + filter.setName("filter1"); + filter.setOnMatch("ACCEPT"); + eval.start(); + filter.start(); + filterList.add(filter); + } + { + EvaluatorFilter filter = new EvaluatorFilter(); + filter.setContext(context); + JaninoEventEvaluator eval = new JaninoEventEvaluator(); + eval.setExpression("level == INFO"); + eval.setContext(context); + eval.setName("eval1"); + filter.setEvaluator(eval); + filter.setName("filter1"); + filter.setOnMatch("ACCEPT"); + eval.start(); + filter.start(); + filterList.add(filter); + } + } + + public static boolean filter(LoggingEvent event) { + return true; + } + + public static Context getContext() { + return context; + } + + public static List<EvaluatorFilter> getAllFilters() { + return filterList; + } + + public static void add(EvaluatorFilter filter) { + if (!filterList.contains(filter)) { + filterList.add(filter); + } + } + + public static void remove(EvaluatorFilter filter) { + if (!filterList.contains(filter)) { + filterList.remove(filter); + } + } + +} Added: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java ============================================================================== --- (empty file) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java Thu Mar 1 18:17:22 2007 @@ -0,0 +1,74 @@ +package ch.qos.logback.eclipse.model; + +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.graphics.Image; + +import ch.qos.logback.classic.boolex.JaninoEventEvaluator; +import ch.qos.logback.core.filter.EvaluatorFilter; + +public class FilterContentProvider extends LabelProvider +implements ITableLabelProvider, IStructuredContentProvider { + + private static FilterContentProvider provider = new FilterContentProvider(); + + private TableViewer viewer; + + public static FilterContentProvider getProvider() { + return provider; + } + + public Object[] getElements(Object inputElement) { + return EventFilter.getAllFilters().toArray(); + } + + public void setViewer(TableViewer viewer) { + this.viewer = viewer; + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + EvaluatorFilter filter = (EvaluatorFilter)element; + JaninoEventEvaluator eval = (JaninoEventEvaluator)filter.getEvaluator(); + switch (columnIndex) { + case 0: + return eval.getExpression(); + case 1: + return "onMatch"; + case 2: + return "onMismatch"; + } + + return null; + } + + public void remove(EvaluatorFilter filter) { + EventFilter.remove(filter); + viewer.remove(filter); + viewer.refresh(); + } + + public EvaluatorFilter createNewFilter() { + EvaluatorFilter current = new EvaluatorFilter(); + current.setContext(EventFilter.getContext()); + current.setName("evaluator filter"); + JaninoEventEvaluator eval = new JaninoEventEvaluator(); + eval.setContext(EventFilter.getContext()); + eval.setName("evaluator"); + current.setEvaluator(eval); + return current; + } + +} Modified: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LogbackView.java ============================================================================== --- logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LogbackView.java (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LogbackView.java Thu Mar 1 18:17:22 2007 @@ -19,6 +19,7 @@ import org.eclipse.ui.part.ViewPart; import ch.qos.logback.eclipse.PluginLogger; +import ch.qos.logback.eclipse.actions.LogbackFilterAction; import ch.qos.logback.eclipse.actions.LogbackPreferencesAction; import ch.qos.logback.eclipse.model.LoggingEventManager; import ch.qos.logback.eclipse.reciever.SimpleSocketServer; @@ -46,6 +47,7 @@ private SimpleSocketServer server; private Thread serverThread; private LogbackPreferencesAction preferencesAction; + private LogbackFilterAction filterAction; public LogbackView() { launchSocketServer(null); @@ -93,6 +95,9 @@ IMenuManager menu = getViewSite().getActionBars().getMenuManager(); menu.add(preferencesAction); + filterAction = new LogbackFilterAction(viewer); + menu.add(filterAction); + clearConsoleAction = new Action() { @Override public void run() {
participants (1)
-
noreply.seb@qos.ch