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;
}
}