/*
|
* 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.renderer;
|
|
import static org.opends.messages.AdminToolMessages.*;
|
|
import java.awt.Component;
|
import java.awt.GridBagConstraints;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
|
import javax.swing.ImageIcon;
|
import javax.swing.JLabel;
|
import javax.swing.JTable;
|
|
import org.opends.guitools.controlpanel.browser.IconPool;
|
import org.opends.guitools.controlpanel.datamodel.BinaryValue;
|
import org.opends.guitools.controlpanel.datamodel.ObjectClassValue;
|
import org.opends.guitools.controlpanel.ui.components.BinaryCellPanel;
|
import org.opends.guitools.controlpanel.ui.components.ObjectClassCellPanel;
|
import org.opends.guitools.controlpanel.util.Utilities;
|
import org.opends.server.types.Schema;
|
|
/**
|
* The renderer used by the table in the 'Attribute View' of the LDAP entry
|
* browser.
|
*
|
*/
|
public class LDAPEntryTableCellRenderer extends SelectableTableCellRenderer
|
{
|
private static final long serialVersionUID = 3590456676685339618L;
|
private BinaryCellPanel binaryPanel;
|
private ObjectClassCellPanel ocPanel;
|
private JLabel lockLabel = new JLabel();
|
private ImageIcon lockIcon =
|
Utilities.createImageIcon(IconPool.IMAGE_PATH+"/field-locked.png");
|
private Schema schema;
|
private Collection<String> requiredAttrs = new ArrayList<String>();
|
|
/**
|
* Constructor of the cell renderer.
|
*
|
*/
|
public LDAPEntryTableCellRenderer()
|
{
|
binaryPanel = new BinaryCellPanel();
|
binaryPanel.setOpaque(true);
|
ocPanel = new ObjectClassCellPanel();
|
ocPanel.setOpaque(true);
|
GridBagConstraints gbc = new GridBagConstraints();
|
add(lockLabel, gbc);
|
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
public Component getTableCellRendererComponent(JTable table, Object value,
|
boolean isSelected, boolean hasFocus, int row, int column) {
|
if (isRequired(table, row, column))
|
{
|
Utilities.setRequiredIcon(label);
|
}
|
else
|
{
|
label.setIcon(null);
|
}
|
if (isPassword(table, row, column))
|
{
|
return getStringValue(table, Utilities.OBFUSCATED_VALUE, isSelected,
|
hasFocus, row, column);
|
}
|
else if (value instanceof ObjectClassValue)
|
{
|
if (!table.isCellEditable(row, column))
|
{
|
ocPanel.setLockIconVisible(true);
|
ocPanel.setEditButtonVisible(false);
|
}
|
else
|
{
|
ocPanel.setLockIconVisible(false);
|
ocPanel.setEditButtonVisible(true);
|
}
|
ocPanel.setValue((ObjectClassValue)value);
|
if (hasFocus)
|
{
|
ocPanel.setBorder(getDefaultFocusBorder(table, value, isSelected,
|
row, column));
|
}
|
else
|
{
|
ocPanel.setBorder(defaultBorder);
|
}
|
updateComponent(ocPanel, table, row, column, isSelected);
|
return ocPanel;
|
}
|
else if ((value instanceof byte[]) || (value instanceof BinaryValue))
|
{
|
if (value instanceof byte[])
|
{
|
if (((byte[])value).length > 0)
|
{
|
binaryPanel.setValue((byte[])value, isImage(table, row, column));
|
}
|
else
|
{
|
binaryPanel.setValue((byte[])null, isImage(table, row, column));
|
}
|
}
|
else
|
{
|
binaryPanel.setValue((BinaryValue)value, isImage(table, row, column));
|
}
|
if (!table.isCellEditable(row, column))
|
{
|
binaryPanel.setLockIconVisible(true);
|
binaryPanel.setEditButtonText(INFO_CTRL_PANEL_VIEW_BUTTON_LABEL.get());
|
}
|
else
|
{
|
binaryPanel.setLockIconVisible(false);
|
binaryPanel.setEditButtonText(INFO_CTRL_PANEL_EDIT_BUTTON_LABEL.get());
|
}
|
if (hasFocus)
|
{
|
binaryPanel.setBorder(getDefaultFocusBorder(table, value, isSelected,
|
row, column));
|
}
|
else
|
{
|
binaryPanel.setBorder(defaultBorder);
|
}
|
updateComponent(binaryPanel, table, row, column, isSelected);
|
return binaryPanel;
|
}
|
else
|
{
|
return getStringValue(table, value, isSelected, hasFocus, row, column);
|
}
|
}
|
|
/**
|
* Returns the String representation for a given byte array.
|
* @param value the byte array.
|
* @return the String representation for a given byte array.
|
*/
|
public String getString(byte[] value)
|
{
|
return binaryPanel.getString(value, false).toString();
|
}
|
|
/**
|
* Returns the String representation for a given BinaryValue object.
|
* @param value the BinaryValue object.
|
* @return the String representation for the provided BinaryValue object.
|
*/
|
public String getString(BinaryValue value)
|
{
|
return binaryPanel.getMessage(value, false).toString();
|
}
|
|
/**
|
* Returns the String representation for a given ObjectClassValue object.
|
* @param value the ObjectClassValue object.
|
* @return the String representation for the provided ObjectClassValue object.
|
*/
|
public String getString(ObjectClassValue value)
|
{
|
return ocPanel.getMessage(value).toString();
|
}
|
|
private Component getStringValue(JTable table, Object value,
|
boolean isSelected, boolean hasFocus, int row, int column)
|
{
|
super.getTableCellRendererComponent(table, value, isSelected,
|
hasFocus, row, column);
|
if (table.isCellEditable(row, column) && !isSelected)
|
{
|
lockLabel.setIcon(null);
|
}
|
else
|
{
|
if ((column == 1) && !table.isCellEditable(row, column))
|
{
|
lockLabel.setIcon(lockIcon);
|
}
|
else
|
{
|
lockLabel.setIcon(null);
|
}
|
}
|
return this;
|
}
|
|
private boolean isPassword(JTable table, int row, int col)
|
{
|
boolean isPassword = false;
|
if (col == 1)
|
{
|
Object o = table.getValueAt(row, 0);
|
if (Utilities.hasPasswordSyntax((String)o, getSchema()))
|
{
|
isPassword = true;
|
}
|
}
|
return isPassword;
|
}
|
|
private boolean isImage(JTable table, int row, int col)
|
{
|
boolean isImage = false;
|
if (col == 1)
|
{
|
Object o = table.getValueAt(row, 0);
|
isImage = Utilities.hasImageSyntax((String)o, schema);
|
}
|
return isImage;
|
}
|
|
/**
|
* Returns the schema.
|
* @return the schema.
|
*/
|
public Schema getSchema()
|
{
|
return schema;
|
}
|
|
/**
|
* Sets the schema.
|
* @param schema the schema.
|
*/
|
public void setSchema(Schema schema)
|
{
|
this.schema = schema;
|
}
|
|
/**
|
* Sets the list of required attributes for the entry that is being rendered
|
* using this renderer.
|
* @param requiredAttrs the required attribute names.
|
*/
|
public void setRequiredAttrs(Collection<String> requiredAttrs)
|
{
|
this.requiredAttrs.clear();
|
this.requiredAttrs.addAll(requiredAttrs);
|
}
|
|
private boolean isRequired(JTable table, int row, int col)
|
{
|
boolean isRequired = false;
|
if (col == 0)
|
{
|
Object o = table.getValueAt(row, 0);
|
isRequired = requiredAttrs.contains(
|
Utilities.getAttributeNameWithoutOptions((String)o).toLowerCase());
|
}
|
return isRequired;
|
}
|
}
|