/* * Copyright 2006-2016 The MZmine 3 Development Team * * This file is part of MZmine 3. * * MZmine 3 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 2 of the * License, or (at your option) any later version. * * MZmine 3 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 MZmine 3; if not, * write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 * USA */ package io.github.mzmine.taskcontrol; import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.github.msdk.MSDKMethod; import io.github.mzmine.gui.MZmineGUI; import javafx.concurrent.Task; public class MSDKTask extends Task<Object> implements MZmineTask { private Logger logger = LoggerFactory.getLogger(this.getClass()); private MSDKMethod<?> method; private String title, message; public MSDKTask(String title, @Nullable String message, MSDKMethod<?> method) { this.title = title; this.message = message; this.method = method; refreshStatus(); setOnCancelled(event -> method.cancel()); } @Override public void refreshStatus() { // Progress final Float finishedPerc = method.getFinishedPercentage(); if (finishedPerc != null) updateProgress(finishedPerc.doubleValue(), 1.0); // Title and message updateTitle(title); updateMessage(message); } @Override protected Object call() throws Exception { Object result = null; try { result = method.execute(); } catch (Throwable e) { final String msg = "Error executing task " + title + ": " + e.getMessage(); logger.error(msg, e); MZmineGUI.displayMessage(msg); } return result; } }