
Author: seb Date: Fri Mar 2 15:37:15 2007 New Revision: 1381 Modified: 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 logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LoggingEventContentProvider.java Log: Updated EvaluatorFilter editor. Modified: 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/dialog/LogbackFilterDialog.java (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/dialog/LogbackFilterDialog.java Fri Mar 2 15:37:15 2007 @@ -2,7 +2,6 @@ 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; @@ -62,8 +61,6 @@ editComposite.setSize(1000, 1000); createEditionUIPart(editComposite); - //initContent(); - return container; } @@ -182,6 +179,9 @@ current = (EvaluatorFilter)element; JaninoEventEvaluator eval = (JaninoEventEvaluator)current.getEvaluator(); expressionField.setText(eval.getExpression()); + matchField.setText(current.getOnMatch().toString()); + mismatchField.setText(current.getOnMismatch().toString()); + } private void saveCurrentFilter() { @@ -190,6 +190,8 @@ eval.stop(); String oldExp = eval.getExpression(); eval.setExpression(expressionField.getText()); + current.setOnMatch(matchField.getText()); + current.setOnMismatch(mismatchField.getText()); eval.start(); if (!eval.isStarted()) { eval.stop(); @@ -197,6 +199,7 @@ eval.start(); MessageDialog.openInformation(getShell(), "Logback View", ERROR_MESSAGE_EXPRESSION); } + current.start(); EventFilter.add(current); emptyEditionUI(); } @@ -222,7 +225,6 @@ current.stop(); JaninoEventEvaluator eval = (JaninoEventEvaluator) current.getEvaluator(); eval.stop(); - EventFilter.remove(current); FilterContentProvider.getProvider().remove(current); emptyEditionUI(); } Modified: 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/EventFilter.java (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/EventFilter.java Fri Mar 2 15:37:15 2007 @@ -1,6 +1,7 @@ package ch.qos.logback.eclipse.model; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import ch.qos.logback.classic.boolex.JaninoEventEvaluator; @@ -8,6 +9,7 @@ import ch.qos.logback.core.Context; import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.filter.EvaluatorFilter; +import ch.qos.logback.core.spi.FilterReply; public class EventFilter { @@ -15,8 +17,6 @@ private static List<EvaluatorFilter> filterList = new ArrayList<EvaluatorFilter>(); - private static EvaluatorFilter first; - static { { EvaluatorFilter filter = new EvaluatorFilter(); @@ -49,6 +49,22 @@ } public static boolean filter(LoggingEvent event) { + if (filterList.isEmpty()) { + return true; + } + + Iterator<EvaluatorFilter> it = filterList.iterator(); + EvaluatorFilter filter; + while (it.hasNext()) { + filter = it.next(); + FilterReply reply = filter.decide(event); + if(reply == FilterReply.DENY) { + return false; + } else if (reply == FilterReply.ACCEPT) { + return true; + } + } + return true; } @@ -67,7 +83,7 @@ } public static void remove(EvaluatorFilter filter) { - if (!filterList.contains(filter)) { + if (filterList.contains(filter)) { filterList.remove(filter); } } Modified: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java ============================================================================== --- logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/model/FilterContentProvider.java Fri Mar 2 15:37:15 2007 @@ -46,9 +46,9 @@ case 0: return eval.getExpression(); case 1: - return "onMatch"; + return filter.getOnMatch().toString(); case 2: - return "onMismatch"; + return filter.getOnMismatch().toString(); } return null; Modified: logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LoggingEventContentProvider.java ============================================================================== --- logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LoggingEventContentProvider.java (original) +++ logbackPDE/trunk/plugins/ConsolePlugin/src/main/java/ch/qos/logback/eclipse/views/LoggingEventContentProvider.java Fri Mar 2 15:37:15 2007 @@ -14,7 +14,9 @@ import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.core.helpers.CyclicBuffer; import ch.qos.logback.eclipse.PluginLogger; +import ch.qos.logback.eclipse.model.EventFilter; import ch.qos.logback.eclipse.model.LoggingEventManagerEvent; import ch.qos.logback.eclipse.model.LoggingEventManagerListener; @@ -28,18 +30,21 @@ private MessageConsoleStream redStream; private MessageConsoleStream blackStream; private TextConsoleViewer viewer; - + + private CyclicBuffer<LoggingEvent> cyclicBuffer; + private Color cachedRed; private Color cachedBlack; private LabelProvider labelProvider; - - private boolean autoScroll; + + private boolean autoScroll = true; public LoggingEventContentProvider(MessageConsole console, TextConsoleViewer viewer) { Display display = Display.getCurrent(); cachedRed = new Color(display, 255, 0, 0); cachedBlack = new Color(display, 0, 0, 0); this.viewer = viewer; + this.cyclicBuffer = new CyclicBuffer<LoggingEvent>(4000); redStream = console.newMessageStream(); redStream.setColor(cachedRed); @@ -47,7 +52,7 @@ blackStream.setColor(cachedBlack); } - WorkbenchJob revealJob = new WorkbenchJob("Reveal End of Document") {//$NON-NLS-1$ + WorkbenchJob revealJob = new WorkbenchJob("Reveal End of Document") { public IStatus runInUIThread(IProgressMonitor monitor) { StyledText textWidget = viewer.getTextWidget(); if (textWidget != null) { @@ -70,18 +75,22 @@ } public void loggingEventsChanged(final LoggingEventManagerEvent event) { - updateViewer(event); + + if (autoScroll) { + updateViewer(event); + } else { + LoggingEvent le = (LoggingEvent) event.getItemsAdded()[0]; + cyclicBuffer.add(le); + } } private void updateViewer(final LoggingEventManagerEvent event) { LoggingEvent le = (LoggingEvent) event.getItemsAdded()[0]; try { flushStreams(); - if (le.getLevel().isGreaterOrEqual(Level.WARN)) { - redStream.println(labelProvider.getText(le)); - } else { - blackStream.println(labelProvider.getText(le)); - } + + writeEvent(le); + } catch (Exception e) { PluginLogger.logError(e); } @@ -99,19 +108,67 @@ } } + public void emptyCyclicBuffer() { + + int max = 100; + + int i = 0; + + LoggingEvent le = (LoggingEvent) cyclicBuffer.get(); + while (le != null) { + if (i++ >= max) { + try { + if (i % 100 == 0) { +// IOConsolePartitioner idp = (IOConsolePartitioner)redStream.getConsole().getDocument().getDocumentPartitioner(); +// idp.clearBuffer(); + System.out.println("100 more done: " + i); + } + } catch (Exception e) { + + } + } + + writeEvent(le); + + le = (LoggingEvent) cyclicBuffer.get(); + } + } + + private void writeEvent(LoggingEvent le) { + if (!EventFilter.filter(le)) { + return; + } + + if (le.getLevel().isGreaterOrEqual(Level.WARN)) { + redStream.println(labelProvider.getText(le)); + } else { + blackStream.println(labelProvider.getText(le)); + } + } + public void setLabelProvider(LabelProvider provider) { this.labelProvider = provider; } - + public void setAutoScroll(boolean autoScroll) { this.autoScroll = autoScroll; } - + public boolean isAutoScroll() { return autoScroll; } - + public void toggleAutoScroll() { autoScroll = !autoScroll; + + if (!autoScroll) { + // if autoScroll is turned off + // we clear the buffer first. + cyclicBuffer.clear(); + } else { + // if it is turned on + // we empty the buffer + emptyCyclicBuffer(); + } } }