⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchbar.java

📁 JAVA开源LDAP浏览器jxplorer的源码!
💻 JAVA
字号:
package com.ca.directory.jxplorer.search;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.logging.Logger;


import com.ca.commons.cbutil.*;
import com.ca.directory.jxplorer.*;
import com.ca.directory.jxplorer.broker.StopMonitor;
import com.ca.commons.naming.DN;

public class SearchBar extends JToolBar
{

    /**
     *    This sets up the quick search tool bar.  It acts as a quick GUI
     *    to allow common, simple searches to be entered, and calls
     *    SearchExecute to do the real work.
     */
    JXplorer jxplorer;
    StopMonitor  stopMonitor;

    int lastQuickSearchSelection = 0;

    private static Logger log = Logger.getLogger(SearchBar.class.getName());

    public SearchBar(JXplorer jxplorer)
    {
        super();
        this.jxplorer = jxplorer;

        setFloatable(false);

        final String attFile = "quicksearch.txt";

        setSize(750,10);

        final CBButton search = new CBButton(CBIntText.get("Quick Search"), CBIntText.get("Click here to perform the search."));
		search.setPreferredSize(new Dimension(115,20));

        ButtonRegister br = JXplorer.getButtonRegister();
        br.registerItem(br.SEARCH, search);        

		jxplorer.getRootPane().setDefaultButton(search);	//TE: Sets the search button as the default - i.e for when the user hits the 'enter' key.
		
        final CBJComboBox searchAttribute;   // the attribute to search on
        final CBJComboBox searchFtn;         // the search function to use
        final JTextField searchFilter;     // the user's expression

        //XXX read these from a parameter file
        String [] selections = null;
        try
        {
            selections = CBUtility.readStringArrayFile(attFile);
        }
        catch (Exception e) { selections = null; }

        if ((selections == null) || (selections.length==0))
            selections = new String[] {"cn","sn","description","telephoneNumber","postalCode","address"};

        searchAttribute = new CBJComboBox(selections);
        searchAttribute.setEditable(true);
		searchAttribute.setPreferredSize(new Dimension(150, 20));

        searchAttribute.setToolTipText(CBIntText.get("Select a search attribute, or type in a new one (and press enter)."));
        add(searchAttribute);

        String[] ftns = new String[] {"=","~=",">=","<=", "!(=)"};
        searchFtn = new CBJComboBox(ftns);
        searchFtn.setEditable(false);

        searchFtn.setToolTipText(CBIntText.get("Specify the matching relationship for your search."));
        add(searchFtn);

        searchFilter = new JTextField();

        searchFilter.setToolTipText(CBIntText.get("Place the value to match here (you can use wildcards such as '*')."));
        add(searchFilter);

        search.setToolTipText(CBIntText.get("Search from your currently selected node using the searchBar fields."));

        add(search);

/*
        stopMonitor = jxplorer.getStopMonitor();
        CBButton stopMonitorButton = new CBButton(CBIntText.get("Stop"), new ImageIcon(jxplorer.getProperty("dir.images") + "stop.gif"));
        stopMonitorButton.setDisabledSelectedIcon(new ImageIcon(jxplorer.getProperty("dir.images")+"stop_disabled.gif"));
        stopMonitorButton.setEnabled(false);
        stopMonitorButton.setToolTipText(CBIntText.get("Stop the current action"));
        stopMonitorButton.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        add(stopMonitorButton);
*/
//XXX        jxplorer.jndiBroker.setStopMonitor(stopMonitor);
//        jxplorer.mainPane.add(searchBar, BorderLayout.NORTH);

        final JXplorer jx = jxplorer;

        search.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String ftn = searchFtn.getSelectedItem().toString();
                String filter = "(" + searchAttribute.getSelectedItem();
                if ("!(=)".equals(ftn))
                    filter = "(!" + filter + "=" + searchFilter.getText() + "))";
                else
                    filter +=  ftn + searchFilter.getText() + ")";

                DN base = jx.getTree().getCurrentDN();
                if (base == null)
                    base = jx.getTree().getRootDN();

                String aliasOption = "always";
                log.info("Setting search alias option to: ["+aliasOption+"]");
                JXplorer.setProperty("option.ldap.searchAliasBehaviour", aliasOption);

                SearchExecute.run(jx.getSearchTree(), base, filter, new String[] {"objectClass"}, 2, jx.getSearchBroker());
                jx.getTreeTabPane().setSelectedComponent(jx.getResultsPanel());
            }
        });

        searchAttribute.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                boolean newItem = true;
                boolean itemDeleted = false;
                String selection = searchAttribute.getSelectedItem().toString();

                if (selection.length()==0)
                {
                    int removePos = (lastQuickSearchSelection<searchAttribute.getItemCount())?lastQuickSearchSelection:-1;
                    if (removePos<0) return;
                    searchAttribute.removeItemAt(removePos);
                }
                lastQuickSearchSelection = searchAttribute.getSelectedIndex();
                String[] values = new String[searchAttribute.getItemCount()+1];
                int j=0;
                for (int i=0; i<searchAttribute.getItemCount(); i++)
                {									
                    String searchAtt = searchAttribute.getItemAt(i).toString();
                    if (selection.equals(searchAtt))
                        newItem = false;

                    if ((searchAtt != null) && (searchAtt.length()>0))
					{
						if (isAttributeValid(searchAtt))	//TE: check that it doesn't contain any spaces.
                        	values[j++] = searchAtt;
					}	
                    else
                        itemDeleted = true;
                }

                if (newItem) // a new item has been added.
				{
					if (isAttributeValid(selection))	//TE: check that it doesn't contain any spaces.
						values[j++] = selection;
				}	

                if (itemDeleted || newItem)  // write updated list to disk and update combo box
                {
                    for (int i=0; i<values.length; i++)
                        if ((values[i] != null) && (values[i].toString().length()==0))
							values[i] = null;
									
                    Object[] trimmedArray = CBArray.trimNulls(values);
                    String[] trimmedStrings = new String[trimmedArray.length];
                    searchAttribute.removeAllItems();
					
					int count=0;	//TE: used below as a counter in the trimmedStrings array so that there is no null entries in the array.
					
                    for (int i=0; i<trimmedArray.length; i++)                 	
							trimmedStrings[i] = trimmedArray[i].toString();		

                    Arrays.sort(trimmedStrings);
					
                    for (int i=0; i<trimmedArray.length; i++)
						searchAttribute.addItem(trimmedStrings[i]);
						
                    CBUtility.writeStringArrayFile(attFile, trimmedStrings);

                    searchAttribute.setSelectedItem(selection);
                }
            }
         });
		 
		 
		 
				 

/*
        stopMonitorButton.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                stopMonitor.setVisible(true);
            }
        });
*/
    }
	
	
	
   /**
    *	Checks if a given attribute is valid by searching it for a space i.e. a string 'hello colour' would return false, 
	*	whereas a string 'hello' would return true.  Logs a message if the attribute is not valid.
	*	@param attr the string that is being check for a space.
	*	.
	*/
		
	public boolean isAttributeValid(String attr)
	{
		if(attr.indexOf(" ") >-1)
		{
			log.warning("The value '" + attr + "' in the Search Bar is not a valid attribute."
			+ "  An attribute cannot contain a space in it's name, therefore this value will not be saved in the 'quicksearch.txt' property file.");
			return false;
		}
		else	
			return true;		
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -