package org.bndtools.utils.progress; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import aQute.bnd.osgi.Processor; import aQute.service.reporter.Reporter; public class ProgressMonitorReporter implements Reporter { private static final int TOTAL = 1000; private final IProgressMonitor monitor; private final List<String> warnings = new LinkedList<>(); private final List<String> errors = new LinkedList<>(); private int lastCumulWorked = 0; public ProgressMonitorReporter(IProgressMonitor monitor, String taskName) { this.monitor = monitor; monitor.beginTask(taskName, TOTAL); } @Override public List<String> getWarnings() { return Collections.unmodifiableList(warnings); } @Override public List<String> getErrors() { return Collections.unmodifiableList(errors); } @Override public Location getLocation(String msg) { return null; } @Override public boolean isOk() { return !errors.isEmpty(); } @Override public SetLocation error(String format, Object... args) { String message = Processor.formatArrays(format, args); errors.add(message); return null; } @Override public SetLocation warning(String format, Object... args) { String message = Processor.formatArrays(format, args); warnings.add(message); return null; } @Override public void trace(String format, Object... args) { // ignore } @Override public void progress(float progress, String format, Object... args) { int cumulWorked = (int) (TOTAL * progress); int worked = cumulWorked - lastCumulWorked; lastCumulWorked = cumulWorked; monitor.worked(worked); } @Override public SetLocation exception(Throwable t, String format, Object... args) { errors.add(t.getMessage()); error(format, args); return null; } @Override public boolean isPedantic() { return false; } }