001: package net.sourceforge.squirrel_sql.plugins.sessionscript;
002:
003: /*
004: * Copyright (C) 2002-2003 Colin Bell
005: * colbell@users.sourceforge.net
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: */
021: import java.io.File;
022: import java.io.IOException;
023:
024: import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
025: import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
026: import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
027:
028: import net.sourceforge.squirrel_sql.client.IApplication;
029: import net.sourceforge.squirrel_sql.client.gui.session.SQLInternalFrame;
030: import net.sourceforge.squirrel_sql.client.gui.session.ObjectTreeInternalFrame;
031: import net.sourceforge.squirrel_sql.client.action.ActionCollection;
032: import net.sourceforge.squirrel_sql.client.plugin.DefaultSessionPlugin;
033: import net.sourceforge.squirrel_sql.client.plugin.PluginException;
034: import net.sourceforge.squirrel_sql.client.plugin.PluginResources;
035: import net.sourceforge.squirrel_sql.client.plugin.PluginSessionCallback;
036: import net.sourceforge.squirrel_sql.client.session.ISQLPanelAPI;
037: import net.sourceforge.squirrel_sql.client.session.ISession;
038:
039: /**
040: * The plugin class.
041: */
042: public class SessionScriptPlugin extends DefaultSessionPlugin {
043: /** Logger for this class. */
044: private static ILogger s_log = LoggerController
045: .createLogger(SessionScriptPlugin.class);
046:
047: /** The app folder for this plugin. */
048: private File _pluginAppFolder;
049:
050: /** Folder to store user settings in. */
051: private File _userSettingsFolder;
052:
053: /** Cache of session scripts. */
054: private AliasScriptCache _cache;
055:
056: private PluginResources _resources;
057:
058: /**
059: * Return the internal name of this plugin.
060: *
061: * @return the internal name of this plugin.
062: */
063: public String getInternalName() {
064: return "sessionscript";
065: }
066:
067: /**
068: * Return the descriptive name of this plugin.
069: *
070: * @return the descriptive name of this plugin.
071: */
072: public String getDescriptiveName() {
073: return "Session Scripts Plugin";
074: }
075:
076: /**
077: * Returns the current version of this plugin.
078: *
079: * @return the current version of this plugin.
080: */
081: public String getVersion() {
082: return "0.14";
083: }
084:
085: /**
086: * Returns the authors name.
087: *
088: * @return the authors name.
089: */
090: public String getAuthor() {
091: return "Colin Bell";
092: }
093:
094: /**
095: * Returns the name of the change log for the plugin. This should
096: * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
097: * directory.
098: *
099: * @return the changelog file name or <TT>null</TT> if plugin doesn't have
100: * a change log.
101: */
102: public String getChangeLogFileName() {
103: return "changes.txt";
104: }
105:
106: /**
107: * Returns the name of the Help file for the plugin. This should
108: * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
109: * directory.
110: *
111: * @return the Help file name or <TT>null</TT> if plugin doesn't have
112: * a help file.
113: */
114: public String getHelpFileName() {
115: return "readme.txt";
116: }
117:
118: /**
119: * Returns the name of the Licence file for the plugin. This should
120: * be a text or HTML file residing in the <TT>getPluginAppSettingsFolder</TT>
121: * directory.
122: *
123: * @return the Licence file name or <TT>null</TT> if plugin doesn't have
124: * a licence file.
125: */
126: public String getLicenceFileName() {
127: return "licence.txt";
128: }
129:
130: /**
131: * Initialize this plugin.
132: */
133: public synchronized void initialize() throws PluginException {
134: super .initialize();
135: IApplication app = getApplication();
136:
137: // Folder within plugins folder that belongs to this
138: // plugin.
139: try {
140: _pluginAppFolder = getPluginAppSettingsFolder();
141: } catch (IOException ex) {
142: throw new PluginException(ex);
143: }
144:
145: // Folder to store user settings.
146: try {
147: _userSettingsFolder = getPluginUserSettingsFolder();
148: } catch (IOException ex) {
149: throw new PluginException(ex);
150: }
151:
152: _resources = new SessionScriptResources(
153: "net.sourceforge.squirrel_sql.plugins.sessionscript.sessionscript",
154: this );
155:
156: ActionCollection coll = app.getActionCollection();
157: ViewSessionScriptsAction action = new ViewSessionScriptsAction(
158: app, _resources, this );
159: coll.add(action);
160: app.addToMenu(IApplication.IMenuIDs.PLUGINS_MENU, action);
161:
162: try {
163: _cache = new AliasScriptCache(this );
164: } catch (IOException ex) {
165: throw new PluginException(ex);
166: }
167: _cache.load();
168:
169: }
170:
171: /**
172: * Application is shutting down so save data.
173: */
174: public void unload() {
175: if (_cache != null) {
176: _cache.save();
177: }
178: super .unload();
179: }
180:
181: public PluginSessionCallback sessionStarted(final ISession session) {
182: boolean rc = false;
183:
184: AliasScript script = (AliasScript) _cache.get(session
185: .getAlias());
186: if (script != null) {
187: final String sql = script.getSQL();
188: if (sql != null && sql.length() > 0) {
189: rc = true;
190: final ISQLPanelAPI api = session
191: .getSessionInternalFrame().getSQLPanelAPI();
192: GUIUtils.processOnSwingEventThread(new Runnable() {
193: public void run() {
194: api.setEntireSQLScript(sql);
195: session.getApplication().getThreadPool()
196: .addTask(new Runnable() {
197: public void run() {
198: api.executeCurrentSQL();
199: }
200: });
201: }
202: });
203: }
204: }
205:
206: if (false == rc) {
207: return null;
208: }
209:
210: return new PluginSessionCallback() {
211: public void sqlInternalFrameOpened(
212: SQLInternalFrame sqlInternalFrame, ISession sess) {
213: // Supports main Session window only
214: }
215:
216: public void objectTreeInternalFrameOpened(
217: ObjectTreeInternalFrame objectTreeInternalFrame,
218: ISession sess) {
219: // Supports main Session window only
220: }
221: };
222: }
223:
224: /**
225: * Return the scripts cache.
226: *
227: * @return The scripts cache.
228: */
229: AliasScriptCache getScriptsCache() {
230: return _cache;
231: }
232: }
|