/*
|
* The contents of this file are subject to the terms of the Common Development and
|
* Distribution License (the License). You may not use this file except in compliance with the
|
* License.
|
*
|
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
|
* specific language governing permission and limitations under the License.
|
*
|
* When distributing Covered Software, include this CDDL Header Notice in each file and include
|
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
|
* Header, with the fields enclosed by brackets [] replaced by your own identifying
|
* information: "Portions Copyright [year] [name of copyright owner]".
|
*
|
* Copyright 2008-2009 Sun Microsystems, Inc.
|
* Portions Copyright 2013-2016 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.forgerock.i18n.LocalizableMessage;
|
import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
|
import org.opends.guitools.controlpanel.util.Utilities;
|
|
/**
|
* 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 LocalizableMessage 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);
|
}
|
|
@Override
|
public void toBeDisplayed(boolean visible)
|
{
|
super.toBeDisplayed(visible);
|
if (visible)
|
{
|
dns = new String[0];
|
}
|
}
|
|
@Override
|
public LocalizableMessage getTitle()
|
{
|
return title;
|
}
|
|
@Override
|
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[0];
|
}
|
return dns;
|
}
|
|
@Override
|
public GenericDialog.ButtonType getBrowseButtonType()
|
{
|
return GenericDialog.ButtonType.OK_CANCEL;
|
}
|
|
@Override
|
protected Component createMainPanel()
|
{
|
JComponent p = createTreePane();
|
|
final JTree tree = treePane.getTree();
|
tree.getSelectionModel().addTreeSelectionListener(
|
new TreeSelectionListener()
|
{
|
@Override
|
public void valueChanged(TreeSelectionEvent ev)
|
{
|
TreePath[] paths = tree.getSelectionPaths();
|
setEnabledOK(paths != null && paths.length > 0);
|
}
|
});
|
MouseListener mouseListener = new MouseAdapter() {
|
@Override
|
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(LocalizableMessage title)
|
{
|
this.title = title;
|
Window w = Utilities.getParentDialog(this);
|
if (w instanceof GenericDialog)
|
{
|
((GenericDialog)w).updateTitle();
|
}
|
else if (w instanceof GenericFrame)
|
{
|
((GenericFrame)w).updateTitle();
|
}
|
}
|
}
|