001 //Copyright (C) 2006 A. Nelson 002 // 003 //This program is free software; you can redistribute it and/or 004 //modify it under the terms of the GNU General Public License 005 //as published by the Free Software Foundation; either version 2 006 //of the License, or (at your option) any later version. 007 // 008 //This program is distributed in the hope that it will be useful, 009 //but WITHOUT ANY WARRANTY; without even the implied warranty of 010 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 011 //GNU General Public License for more details. 012 // 013 //You should have received a copy of the GNU General Public License 014 //along with this program; if not, write to the Free Software 015 //Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 016 017 package pluginCore; 018 019 /** 020 * The core handler provides a controlled interface that is handed 021 * to the plug-ins to allow them communication with the main core. 022 * All calls that are made by plug-ins are run through the CoreHandeler. 023 **/ 024 public class CoreHandler { 025 026 /** 027 * The pointer to the active PluginCore. 028 **/ 029 private PluginCore runningCore; 030 031 /** 032 * The plug-in that this CoreHandeler is associated with. 033 **/ 034 private Plugin myPlugin; 035 036 /** 037 * Initializes the CoreHandeler 038 * @param coreIn A pointer to the running core. 039 **/ 040 public CoreHandler( PluginCore coreIn, Plugin plugIn ) { 041 042 runningCore = coreIn; 043 myPlugin = plugIn; 044 } 045 046 /** 047 * Checks if a plugin has a unstable lock held on it. 048 * @param id The id of the plugin to ckeck. 049 * @return True if the plugin is locked, false if it is unlocked. 050 */ 051 public boolean isLocked( int id ) { 052 053 return runningCore.isLocked( id ); 054 } 055 056 057 /** 058 * Gets the Id of a plug-in, this ID can then be used to send messages to that plug-in. 059 * If the plug-in is not already loaded then the system will attempt to load it, then return the ID. 060 * @param plugin The name of the plugin you are looking for, the PluginCore checks the field Plug-in.pluginName. 061 * @return The Id of the plug-in, or a -1 on failure. 062 **/ 063 public int pluginIDRequest( String plugin ){ 064 065 return runningCore.pluginIDRequest( plugin ); 066 } 067 068 069 /** 070 * Loads a new plug-in into the system and starts its thread running. 071 * @param plugin The full name of the object that you wish to load into the system. 072 * @return The plugin's Id is returned if successful and -1 is returned on failure. 073 **/ 074 public int loadPlugin(String plugin ){ 075 076 return runningCore.loadPlugin( plugin ); 077 } 078 079 /** 080 * Loads a new plug-in into the system and initalizes it with the data 081 * from a previous plugin, that is contained in the stateIn array. 082 * 083 * @param pluginName 084 * The full name of the object that you wish to load into the 085 * system. 086 * @return The plugin's Id is returned if successful and -1 is returned on 087 * failure. 088 */ 089 public int loadPlugin( String plugin, Object[] state ) { 090 091 return runningCore.loadPlugin( plugin, state ); 092 } 093 094 public boolean unloadPlugin( int plugId ) { 095 096 return runningCore.unloadPlugin( plugId ); 097 } 098 099 100 101 /** 102 * Stops the system running, first calls the 'shutdown()' call for all loaded plug-ins 103 * then calls a join() on them before finally 'exiting itself. 104 **/ 105 public void shutdown() { 106 107 /** 108 * I could set permissions here to make it so that only 109 * some plug-ins can shutdown everything. 110 **/ 111 runningCore.shutdown(); 112 } 113 114 /** 115 * Lists the plug-ins that are currently loaded in the system. 116 * @return A list of loaded plug-ins with newlines separating them. 117 **/ 118 public String[] listLoadedPlugins() { 119 120 return runningCore.listLoadedPlugins(); 121 } 122 123 public Object[] savePlugin(int pluginId) { 124 125 return runningCore.savePlugin( pluginId ); 126 } 127 128 /** 129 * Requests that the core send the message 'messIn' 130 * to the plug-in with the same Id as the destID field in the Message object. 131 * @param messIn The message to be sent. 132 * @return Returns 1 on success and 0 on failure. 133 **/ 134 public int postMessage( Message messIn ){ 135 136 if( messIn.sourceID == myPlugin.getID() ) { 137 138 return runningCore.postMessage( messIn ); 139 } 140 if( myPlugin.debugStatus() == true) { 141 142 System.out.println( "Plugin attempting to send Message with out correct source ID"); 143 } 144 return 0; 145 } 146 }