1 /* 2 * $HeadURL: $ 3 * $Date: $ 4 * $Revision: $ 5 * $Author: $ 6 * 7 * Copyright (c) 2005 MindTree Consulting Ltd. 8 * 9 * This file is part of Insight. 10 * 11 * Insight is free software: you can redistribute it and/or modify it under the 12 * terms of the GNU General Public License as published by the Free Software 13 * Foundation, either version 3 of the License, or (at your option) any later 14 * version. 15 * 16 * Insight is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 19 * Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License along with 22 * Insight. If not, see <http://www.gnu.org/licenses/>. 23 */ 24 package com.mindtree.techworks.insight; 25 26 import com.mindtree.techworks.insight.pagination.PageSet; 27 import com.mindtree.techworks.insight.preferences.PreferenceManager; 28 29 30 /** 31 * This class manages all actions that need to be performed when the application 32 * is being closed. All possible tasks are defined as constants in this class, 33 * and the class exposes public methods to register tasks that need to be 34 * performed on application shutdown. 35 * 36 * <p> 37 * The class registers a thread which monitors the runtime with a shutdown 38 * hook, and calls a method in this class when the runtime is going down. The 39 * method <code>#shutDown</code> checks for all registered actions requested (if 40 * any) and executes them. 41 * </p> 42 * 43 * @author <a href="mailto:bindul_bhowmik@mindtree.com">Bindul Bhowmik</a> 44 * @version $Revision: 27 $ $Date: 2007-12-16 04:58:03 -0700 (Sun, 16 Dec 2007) $ 45 */ 46 public final class ShutdownHookManager { 47 48 // ------------------------------------------------------------------------- 49 // Constants 50 // ------------------------------------------------------------------------- 51 52 /** 53 * Action identifier to call a save on the Preference Manager before the 54 * application is closed. 55 */ 56 public static final int SHUTDOWN_ACTION_SAVE_PREFERENCES = 1; 57 58 /** 59 * Action identifier to call a clear on the PageSet, to clear the paginated 60 * data before the application is closed. 61 */ 62 public static final int SHUTDOWN_ACTION_CLEAR_PAGES = 2; 63 64 // ------------------------------------------------------------------------- 65 // Class fields 66 // ------------------------------------------------------------------------- 67 68 /** 69 * Store of all actions that need to be performed on application shutdown. 70 */ 71 protected static int SHUTDOWN_ACTION; 72 73 // ------------------------------------------------------------------------- 74 // Public methods 75 // ------------------------------------------------------------------------- 76 77 /** 78 * Register an action to be performed on shutdown of the application. The 79 * calling class can send in any value in the parameter, but only those 80 * actions defined in this class will be performed. 81 * 82 * @param shutdownAction 83 * The action identifier or a union of those for multiple 84 * actions. 85 */ 86 public static void addShutdownAction (int shutdownAction) { 87 88 SHUTDOWN_ACTION = SHUTDOWN_ACTION | shutdownAction; 89 } 90 91 // ------------------------------------------------------------------------- 92 // Private methods 93 // ------------------------------------------------------------------------- 94 95 /** 96 * Method called when the runtime is going down, all actions registered will 97 * be checked and performed. 98 */ 99 protected static void shutDown () { 100 101 // Save Preferences 102 if ((SHUTDOWN_ACTION & SHUTDOWN_ACTION_SAVE_PREFERENCES) 103 == SHUTDOWN_ACTION_SAVE_PREFERENCES) { 104 PreferenceManager.getInstance ().applicationShuttingDown (); 105 } 106 107 // Clear Pagesets 108 if ((SHUTDOWN_ACTION & SHUTDOWN_ACTION_CLEAR_PAGES) 109 == SHUTDOWN_ACTION_CLEAR_PAGES) { 110 PageSet.clearAll (); 111 } 112 } 113 114 /** 115 * Registers a shutdown hook for the applicatoin. 116 */ 117 static { 118 /* 119 * This will initializes the shutdown hook.A shutdown hook is an 120 * initialized thread that has not yet been executed which helps to gain 121 * control of the application when it is shutting down (Even on press of 122 * CTRL+C at the console. 123 */ 124 Runtime.getRuntime ().addShutdownHook (new Thread () { 125 126 public void run () { 127 128 shutDown (); 129 } 130 }); 131 } 132 }