/* * Copyright (c) 2014 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.app.transform; import java.text.MessageFormat; import java.util.Date; import org.eclipse.core.runtime.IProgressMonitor; import com.google.common.base.Objects; /** * Progress monitor that gives status updates on the console. * * @author Simon Templer */ public class ConsoleProgressMonitor implements IProgressMonitor, ConsoleConstants { private static final String PROG_PREFIX = MSG_PREFIX + "-- "; private static final long TRIGGER_CLOCK_MS = 500; private String mainTaskName; private String currentTask; private int totalWork; private int worked = 0; private boolean canceled = false; private long lastTrigger = -1; @Override public void beginTask(String name, int totalWork) { this.mainTaskName = name; this.totalWork = totalWork; // System.out.println(PROG_PREFIX + "Starting task: " + mainTaskName); } private void trigger(boolean force) { long now = new Date().getTime(); if (force || lastTrigger < 0 || now - lastTrigger > TRIGGER_CLOCK_MS) { if (totalWork > 0 && totalWork != UNKNOWN) { System.out.println(PROG_PREFIX + MessageFormat.format((currentTask == null) ? ("{0} - {1,number,percent}") : ("{0} - {1,number,percent} - {2}"), mainTaskName, (float) worked / (float) totalWork, currentTask)); } else { if (currentTask != null) { // System.out.println(PROG_PREFIX + mainTaskName + ": " + currentTask); System.out.println(PROG_PREFIX + currentTask); } else { System.out.println(PROG_PREFIX + mainTaskName); } } lastTrigger = now; } } @Override public void done() { trigger(true); // System.out.println(PROG_PREFIX + "Finished task: " + mainTaskName); } @Override public void internalWorked(double work) { // ignore } @Override public boolean isCanceled() { return canceled; } @Override public void setCanceled(boolean value) { canceled = value; } @Override public void setTaskName(String name) { if (!Objects.equal(mainTaskName, name)) { mainTaskName = name; trigger(false); } } @Override public void subTask(String name) { if (!Objects.equal(currentTask, name)) { currentTask = name; trigger(false); } } @Override public void worked(int work) { if (totalWork != UNKNOWN && work > 0) { worked += work; trigger(false); } } }