//============================================================================== // // Copyright (c) 2002- // Authors: // * Andrew Hinton (University of Birmingham) // * Dave Parker (University of Oxford, formerly University of Birmingham) // //------------------------------------------------------------------------------ // // This file is part of PRISM. // // PRISM 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. // // PRISM 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 PRISM; if not, write to the Free Software Foundation, // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // //============================================================================== package userinterface.model.computation; import java.io.*; import javax.swing.*; import parser.ast.PropertiesFile; import prism.*; import userinterface.*; import userinterface.model.*; import userinterface.util.*; /** * Thread that performs export of a built model. */ public class ExportBuiltModelThread extends GUIComputationThread { private int exportEntity; private int exportType; private File exportFile; private PropertiesFile propertiesFile; /** Creates a new instance of ExportBuiltModelThread */ public ExportBuiltModelThread(GUIMultiModelHandler handler, int entity, int type, File f) { this(handler.getGUIPlugin(), entity, type, f); } /** Creates a new instance of ExportBuiltModelThread */ public ExportBuiltModelThread(GUIPlugin plug, int entity, int type, File f) { super(plug); this.exportEntity = entity; this.exportType = type; this.exportFile = f; } /** Set (optional) associated PropertiesFile (for label export) */ public void setPropertiesFile(PropertiesFile propertiesFile) { this.propertiesFile = propertiesFile; } public void run() { try { // Notify the interface of the start of computation SwingUtilities.invokeAndWait(new Runnable() { public void run() { plug.startProgress(); plug.setTaskBarText("Exporting..."); plug.notifyEventListeners(new GUIComputationEvent(GUIComputationEvent.COMPUTATION_START, plug)); } }); // Do export try { switch (exportEntity) { case GUIMultiModelHandler.STATES_EXPORT: prism.exportStatesToFile(exportType, exportFile); break; case GUIMultiModelHandler.TRANS_EXPORT: prism.exportTransToFile(true, exportType, exportFile); break; case GUIMultiModelHandler.STATE_REWARDS_EXPORT: prism.exportStateRewardsToFile(exportType, exportFile); break; case GUIMultiModelHandler.TRANS_REWARDS_EXPORT: prism.exportTransRewardsToFile(true, exportType, exportFile); break; case GUIMultiModelHandler.LABELS_EXPORT: prism.exportLabelsToFile(propertiesFile, exportType, exportFile); break; } } catch (FileNotFoundException e) { SwingUtilities.invokeAndWait(new Runnable() { public void run() { plug.stopProgress(); plug.setTaskBarText("Exporting... error."); plug.notifyEventListeners(new GUIComputationEvent(GUIComputationEvent.COMPUTATION_ERROR, plug)); error("Could not export to file \"" + exportFile + "\""); } }); return; } catch (Throwable e2) { error(e2); SwingUtilities.invokeAndWait(new Runnable() { public void run() { plug.stopProgress(); plug.setTaskBarText("Exporting... error."); plug.notifyEventListeners(new GUIComputationEvent(GUIComputationEvent.COMPUTATION_ERROR, plug)); } }); return; } //If we get here export was successful, notify interface SwingUtilities.invokeAndWait(new Runnable() { public void run() { plug.stopProgress(); plug.setTaskBarText("Exporting... done."); plug.notifyEventListeners(new GUIComputationEvent(GUIComputationEvent.COMPUTATION_DONE, plug)); } }); } // catch and ignore any thread exceptions catch (java.lang.InterruptedException e) { } catch (java.lang.reflect.InvocationTargetException e) { } } }