[Squirrel-sql-commits] sql12/app/src/net/sourceforge/squirrel_sql/client/session/action ViewObjectAt
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
From: Gerd W. <ger...@us...> - 2005-07-18 20:07:08
|
Update of /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/action In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25554/app/src/net/sourceforge/squirrel_sql/client/session/action Modified Files: ViewObjectAtCursorInObjectTreeAction.java Log Message: View selected object in Object Tree Index: ViewObjectAtCursorInObjectTreeAction.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/action/ViewObjectAtCursorInObjectTreeAction.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ViewObjectAtCursorInObjectTreeAction.java 16 Jul 2005 12:14:59 -0000 1.1 --- ViewObjectAtCursorInObjectTreeAction.java 18 Jul 2005 20:06:59 -0000 1.2 *************** *** 2,155 **** import net.sourceforge.squirrel_sql.client.IApplication; - import net.sourceforge.squirrel_sql.client.gui.session.SessionInternalFrame; import net.sourceforge.squirrel_sql.client.action.SquirrelAction; import net.sourceforge.squirrel_sql.client.session.ISQLPanelAPI; import net.sourceforge.squirrel_sql.client.session.ISession; - import net.sourceforge.squirrel_sql.fw.sql.ITableInfo; - import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo; - import net.sourceforge.squirrel_sql.fw.sql.IProcedureInfo; import javax.swing.*; import java.awt.event.ActionEvent; - import java.sql.SQLException; - import java.util.StringTokenizer; - import java.util.Vector; import java.util.ArrayList; - import java.util.Arrays; public class ViewObjectAtCursorInObjectTreeAction extends SquirrelAction ! implements ISQLPanelAction { ! /** Current panel. */ ! private ISQLPanelAPI _panel; ! /** ! * Ctor specifying Application API. ! * ! * @param app Application API. ! */ ! public ViewObjectAtCursorInObjectTreeAction(IApplication app) ! { ! super(app); ! } ! public void setSQLPanel(ISQLPanelAPI panel) ! { ! _panel = panel; ! } ! /** ! * View the Object at cursor in the Object Tree ! * ! * @param evt Event being executed. ! */ ! public synchronized void actionPerformed(ActionEvent evt) ! { ! try { ! if (_panel != null) ! { ! String dbObjectStringAtCursor = getDbObjectStringAtCursor(); ! ! IDatabaseObjectInfo[] databaseObjectInfos = getMatchingDatabaseObjectInfos(dbObjectStringAtCursor); ! ! if(0 == databaseObjectInfos.length) ! { ! String msg = "Could not find a database object for string " + dbObjectStringAtCursor; ! JOptionPane.showMessageDialog(_panel.getSession().getApplication().getMainFrame(), msg); ! return; ! } ! else if(1 < databaseObjectInfos.length) ! { ! String msg = "Found the following matching database objects matching " + dbObjectStringAtCursor + ".\n"; ! ! for (int i = 0; i < Math.min(5, databaseObjectInfos.length); i++) ! { ! msg += databaseObjectInfos[i].getQualifiedName() + "\n"; ! } ! if(databaseObjectInfos.length > 5) ! { ! msg += "...\n"; ! } ! msg += "Will select the first."; ! JOptionPane.showMessageDialog(_panel.getSession().getApplication().getMainFrame(), msg); ! } _panel.getSession().selectMainTab(ISession.IMainPanelTabIndexes.OBJECT_TREE_TAB); ! boolean success = _panel.getSession().getObjectTreeAPIOfActiveSessionWindow().selectInObjectTree(databaseObjectInfos[0]); ! ! if(false == success) ! { ! String msg = "Could not locate the database object " + databaseObjectInfos[0] + "in Object tree"; ! JOptionPane.showMessageDialog(_panel.getSession().getApplication().getMainFrame(), msg); ! } ! } } ! catch (SQLException e) { ! throw new RuntimeException(e); } } ! private IDatabaseObjectInfo[] getMatchingDatabaseObjectInfos(String dbObjectStringAtCursor) throws SQLException { ! if(null == dbObjectStringAtCursor) ! { ! return new IDatabaseObjectInfo[0]; ! } ! String[] buf = dbObjectStringAtCursor.split("\\."); ! String catalog = null; ! String schema = null; ! String object = null; ! if(buf.length >= 3) ! { ! catalog = buf[buf.length-3]; ! } ! if(buf.length >= 2) { ! schema = buf[buf.length-2]; } ! if(buf.length >= 1) { ! object = buf[buf.length-1]; } ! String caseBuf = _panel.getSession().getSchemaInfo().getCaseSensitiveTableName(object); ! ! if(null != caseBuf) { ! object = caseBuf; } ! _panel.getSession().getSchemaInfo().getCaseSensitiveTableName(object); ! return _panel.getSession().getSQLConnection().getSQLMetaData().getTables(catalog, schema, object, new String[]{"TABLE", "VIEW"}); } ! private String getDbObjectStringAtCursor() { ! String selectedText = _panel.getSQLEntryPanel().getSelectedText(); ! if(null != selectedText) { ! return selectedText; } ! else { ! ! return null; } } } --- 2,182 ---- import net.sourceforge.squirrel_sql.client.IApplication; import net.sourceforge.squirrel_sql.client.action.SquirrelAction; + import net.sourceforge.squirrel_sql.client.session.IObjectTreeAPI; import net.sourceforge.squirrel_sql.client.session.ISQLPanelAPI; import net.sourceforge.squirrel_sql.client.session.ISession; import javax.swing.*; import java.awt.event.ActionEvent; import java.util.ArrayList; public class ViewObjectAtCursorInObjectTreeAction extends SquirrelAction ! implements ISQLPanelAction { ! /** ! * Current panel. ! */ ! private ISQLPanelAPI _panel; ! /** ! * Ctor specifying Application API. ! * ! * @param app Application API. ! */ ! public ViewObjectAtCursorInObjectTreeAction(IApplication app) ! { ! super(app); ! } ! public void setSQLPanel(ISQLPanelAPI panel) ! { ! _panel = panel; ! } ! /** ! * View the Object at cursor in the Object Tree ! * ! * @param evt Event being executed. ! */ ! public synchronized void actionPerformed(ActionEvent evt) ! { ! if (_panel == null) { ! return; ! } ! ObjectCandidates candidates = getObjectCandidates(); ! IObjectTreeAPI objectTree = _panel.getSession().getObjectTreeAPIOfActiveSessionWindow(); + boolean success = false; + while (candidates.hasNext()) + { + String[] catSchemObj = candidates.next(); + success = objectTree.selectInObjectTree(catSchemObj[0], catSchemObj[1], catSchemObj[2]); + if (success) + { _panel.getSession().selectMainTab(ISession.IMainPanelTabIndexes.OBJECT_TREE_TAB); ! break; } + } ! ! if (false == success) { ! String msg = "Could not locate the database object '" + candidates.getSearchString() + "' in Object tree"; ! JOptionPane.showMessageDialog(_panel.getSession().getApplication().getMainFrame(), msg); } + } ! private ObjectCandidates getObjectCandidates() { ! String stringAtCursor = getStringAtCursor(); ! ObjectCandidates ret = new ObjectCandidates(stringAtCursor); ! String[] splits = stringAtCursor.split("\\."); ! ! for (int i = splits.length-1; i >=0 ; i--) { ! String object = null; ! String schema = null; ! String catalog = null; ! ! object = splits[i]; ! ! if (i+1 < splits.length) ! { ! schema = splits[i+1]; ! } ! ! if (i+2 < splits.length) ! { ! catalog = splits[i+2]; ! } ! ! ret.add(catalog, schema, object); } ! ! return ret; ! } ! ! private String getStringAtCursor() ! { ! String text = _panel.getSQLEntryPanel().getText(); ! int caretPos = _panel.getSQLEntryPanel().getCaretPosition(); ! ! int lastIndexOfText = Math.max(0,text.length()-1); ! int beginPos = Math.min(caretPos, lastIndexOfText); // The Math.min is for the Caret at the end of the text ! while(0 < beginPos && false == isParseStop(text.charAt(beginPos), false)) { ! --beginPos; } ! int endPos = caretPos; ! while(endPos < text.length() && false == isParseStop(text.charAt(endPos), true)) { ! ++endPos; } ! return text.substring(beginPos, endPos).trim(); ! } ! ! private boolean isParseStop(char c, boolean treatDotAsStop) ! { ! return ! '(' == c || ! ')' == c || ! '\'' == c || ! Character.isWhitespace(c) || ! (treatDotAsStop && '.' == c); } ! private static class ObjectCandidates { ! ArrayList _candidates = new ArrayList(); ! int _curIndex = 0; ! private String _searchString; ! ! public ObjectCandidates(String searchString) { ! _searchString = searchString; } ! ! ! public boolean hasNext() { ! return _curIndex < _candidates.size(); ! } ! public String[] next() ! { ! ArrayList candidate =(ArrayList) _candidates.get(_curIndex++); ! return (String[]) candidate.toArray(new String[candidate.size()]); ! } ! ! public String getSearchString() ! { ! return _searchString; ! } ! ! public void add(String catalog, String schema, String object) ! { ! ArrayList candidate = new ArrayList(3); ! candidate.add(catalog); ! candidate.add(schema); ! candidate.add(object); ! _candidates.add(candidate); } } + } |