Update of /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/parser
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31947/app/src/net/sourceforge/squirrel_sql/client/session/parser
Added Files:
IParserEventsProcessor.java ParserEventsAdapter.java
ParserEventsListener.java ParserEventsProcessor.java
SQLSchemaImpl.java
Log Message:
Gerd Wagners patch - adds SQL parser
--- NEW FILE: ParserEventsListener.java ---
package net.sourceforge.squirrel_sql.client.session.parser;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.TableAliasInfo;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.ErrorInfo;
public interface ParserEventsListener
{
void aliasesFound(TableAliasInfo[] aliasInfos);
void errorsFound(ErrorInfo[] errorInfos);
}
--- NEW FILE: ParserEventsProcessor.java ---
package net.sourceforge.squirrel_sql.client.session.parser;
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
import net.sourceforge.squirrel_sql.client.session.SchemaInfo;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.ParserThread;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.ParsingFinishedListener;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.TableAliasInfo;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.ErrorInfo;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.completions.ErrorListener;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import java.text.StringCharacterIterator;
public class ParserEventsProcessor implements IParserEventsProcessor
{
private Timer _parserTimer;
private ParserThread _parserThread;
private Vector _listeners = new Vector();
private ISession _session;
public ParserEventsProcessor(ISession session)
{
_session = session;
ActionListener al = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
onTimerStart();
}
};
_parserTimer = new Timer(300, al);
_parserTimer.start();
}
private void onParserExitedOnException(final Throwable e)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
throw new RuntimeException(e);
}
});
}
public void addParserEventsListener(ParserEventsListener l){_listeners.add(l);}
public void removeParserEventsListener(ParserEventsListener l){_listeners.add(l);}
public void endProcessing()
{
_parserThread.exitThread();
_parserTimer.stop();
}
private void onParsingFinished()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
fireParsingFinished();
}
});
}
private void fireParsingFinished()
{
ParserEventsListener[] clone = (ParserEventsListener[]) _listeners.toArray(new ParserEventsListener[_listeners.size()]);
TableAliasInfo[] aliasInfos = _parserThread.getTableAliasInfos();
ErrorInfo[] errorInfos = _parserThread.getErrorInfos();
for (int i = 0; i < clone.length; i++)
{
clone[i].aliasesFound(aliasInfos);
clone[i].errorsFound(errorInfos);
}
}
private void onTimerStart()
{
if(null == _session.getSQLEntryPanel() || null == _session.getSchemaInfo() || false == _session.getSchemaInfo().isLoaded())
{
// Entry panel or schema info not yet available, try again next time.
//System.out.println("ParserEventsProcessor.onTimerStart entry panel not yet set");
return;
}
initParserThread();
_parserThread.notifyParser(_session.getSQLEntryPanel().getText());
}
private void initParserThread()
{
if(null != _parserThread)
{
return;
}
_parserThread = new ParserThread(new SQLSchemaImpl(_session));
_parserThread.setParsingFinishedListener(new ParsingFinishedListener()
{
public void parsingFinished()
{
onParsingFinished();
}
public void parserExitedOnException(Throwable e)
{
onParserExitedOnException(e);
}
});
}
}
--- NEW FILE: IParserEventsProcessor.java ---
package net.sourceforge.squirrel_sql.client.session.parser;
public interface IParserEventsProcessor
{
public void addParserEventsListener(ParserEventsListener l);
public void removeParserEventsListener(ParserEventsListener l);
}
--- NEW FILE: SQLSchemaImpl.java ---
package net.sourceforge.squirrel_sql.client.session.parser;
import net.sourceforge.squirrel_sql.client.session.SchemaInfo;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.SQLSchema;
import java.util.List;
import java.util.Vector;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
public class SQLSchemaImpl implements SQLSchema
{
private ISession _session;
SQLSchemaImpl(ISession session)
{
_session = session;
}
public SQLSchema.Table getTable(String catalog, String schema, String name)
{
try
{
String[] tableNames = _session.getSchemaInfo().getTables();
for (int i = 0; i < tableNames.length; i++)
{
if(tableNames[i].equalsIgnoreCase(name))
{
return new SQLSchema.Table(null, null, tableNames[i], _session.getSQLConnection().getConnection().getMetaData());
}
}
return null;
}
catch (SQLException e)
{
throw new RuntimeException(e);
}
}
public List getTables(String catalog, String schema, String name)
{
try
{
Vector ret = new Vector();
String[] tableNames = _session.getSchemaInfo().getTables();
for (int i = 0; i < tableNames.length; i++)
{
ret.add(new SQLSchema.Table(null, null, tableNames[i], _session.getSQLConnection().getConnection().getMetaData()));
}
return ret;
}
catch (SQLException e)
{
throw new RuntimeException(e);
}
}
public SQLSchema.Table getTableForAlias(String alias)
{
return null;
}
}
--- NEW FILE: ParserEventsAdapter.java ---
package net.sourceforge.squirrel_sql.client.session.parser;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.TableAliasInfo;
import net.sourceforge.squirrel_sql.client.session.parser.kernel.ErrorInfo;
public class ParserEventsAdapter implements ParserEventsListener
{
public void aliasesFound(TableAliasInfo[] aliasInfos)
{
}
public void errorsFound(ErrorInfo[] errorInfos)
{
}
}
|