LDAPEntrySelectionPanel.java revision 9826be98262b6a91cfbe1eee4de88c78789d9e8d
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
* Portions Copyright 2013 ForgeRock AS.
*/
package org.opends.guitools.controlpanel.ui;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.Message;
/**
* A basic panel that contains a browser. It is used in general in panels that
* require to provide some DNs of existing entries: we allow the user to launch
* a browser to select entries.
*
*/
public class LDAPEntrySelectionPanel extends AbstractBrowseEntriesPanel
{
private Message title;
private Filter f;
private String[] dns;
/**
* The values of the filters that will be used when opening the dialog where
* this panel is contained. For instance if the filter is set to Filter.USERS
* the panel will display only users when the dialog appears.
*
*/
public enum Filter
{
/**
* Display users.
*/
USERS,
/**
* Display groups.
*/
GROUPS,
/**
* Display Dynamic Groups.
*/
DYNAMIC_GROUPS,
/**
* Display Static Groups.
*/
STATIC_GROUPS,
/**
* Default filter (all entries).
*/
DEFAULT
}
private static final long serialVersionUID = -8140540064410029902L;
/**
* Default constructor.
*
*/
public LDAPEntrySelectionPanel()
{
super();
}
/**
* Updates the tree selection model to allow multiple selection or not.
* @param multiple whether the tree should allow multiple selection or not.
*/
public void setMultipleSelection(boolean multiple)
{
treePane.getTree().getSelectionModel().setSelectionMode(multiple ?
TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION :
TreeSelectionModel.SINGLE_TREE_SELECTION);
}
/**
* {@inheritDoc}
*/
public void toBeDisplayed(boolean visible)
{
super.toBeDisplayed(visible);
if (visible)
{
dns = new String[]{};
}
}
/**
* {@inheritDoc}
*/
public Message getTitle()
{
return title;
}
/**
* {@inheritDoc}
*/
public void okClicked()
{
dns = retrieveDNs();
super.closeClicked();
}
/**
* Returns the selected DN's in an array of Strings. The array is never
* <CODE>null</CODE> but might be empty.
* @return the selected DN's.
*/
public String[] getDNs()
{
return dns;
}
private String[] retrieveDNs()
{
String[] dns;
TreePath[] paths = treePane.getTree().getSelectionPaths();
if (paths != null)
{
dns = new String[paths.length];
for (int i=0; i<paths.length; i++)
{
dns[i] = ((BasicNode)paths[i].getLastPathComponent()).getDN();
}
}
else
{
dns = new String[]{};
}
return dns;
}
/**
* {@inheritDoc}
*/
public GenericDialog.ButtonType getBrowseButtonType()
{
return GenericDialog.ButtonType.OK_CANCEL;
}
/**
* {@inheritDoc}
*/
protected Component createMainPanel()
{
JComponent p = createTreePane();
final JTree tree = treePane.getTree();
tree.getSelectionModel().addTreeSelectionListener(
new TreeSelectionListener()
{
/**
* {@inheritDoc}
*/
public void valueChanged(TreeSelectionEvent ev)
{
TreePath[] paths = tree.getSelectionPaths();
setEnabledOK((paths != null) && (paths.length > 0));
}
});
MouseListener mouseListener = new MouseAdapter() {
/**
* {@inheritDoc}
*/
public void mousePressed(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
if ((selRow != -1) && (e.getClickCount() == 2))
{
okClicked();
}
}
};
tree.addMouseListener(mouseListener);
JScrollPane treeScroll = Utilities.createScrollPane(p);
treeScroll.setPreferredSize(
new Dimension(treeScroll.getPreferredSize().width + 30,
4 * treeScroll.getPreferredSize().height));
return treeScroll;
}
/**
* Returns the last filter set with the setFilter method.
* @return the last filter set with the setFilter method.
*/
public Filter getFilter()
{
return f;
}
/**
* Sets the filter to be used when the panel is displayed.
* @param filter the filter.
*/
public void setFilter(Filter filter)
{
f = filter;
switch (f)
{
case USERS:
filterAttribute.setSelectedItem(USER_FILTER);
super.filter.setText("*");
break;
case GROUPS:
filterAttribute.setSelectedItem(GROUP_FILTER);
super.filter.setText("*");
break;
case DYNAMIC_GROUPS:
filterAttribute.setSelectedItem(LDAP_FILTER);
super.filter.setText("objectClass=groupOfURLs");
break;
case STATIC_GROUPS:
filterAttribute.setSelectedItem(LDAP_FILTER);
super.filter.setText("(|(objectClass=groupOfNames)" +
"(objectClass=groupOfEntries)(objectClass=groupOfUniqueNames))");
break;
case DEFAULT:
Object o = filterAttribute.getItemAt(0);
filterAttribute.setSelectedItem(o);
super.filter.setText("");
break;
}
if (controller != null)
{
applyButtonClicked();
}
}
/**
* Sets the title that will be displayed in the dialog containing this panel.
* @param title the title.
*/
public void setTitle(Message title)
{
this.title = title;
Window w = Utilities.getParentDialog(this);
if (w instanceof GenericDialog)
{
((GenericDialog)w).updateTitle();
}
else if (w instanceof GenericFrame)
{
((GenericFrame)w).updateTitle();
}
}
}