All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.squirrel_sql.client.session.ObjectTreeSearch Maven / Gradle / Ivy

package net.sourceforge.squirrel_sql.client.session;

import net.sourceforge.squirrel_sql.client.gui.session.ObjectTreeInternalFrame;
import net.sourceforge.squirrel_sql.client.gui.session.SessionInternalFrame;
import net.sourceforge.squirrel_sql.client.session.schemainfo.FilterMatcher;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;

import javax.swing.*;
import java.util.ArrayList;


/**
 * Helps to locate Objects in the Object tree of a Session main window or an ObjectTreeInternalFrame
 */
public class ObjectTreeSearch
{
   private static final StringManager s_stringMgr =
       StringManagerFactory.getStringManager(ObjectTreeSearch.class);



   /**
    * View the Object at cursor in the Object Tree
    *
    * @param	evt		Event being executed.
    */
   public synchronized void viewObjectInObjectTree(String objectName, ISession session)
   {

      ObjectCandidates candidates = getObjectCandidates(objectName);
      if (candidates.size() == 0)
      {
          return;
      }

      if(false == session.getActiveSessionWindow() instanceof SessionInternalFrame &&
         false == session.getActiveSessionWindow() instanceof ObjectTreeInternalFrame)
      {
         return;
      }



      IObjectTreeAPI objectTree = session.getObjectTreeAPIOfActiveSessionWindow();

      boolean success = false;
      while (candidates.hasNext())
      {

         ArrayList catSchemObj = candidates.next();

         success = objectTree.selectInObjectTree(catSchemObj.get(0), catSchemObj.get(1), new FilterMatcher(catSchemObj.get(2), null));
         if (success)
         {
            session.selectMainTab(ISession.IMainPanelTabIndexes.OBJECT_TREE_TAB);
            break;
         }

      }

      if (false == success)
      {
         // i18n[ObjectTreeSearch.error.objectnotfound=Could not locate the database object ''{0}'' in Object tree]
         String msg =
             s_stringMgr.getString(
                     "ObjectTreeSearch.error.objectnotfound",
                     candidates.getSearchString());
         JOptionPane.showMessageDialog(session.getApplication().getMainFrame(), msg);
      }

   }

   private ObjectCandidates getObjectCandidates(String objectName)
   {
      ObjectCandidates ret = new ObjectCandidates(objectName);

      String[] splits = objectName.split("\\.");


      for (int i = splits.length-1; i >=0 ; i--)
      {
         String object = null;
         String schema = null;
         String catalog = null;

         object = removeQuotes(splits[i]);

         if (i+1 < splits.length)
         {
            schema = splits[i+1];
         }

         if (i+2 < splits.length)
         {
            catalog = splits[i+2];
         }
         if (catalog == null && schema == null && "".equals(object)) {
             continue;
         }
         ret.add(catalog, schema, object);
      }

      return ret;
   }

   private String removeQuotes(String objectName)
   {
      String ret = objectName.trim();


      while(ret.startsWith("\"") || ret.startsWith("/"))
      {
         ret = ret.substring(1);
      }

      while(ret.endsWith("\"") || ret.endsWith("/"))
      {
          ret = ret.substring(0,ret.length()-1);
      }
      
      return ret;
   }


   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 ArrayList next()
      {
         return _candidates.get(_curIndex++);
      }

      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);
      }

      public int size()
      {
         return _candidates.size();
      }
   }




}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy