Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/utils/PrintingProgressMonitor.java')
-rw-r--r--tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/utils/PrintingProgressMonitor.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/utils/PrintingProgressMonitor.java b/tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/utils/PrintingProgressMonitor.java
new file mode 100644
index 00000000000..e2ca54127c3
--- /dev/null
+++ b/tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/utils/PrintingProgressMonitor.java
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.junit.utils;
+
+import java.io.PrintStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.ProgressMonitorWrapper;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+/**
+ * A progress monitor that prints progress to standard output or some other
+ * {@link PrintStream}, optionally wrapping some other monitor.
+ */
+public class PrintingProgressMonitor extends ProgressMonitorWrapper {
+ private final PrintStream printTo;
+
+ private boolean first;
+
+ private Predicate<String> filter = Predicates.alwaysTrue();
+
+ /**
+ * Initializes me to print to standard output.
+ */
+ public PrintingProgressMonitor() {
+ this(System.out, new NullProgressMonitor());
+ }
+
+ /**
+ * Initializes me to print to some stream.
+ */
+ public PrintingProgressMonitor(PrintStream printTo) {
+ this(printTo, new NullProgressMonitor());
+ }
+
+ /**
+ * Initializes me to print to some stream and wrap another {@code monitor).
+ */
+ public PrintingProgressMonitor(PrintStream printTo, IProgressMonitor monitor) {
+ super(monitor);
+
+ this.printTo = printTo;
+ }
+
+ /**
+ * Adds a filter regular expression that matches task messages to exclude from
+ * the output (to promote quieter progress when appropriate).
+ *
+ * @param pattern
+ * a regular expression pattern for task messages to suppress
+ *
+ * @return myself, for the convenience of call chaining
+ */
+ public PrintingProgressMonitor filter(String pattern) {
+ Pattern regex = Pattern.compile(pattern);
+ final Matcher m = regex.matcher(""); //$NON-NLS-1$
+
+ Predicate<String> filter = new Predicate<String>() {
+ @Override
+ public boolean apply(String input) {
+ m.reset(input);
+ return !m.find();
+ }
+ };
+
+ this.filter = Predicates.and(filter, this.filter);
+
+ return this;
+ }
+
+ private void echo(boolean dashN, String text) {
+ echo(true, false, text);
+ }
+
+ private void echo(boolean initialNewline, boolean terminalNewline, String text) {
+ if (filter.apply(text)) {
+ if (first) {
+ first = false;
+ } else if (initialNewline) {
+ printTo.println();
+ }
+
+ printTo.print(text);
+
+ if (terminalNewline) {
+ printTo.println();
+ }
+ }
+ }
+
+ @Override
+ public void beginTask(String name, int totalWork) {
+ echo(true, name);
+ super.beginTask(name, totalWork);
+ }
+
+ @Override
+ public void setTaskName(String name) {
+ echo(true, name);
+ super.setTaskName(name);
+ }
+
+ @Override
+ public void subTask(String name) {
+ echo(true, name);
+ super.subTask(name);
+ }
+
+ @Override
+ public void worked(int work) {
+ echo(false, false, ".");
+ super.worked(work);
+ }
+
+ @Override
+ public void done() {
+ echo(false, true, " Done.");
+ super.done();
+ }
+
+}

Back to the top