
net.sourceforge.squirrel_sql.client.mainframe.action.DumpApplicationCommand Maven / Gradle / Ivy
package net.sourceforge.squirrel_sql.client.mainframe.action;
/*
* Copyright (C) 2002-2004 Colin Bell
* [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTextFileDestination;
import net.sourceforge.squirrel_sql.fw.datasetviewer.HashtableDataSet;
import net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSetViewer;
import net.sourceforge.squirrel_sql.fw.util.ICommand;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
import net.sourceforge.squirrel_sql.fw.util.NullMessageHandler;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.beanwrapper.URLWrapper;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.fw.xml.XMLBeanWriter;
import net.sourceforge.squirrel_sql.fw.xml.XMLException;
import net.sourceforge.squirrel_sql.client.ApplicationArguments;
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.Version;
import net.sourceforge.squirrel_sql.client.plugin.PluginInfo;
import net.sourceforge.squirrel_sql.client.preferences.SquirrelPreferences;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.action.DumpSessionCommand;
import net.sourceforge.squirrel_sql.client.util.ApplicationFiles;
/**
* This ICommand
will dump the status of the application.
*
* @author Colin Bell
*/
public class DumpApplicationCommand implements ICommand
{
/** Logger for this class. */
private final ILogger s_log =
LoggerController.createLogger(DumpApplicationCommand.class);
/** Prefix for temp file names. */
private static final String PREFIX = "dump";
/** Suffix for temp file names. */
private static final String SUFFIX = "tmp";
/** Used to separate lines of data in the dump file. */
private static String SEP = "===================================================";
/** Application. */
private IApplication _app;
/** File to dump application to. */
private File _outFile;
/** Message handler to write status/error info to. */
private IMessageHandler _msgHandler;
/** Internationalized strings for this class. */
private static final StringManager s_stringMgr =
StringManagerFactory.getStringManager(DumpApplicationCommand.class);
/**
* Ctor.
*
* @param app Application
* @param outFile File to dump session to.
*
* @throws IllegalArgumentException
* Thrown if a null IApplication or File passed.
*/
public DumpApplicationCommand(IApplication app, File outFile,
IMessageHandler msgHandler)
{
super();
if (app == null)
{
throw new IllegalArgumentException("Null IApplication passed");
}
if (outFile == null)
{
throw new IllegalArgumentException("Null File passed");
}
_app = app;
_outFile = outFile;
_msgHandler = msgHandler != null ? msgHandler : NullMessageHandler.getInstance();
}
/**
* Dump the application.
*/
public void execute()
{
List files = new ArrayList();
List titles = new ArrayList();
synchronized(_app)
{
ApplicationStatusBean bean = new ApplicationStatusBean();
bean.load(_app);
try
{
files.add(createJavaBeanDumpFile(bean));
//i18n[DumpApplicationCommand.title.status=Application Status Bean]
titles.add(s_stringMgr.getString("DumpApplicationCommand.title.status"));
}
catch (Throwable th)
{
//i18n[DumpApplicationCommand.error.dumpingstatus=Error dumping Application Status bean]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.dumpingstatus");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(th, null);
s_log.error(msg, th);
}
// Dump System Properties.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(new HashtableDataSet(System.getProperties()));
files.add(tempFile);
//i18n[DumpApplicationCommand.title.systemprops=System Properties]
titles.add(s_stringMgr.getString("DumpApplicationCommand.title.systemprops"));
}
catch (Throwable th)
{
//i18n[DumpApplicationCommand.error.dumpingsystemprops=Error dumping metadata]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.dumpingsystemprops");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(th, null);
s_log.error(msg, th);
}
// Dump drivers
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
_app.getDataCache().saveDrivers(tempFile);
files.add(tempFile);
//i18n[DumpApplicationCommand.title.drivers=Drivers]
titles.add(s_stringMgr.getString("DumpApplicationCommand.title.drivers"));
}
catch (Throwable th)
{
//i18n[DumpApplicationCommand.error.dumpingdrivers=Error dumping drivers]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.dumpingdrivers");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(th, null);
s_log.error(msg, th);
}
// Dump aliases.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
_app.getDataCache().saveAliases(tempFile);
files.add(tempFile);
//i18n[DumpApplicationCommand.title.aliases=Aliases]
titles.add(s_stringMgr.getString("DumpApplicationCommand.title.aliases"));
}
catch (Throwable th)
{
//i18n[DumpApplicationCommand.error.dumpingaliases=Error dumping aliases]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.dumpingaliases");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(th, null);
s_log.error(msg, th);
}
// Dump sessions.
final ISession[] sessions = _app.getSessionManager().getConnectedSessions();
final DumpSessionCommand sessionCmd = new DumpSessionCommand();
for (int i = 0; i < sessions.length; ++i)
{
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
sessionCmd.setSession(sessions[i]);
sessionCmd.setDumpFile(tempFile);
sessionCmd.execute();
files.add(tempFile);
//i18n[DumpApplicationCommand.title.sessiondump=Session Dump: {0}]
String title =
s_stringMgr.getString("DumpApplicationCommand.title.sessiondump",
sessions[i].getIdentifier());
titles.add(title);
}
catch (Throwable th)
{
//i18n[DumpApplicationCommand.error.sessiondump=Error dumping sessions]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.sessiondump");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(th, null);
s_log.error(msg, th);
}
}
}
combineTempFiles(titles, files);
deleteTempFiles(files);
}
private void combineTempFiles(List titles, List files)
{
try
{
PrintWriter wtr = new PrintWriter(new FileWriter(_outFile));
try
{
//i18n[DumpApplicationCommand.header=SQuirreL SQL Client Application Dump {0}]
String header = s_stringMgr.getString("DumpApplicationCommand.header",
Calendar.getInstance().getTime());
wtr.println(header);
for (int i = 0, limit = files.size(); i < limit; ++i)
{
wtr.println();
wtr.println();
wtr.println(SEP);
wtr.println(titles.get(i));
wtr.println(SEP);
BufferedReader rdr = new BufferedReader(new FileReader(files.get(i)));
try
{
String line = null;
while((line = rdr.readLine()) != null)
{
wtr.println(line);
}
}
finally
{
rdr.close();
}
}
}
finally
{
wtr.close();
}
}
catch (IOException ex)
{
//i18n[DumpApplicationCommand.error.combiningtempfiles=Error combining temp files into dump file]
final String msg = s_stringMgr.getString("DumpApplicationCommand.error.combiningtempfiles");
_msgHandler.showMessage(msg);
_msgHandler.showMessage(ex.toString());
s_log.error(msg, ex);
}
}
private void deleteTempFiles(List files)
{
for (int i = 0, limit = files.size(); i < limit; ++i)
{
if (!(files.get(i)).delete())
{
//i18n[DumpApplicationCommand.error.deletetempfile=Couldn't delete temporary DumpSession file]
s_log.error(s_stringMgr.getString("DumpApplicationCommand.error.deletetempfile"));
}
}
}
private File createJavaBeanDumpFile(Object obj)
throws IOException, XMLException
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
XMLBeanWriter wtr = new XMLBeanWriter(obj);
wtr.save(tempFile);
return tempFile;
}
public final static class ApplicationStatusBean
{
private SquirrelPreferences _prefs;
private PluginInfo[] _plugins;
private String[] _appArgs;
private String _version;
private String _pluginLoc;
private URLWrapper[] _pluginURLs;
public ApplicationStatusBean()
{
super();
}
void load(IApplication app)
{
_prefs = app.getSquirrelPreferences();
_plugins = app.getPluginManager().getPluginInformation();
_appArgs = ApplicationArguments.getInstance().getRawArguments();
_version = Version.getVersion();
_pluginLoc = new ApplicationFiles().getPluginsDirectory().getAbsolutePath();
URL[] urls = app.getPluginManager().getPluginURLs();
_pluginURLs = new URLWrapper[urls.length];
for (int i = 0; i < urls.length; ++i)
{
_pluginURLs[i] = new URLWrapper(urls[i]);
}
}
public String getVersion()
{
return _version;
}
public SquirrelPreferences getPreferences()
{
return _prefs;
}
public String getPluginLocation()
{
return _pluginLoc;
}
public PluginInfo[] getPluginInfo()
{
return _plugins;
}
public URLWrapper[] getPluginURLs()
{
return _pluginURLs;
}
public PluginInfo getPluginInfo(int idx)
throws ArrayIndexOutOfBoundsException
{
return _plugins[idx];
}
public String[] getApplicationArgument()
{
return _appArgs;
}
public String getApplicationArgument(int idx)
throws ArrayIndexOutOfBoundsException
{
return _appArgs[idx];
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy