Package net.sourceforge.squirrel_sql.plugins.syntax.netbeans

Source Code of net.sourceforge.squirrel_sql.plugins.syntax.netbeans.SqlSyntaxHighlightTokenMatcher

package net.sourceforge.squirrel_sql.plugins.syntax.netbeans;

import net.sourceforge.squirrel_sql.client.session.ISyntaxHighlightTokenMatcher;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.SQLTokenListener;
import net.sourceforge.squirrel_sql.client.session.schemainfo.SchemaInfo;
import net.sourceforge.squirrel_sql.client.session.schemainfo.CaseInsensitiveString;

import java.util.Hashtable;
import java.util.Vector;

public class SqlSyntaxHighlightTokenMatcher implements ISyntaxHighlightTokenMatcher
{
   private ISession _sess;
   private NetbeansSQLEditorPane _editorPane;

   private CaseInsensitiveString _caseInsensitiveStringBuffer = new CaseInsensitiveString();

   private Hashtable<CaseInsensitiveString, String> _knownTables =
       new Hashtable<CaseInsensitiveString, String>();


   private Vector<SQLTokenListener> _sqlTokenListeners =
       new Vector<SQLTokenListener>();


   public SqlSyntaxHighlightTokenMatcher(ISession sess, NetbeansSQLEditorPane editorPane)
   {

      _sess = sess;
      _editorPane = editorPane;
   }

   @Override
   public boolean isError(int offset, int len)
   {
      // Not nice, see end of ... .netbeans.SQLSyntax
      // But Netbeans will be replaced by RSyntax soon. Then all Netbeans stuff this will be thrown away.
      return false;
   }

   public boolean isTable(char[] buffer, int offset, int len)
   {
      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);

      // No new here, method is called very often
      //if(_sess.getSchemaInfo().isTable(s))

      int tableExtRes = _sess.getSchemaInfo().isTableExt(_caseInsensitiveStringBuffer);
      if(SchemaInfo.TABLE_EXT_COLS_LOADED_BEFORE == tableExtRes || SchemaInfo.TABLE_EXT_COLS_LOADED_IN_THIS_CALL == tableExtRes)
      {

         // _knownTables is just a cache to prevent creating a new String each time
         String table = _knownTables.get(_caseInsensitiveStringBuffer);
         if(null == table)
         {
            table = new String(buffer, offset, len);
            _knownTables.put(new CaseInsensitiveString(table), table);
         }

         if(SchemaInfo.TABLE_EXT_COLS_LOADED_IN_THIS_CALL == tableExtRes)
         {
            _editorPane.repaint();
         }

         fireTableOrViewFound(table);

         return true;
      }
      return false;
   }

   private void fireTableOrViewFound(String tableOrViewName)
   {
      for (int i = 0; i < _sqlTokenListeners.size(); i++)
      {
         SQLTokenListener sqlTokenListener = _sqlTokenListeners.elementAt(i);
         sqlTokenListener.tableOrViewFound(tableOrViewName);
      }
   }

   public void addSQLTokenListener(SQLTokenListener tl)
   {
      removeSQLTokenListener(tl);
      _sqlTokenListeners.add(tl);
   }

   public boolean isFunction(char[] buffer, int offset, int len)
   {
      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);


      if(_sess.getSchemaInfo().isFunction(_caseInsensitiveStringBuffer))
      {
         return true;
      }
      if(_sess.getSchemaInfo().isProcedure(_caseInsensitiveStringBuffer))
      {
         return true;
      }

      return false;
   }

   public boolean isDataType(char[] buffer, int offset, int len)
   {
      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);

      if(_sess.getSchemaInfo().isDataType(_caseInsensitiveStringBuffer))
      {
         return true;
      }
      return false;
   }

   public boolean isStatementSeparator(char[] buffer, int offset, int len)
   {
      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);

      String statSep = _sess.getQueryTokenizer().getSQLStatementSeparator();

      if(statSep.length() != len)
      {
         return false;
      }

      // no new here, method is called very often.
      for(int i=0; i < statSep.length(); ++i)
      {
         if(buffer[offset +i] != statSep.charAt(i))
         {
            return false;
         }
      }

      return true;
   }

   public boolean isColumn(char[] buffer, int offset, int len)
   {
      // No new here, method is called very often
      //String s = new String(buffer, offset, len);

      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);

      if(_sess.getSchemaInfo().isColumn(_caseInsensitiveStringBuffer))
      {
         return true;
      }
      return false;
   }

   public boolean isKeyword(char[] buffer, int offset, int len)
   {
      // No new here, method is called very often
      // String s = new String(buffer, offset, len);

      _caseInsensitiveStringBuffer.setCharBuffer(buffer, offset, len);
      if(_sess.getSchemaInfo().isKeyword(_caseInsensitiveStringBuffer))
      {
         return true;
      }
      return false;

   }

   public void removeSQLTokenListener(SQLTokenListener tl)
   {
      _sqlTokenListeners.remove(tl);
   }


}
TOP

Related Classes of net.sourceforge.squirrel_sql.plugins.syntax.netbeans.SqlSyntaxHighlightTokenMatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.