Package net.sourceforge.squirrel_sql.plugins.hibernate

Source Code of net.sourceforge.squirrel_sql.plugins.hibernate.HQLPanelController

package net.sourceforge.squirrel_sql.plugins.hibernate;

import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.fw.util.ExceptionFormatter;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.Utilities;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.fw.sql.IQueryTokenizer;
import net.sourceforge.squirrel_sql.fw.sql.QueryTokenizer;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

public class HQLPanelController
{
   private static final StringManager s_stringMgr =
      StringManagerFactory.getStringManager(HQLPanelController.class);

   private static ILogger s_log = LoggerController.createLogger(HQLPanelController.class);

   private IHibernateTabController _hibernateTabController;
   private ISession _sess;
   private HibernatePluginResources _resource;
   private HibernateConnection _con;
   private AbstractAction _runHQL;
   private HQLEntryPanelManager _hqlEntryPanelManager;

   public HQLPanelController(IHibernateTabController hibernateTabController, ISession sess, HibernatePluginResources resource)
   {
      _hibernateTabController = hibernateTabController;
      _sess = sess;
      _resource = resource;

      _hqlEntryPanelManager = new HQLEntryPanelManager(_sess, resource, hibernateTabController.getHibernateConnectionProvider());

   }

   void initActions()
   {
      _runHQL = new AbstractAction()
      {
         public void actionPerformed(ActionEvent e)
         {
            onRunHQL();
         }
      };


      _runHQL.putValue(AbstractAction.SMALL_ICON,  _resource.getIcon(HibernatePluginResources.IKeys.RUN_IMAGE));

      // i18n[hibernate.hqlToSqlLong=Run HQL]
      _runHQL.putValue(AbstractAction.NAME,  s_stringMgr.getString("hibernate.hqlToSqlLong"));

      // i18n[hibernate.hqlToSqlShort=Run HQL (ctrl + enter)]
      _runHQL.putValue(AbstractAction.SHORT_DESCRIPTION,  s_stringMgr.getString("hibernate.hqlToSqlShort"));


      _runHQL.setEnabled(false);

      _hibernateTabController.addToToolbar(_runHQL);

      KeyStroke ctrlEnter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Event.CTRL_MASK);
      _hqlEntryPanelManager.registerKeyboardAction(_runHQL, ctrlEnter);
   }


   private void onRunHQL()
   {
      try
      {
         if (false == _runHQL.isEnabled())
         {
            return;
         }

         String hql = _hqlEntryPanelManager.getEntryPanel().getSQLToBeExecuted();

         if (null == hql || 0 == hql.trim().length())
         {
            return;
         }

         final IQueryTokenizer queryTokenizer = _sess.getQueryTokenizer();
         final String statementSeparator = queryTokenizer.getSQLStatementSeparator();
         final String startOfLineComment = queryTokenizer.getLineCommentBegin();
         QueryTokenizer qt = new QueryTokenizer(statementSeparator, startOfLineComment, true);
         qt.setScriptToTokenize(hql);


         while(qt.hasQuery())
         {
            String hqlQuery = qt.nextQuery();
            if(false == doSQL(hqlQuery))
            {
               continue;
            }

            if (_hibernateTabController.isDisplayObjects())
            {
               doObjects(hqlQuery);
            }
         }

      }
      catch (Exception e)
      {
         throw new RuntimeException(e);
      }
   }


   private boolean doSQL(String hqlQuery)
      throws Exception
   {
      ArrayList<String> sqls;

      long begin = System.currentTimeMillis();
      long duration;
      try
      {
         sqls = _con.generateSQL(hqlQuery);
         duration = System.currentTimeMillis() - begin;

         _hibernateTabController.displaySqls(sqls);

         // i18n[HQLPanelController.hqlToSqlSuccess=Generated {0} SQL(s) in {1} milliseconds.]
         _sess.getApplication().getMessageHandler().showMessage(s_stringMgr.getString("SQLPanelController.hqlToSqlSuccess", sqls.size(), duration));
         return true;
      }
      catch (Exception e)
      {
         Throwable t = Utilities.getDeepestThrowable(e);
         ExceptionFormatter formatter = _sess.getExceptionFormatter();
         String message = formatter.format(t);
         _sess.showErrorMessage(message);

         if (_sess.getProperties().getWriteSQLErrorsToLog() ||
            (-1 == t.getClass().getName().toLowerCase().indexOf("hibernate") && -1 == t.getClass().getName().toLowerCase().indexOf("antlr")))
         {
            // If this is not a hibernate error we write a log entry
            s_log.error(t);
         }

         return false;
      }
   }

   private void doObjects(String hqlQuery)
      throws Exception
   {
      _hibernateTabController.displayObjects(_con, hqlQuery);
   }



   public void setConnection(HibernateConnection con)
   {
      _con = con;

      if(null == _con)
      {
         _runHQL.setEnabled(false);
      }
      else
      {
         _runHQL.setEnabled(true);
      }
   }

   public JComponent getComponent()
   {
      return _hqlEntryPanelManager.getComponent();
   }

   public void requestFocus()
   {
      _hqlEntryPanelManager.requestFocus();
   }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.plugins.hibernate.HQLPanelController

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.