/* * #%L * gitools-ui-platform * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.ui.platform.progress; import org.gitools.api.analysis.IProgressMonitor; import org.gitools.utils.progressmonitor.StreamProgressMonitor; import javax.swing.*; import java.io.PrintStream; public class JobProgressMonitor extends StreamProgressMonitor { private final IProgressComponent dlg; private static int TOTAL_WORK = 1000; private double correction; public JobProgressMonitor(IProgressComponent dlg, PrintStream out, boolean verbose, boolean debug) { super(out, verbose, debug); this.dlg = dlg; } private JobProgressMonitor(IProgressMonitor parentMonitor, IProgressComponent dlg, PrintStream out, boolean verbose, boolean debug) { super(parentMonitor, out, verbose, debug); this.dlg = dlg; } @Override public void begin(final String title, final long totalWork) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (!dlg.isVisible()) { dlg.setVisible(true); } dlg.setMessage(title); dlg.setWork(TOTAL_WORK); dlg.setProgress(0); } }); this.correction = (double) TOTAL_WORK / (double) totalWork; super.begin(title, totalWork); } @Override public void title(final String title) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { dlg.setMessage(title); } }); super.title(title); } @Override public void worked(long workInc) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { dlg.setWork(TOTAL_WORK); dlg.setProgress((int) (correction * getWorked())); } }); super.worked(workInc); } @Override public void end() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { dlg.setWork(TOTAL_WORK); dlg.setProgress(TOTAL_WORK); if (level == 0) { //TODO dlg.dispose(); } } }); super.end(); } @Override public void info(final String msg) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { dlg.setInfo(msg); } }); super.info(msg); } @Override protected void print(String text) { super.print(text); } @Override protected IProgressMonitor createSubtaskMonitor(IProgressMonitor parentMonitor, PrintStream out, boolean verbose, boolean debug) { return new JobProgressMonitor(parentMonitor, dlg, out, verbose, debug); } }