/*
|
* 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 Sun Microsystems, Inc.
|
*/
|
|
package org.opends.guitools.controlpanel.ui.components;
|
|
import static org.opends.messages.AdminToolMessages.*;
|
|
import java.awt.GridBagConstraints;
|
import java.awt.GridBagLayout;
|
import java.awt.event.ActionListener;
|
import java.awt.event.KeyEvent;
|
import java.util.Set;
|
import java.util.TreeSet;
|
|
import javax.swing.ImageIcon;
|
import javax.swing.JLabel;
|
import javax.swing.JPanel;
|
import javax.swing.KeyStroke;
|
|
import org.opends.guitools.controlpanel.browser.IconPool;
|
import org.opends.guitools.controlpanel.datamodel.ObjectClassValue;
|
import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
|
import org.opends.guitools.controlpanel.util.Utilities;
|
import org.opends.messages.Message;
|
import org.opends.messages.MessageBuilder;
|
|
/**
|
* A simple panel used in the LDAP entry viewers to display the object class
|
* values of an entry. It displays the structural and auxiliary object classes.
|
* It does not allow to edit directly the object class value. It is used for
|
* instance in the entry editors (simplified and table views).
|
*
|
*/
|
public class ObjectClassCellPanel extends JPanel
|
{
|
private static final long serialVersionUID = -2362754512894888888L;
|
private JLabel label;
|
private CellEditorButton editButton;
|
private ObjectClassValue value;
|
private JLabel lockLabel = Utilities.createDefaultLabel();
|
|
private ImageIcon lockIcon =
|
Utilities.createImageIcon(IconPool.IMAGE_PATH+"/field-locked.png");
|
|
/**
|
* Default constructor.
|
*
|
*/
|
public ObjectClassCellPanel()
|
{
|
super(new GridBagLayout());
|
setOpaque(false);
|
GridBagConstraints gbc = new GridBagConstraints();
|
gbc.fill = GridBagConstraints.HORIZONTAL;
|
gbc.gridx = 0;
|
gbc.gridy = 0;
|
label = Utilities.createDefaultLabel(
|
INFO_CTRL_PANEL_NO_VALUE_SPECIFIED.get());
|
gbc.weightx = 1.0;
|
add(label, gbc);
|
gbc.gridx ++;
|
editButton = new CellEditorButton(INFO_CTRL_PANEL_EDIT_BUTTON_LABEL.get());
|
editButton.setForeground(ColorAndFontConstants.buttonForeground);
|
editButton.setOpaque(false);
|
gbc.insets.left = 5;
|
gbc.anchor = GridBagConstraints.NORTH;
|
gbc.weightx = 0.0;
|
add(editButton, gbc);
|
gbc.weightx = 0.0;
|
gbc.insets.left = 5;
|
gbc.gridx ++;
|
add(lockLabel, gbc);
|
lockLabel.setVisible(false);
|
}
|
|
/**
|
* Sets the object class value to be displayed in this panel.
|
* @param value the object class value to be displayed in this panel.
|
*/
|
public void setValue(ObjectClassValue value)
|
{
|
label.setText(getMessage(value).toString());
|
this.value = value;
|
}
|
|
/**
|
* Returns the object class value displayed in this panel.
|
* @return the object class value displayed in this panel.
|
*/
|
public ObjectClassValue getValue()
|
{
|
return value;
|
}
|
|
/**
|
* Updates the visibility of the lock icon.
|
* @param visible whether the lock icon is visible or not.
|
*/
|
public void setLockIconVisible(boolean visible)
|
{
|
if (visible)
|
{
|
lockLabel.setIcon(lockIcon);
|
lockLabel.setVisible(true);
|
}
|
else
|
{
|
lockLabel.setIcon(null);
|
lockLabel.setVisible(false);
|
}
|
}
|
|
/**
|
* Explicitly request the focus for the edit button of this panel.
|
*
|
*/
|
public void requestFocusForButton()
|
{
|
editButton.requestFocusInWindow();
|
}
|
|
|
/**
|
* Adds an action listener to this panel. The action listener will be
|
* invoked when the user clicks on the 'Edit' button.
|
* @param listener the action listener.
|
*/
|
public void addEditActionListener(ActionListener listener)
|
{
|
editButton.addActionListener(listener);
|
}
|
|
/**
|
* Removes an action listener previously added with the method
|
* addEditActionListener.
|
* @param listener the action listener.
|
*/
|
public void removeEditActionListener(ActionListener listener)
|
{
|
editButton.removeActionListener(listener);
|
}
|
|
/**
|
* Updates the visibility of the edit button.
|
* @param visible whether the edit button must be visible or not.
|
*/
|
public void setEditButtonVisible(boolean visible)
|
{
|
editButton.setVisible(visible);
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e,
|
int condition, boolean pressed)
|
{
|
return editButton.processKeyBinding(ks, e, condition, pressed);
|
}
|
|
/**
|
* Returns the message describing the provided object class value.
|
* @param value the object class value.
|
* @return the message describing the provided object class value.
|
*/
|
public Message getMessage(ObjectClassValue value)
|
{
|
MessageBuilder sb = new MessageBuilder();
|
if (value != null)
|
{
|
Set<String> aux = new TreeSet<String>();
|
aux.addAll(value.getAuxiliary());
|
aux.remove("top");
|
if (value.getStructural() != null)
|
{
|
sb.append(value.getStructural());
|
}
|
if (aux.size() > 0)
|
{
|
if (sb.length() > 0)
|
{
|
sb.append("<br>");
|
}
|
sb.append(INFO_CTRL_PANEL_OBJECTCLASS_CELL_PANEL_AUXILIARY.get(
|
Utilities.getStringFromCollection(aux, ", ")));
|
}
|
}
|
if (sb.length() > 0)
|
{
|
return Message.raw("<html>"+Utilities.applyFont(sb.toString(),
|
ColorAndFontConstants.defaultFont));
|
}
|
else
|
{
|
return INFO_CTRL_PANEL_NO_VALUE_SPECIFIED.get();
|
}
|
}
|
}
|