
net.sourceforge.squirrel_sql.client.session.action.DumpSessionCommand Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of squirrel-sql Show documentation
Show all versions of squirrel-sql Show documentation
This is the jar that contains the main application classes which are very specific to
SQuirreLSQL.
package net.sourceforge.squirrel_sql.client.session.action;
/*
* Copyright (C) 2002 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.sql.Connection;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTextFileDestination;
import net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSetViewer;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ObjectArrayDataSet;
import net.sourceforge.squirrel_sql.fw.sql.ISQLConnection;
import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData;
import net.sourceforge.squirrel_sql.fw.util.ICommand;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
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;
/**
* This ICommand
will dump the status of a session to a text
* file.
*
* @author Colin Bell
*/
public class DumpSessionCommand implements ICommand
{
/** Logger for this class. */
private final ILogger s_log =
LoggerController.createLogger(DumpSessionCommand.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 = "===================================================";
/** Session to be dumped. */
private ISession _session;
/** File to dump session to. */
private File _outFile;
/** Message handler to write errors to. */
private IMessageHandler _msgHandler;
/**
* Default ctor.
*/
public DumpSessionCommand()
{
this(null, null);
}
/**
* Ctor using sessions message handler for errors.
*
* @param outFile File to dump session to.
*/
public DumpSessionCommand(File outFile)
{
this(outFile, null);
}
/**
* Ctor.
*
* @param outFile File to dump session to.
* @param msgHandler Message handler. If null then the sessions
* message handler will be used for errors.
*/
public DumpSessionCommand(File outFile, IMessageHandler msgHandler)
{
super();
_outFile = outFile;
_msgHandler = msgHandler;
}
/**
* Set the file to dump to.
*
* @param file File to dump to.
*
* @throws IllegalArgumentException
* Thrown if a null ISession or File passed.
*/
public void setDumpFile(File file)
{
if (file == null)
{
throw new IllegalArgumentException("Null Dump File passed");
}
_outFile = file;
}
/**
* Set the session to dump.
*
* @param session Session to be dumped.
*
* @throws IllegalArgumentException
* Thrown if a null ISession or File passed.
*/
public void setSession(ISession session)
{
if (session == null)
{
throw new IllegalArgumentException("Null ISession passed");
}
_session = session;
}
/**
* Dump the session.
*/
public void execute()
{
if (_session == null)
{
throw new IllegalStateException("Trying to dump null session");
}
if (_outFile == null)
{
throw new IllegalStateException("Trying to dump session to null file");
}
final List files = new ArrayList();
final List titles = new ArrayList();
synchronized (_session)
{
final ISQLConnection conn = _session.getSQLConnection();
final SQLDatabaseMetaData md = conn.getSQLMetaData();
// Dump session properties.
try
{
files.add(createJavaBeanDumpFile(_session.getProperties()));
titles.add("Session Properties");
}
catch (Throwable th)
{
final String msg = "Error dumping driver info";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump driver information.
try
{
files.add(createJavaBeanDumpFile(_session.getDriver()));
titles.add("Driver");
}
catch (Throwable th)
{
final String msg = "Error dumping driver info";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump alias information.
try
{
files.add(createJavaBeanDumpFile(_session.getAlias()));
titles.add("Alias");
}
catch (Throwable th)
{
final String msg = "Error dumping alias info";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump general connection info.
try
{
files.add(createGeneralConnectionDumpFile(conn));
titles.add("Connection - General");
}
catch (Throwable th)
{
final String msg = "Error dumping general connection info";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump meta data.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(conn.getSQLMetaData().getMetaDataSet());
files.add(tempFile);
titles.add("Metadata");
}
catch (Throwable th)
{
final String msg = "Error dumping metadata";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump catalogs.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(new ObjectArrayDataSet(md.getCatalogs()));
files.add(tempFile);
titles.add("Catalogs");
}
catch (Throwable th)
{
final String msg = "Error dumping catalogs";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump schemas.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(new ObjectArrayDataSet(_session.getSchemaInfo().getSchemas()));
files.add(tempFile);
titles.add("Schemas");
}
catch (Throwable th)
{
final String msg = "Error dumping schemas";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump data types.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(conn.getSQLMetaData().getTypesDataSet());
files.add(tempFile);
titles.add("Data Types");
}
catch (Throwable th)
{
final String msg = "Error dumping data types";
showErrorMessage(msg);
showErrorMessage(th);
s_log.error(msg, th);
}
// Dump table types.
try
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
IDataSetViewer dest = new DataSetViewerTextFileDestination(tempFile);
dest.show(new ObjectArrayDataSet(md.getTableTypes()));
files.add(tempFile);
titles.add("Table Types");
}
catch (Throwable th)
{
final String msg = "Error dumping table types";
showErrorMessage(msg);
showErrorMessage(th);
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
{
wtr.println("SQuirreL SQL Client Session Dump " +
Calendar.getInstance().getTime());
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);
File file = files.get(i);
BufferedReader rdr = new BufferedReader(new FileReader(file));
try
{
String line = null;
while((line = rdr.readLine()) != null)
{
wtr.println(line);
}
}
finally
{
rdr.close();
}
}
}
finally
{
wtr.close();
}
}
catch (IOException ex)
{
final String msg = "Error combining temp files into dump file";
showErrorMessage(msg);
showErrorMessage(ex);
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())
{
s_log.error("Couldn't delete temporary DumpSession file");
}
}
}
private File createJavaBeanDumpFile(Object obj)
throws IOException, XMLException
{
File tempFile = File.createTempFile(PREFIX, SUFFIX);
XMLBeanWriter wtr = new XMLBeanWriter(obj);
wtr.save(tempFile);
return tempFile;
}
private File createGeneralConnectionDumpFile(ISQLConnection conn)
throws IOException
{
Connection myConn = conn.getConnection();
File tempFile = File.createTempFile(PREFIX, SUFFIX);
PrintWriter wtr = new PrintWriter(new FileWriter(tempFile));
try
{
// Dump general connection info.
String line = null;
try
{
line = String.valueOf(myConn.getTransactionIsolation());
}
catch (Throwable th)
{
line = th.toString();
}
wtr.println("transIsolation: " + line);
try
{
line = String.valueOf(myConn.isReadOnly());
}
catch (Throwable th)
{
line = th.toString();
}
wtr.println("readonly: " + line);
return tempFile;
}
finally
{
wtr.close();
}
}
private void showErrorMessage(String msg) {
if (_session != null) {
_session.showErrorMessage(msg);
} else if (_msgHandler != null) {
_msgHandler.showErrorMessage(msg);
} else {
s_log.error("No IMessageHandler or ISession configured");
}
}
private void showErrorMessage(Throwable th) {
if (_session != null) {
_session.showErrorMessage(th);
} else if (_msgHandler != null) {
_msgHandler.showErrorMessage(th, null);
} else {
s_log.error("No IMessageHandler or ISession configured");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy