/* * 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 * null 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 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(); } } }