/*******************************************************************************
* Copyright (c) 2010 Stefan A. Tzeggai.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Stefan A. Tzeggai - initial API and implementation
******************************************************************************/
package org.geopublishing.geopublisher.gui;
import java.awt.Color;
import java.awt.Component;
import java.text.NumberFormat;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
import org.geopublishing.atlasViewer.AtlasConfig;
import de.schmitzm.geotools.data.amd.AttributeMetadataImpl;
/**
* A renderer that visually represents the quality percentage value (0-100). It
* creates a {@link JLabel} with a red icon for quality 0, and a green one for
* quality 100.
*/
public class QualityPercentageTableCellRenderer extends
DefaultTableCellRenderer {
private AtlasConfig atlasConfig;
public QualityPercentageTableCellRenderer(AtlasConfig ac) {
atlasConfig = ac;
}
public static final int MAXWIDTH = 40;
public static final int MINWIDTH = 32;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Color c = null;
boolean validQualValue = true;
if (value instanceof AttributeMetadataImpl) {
AttributeMetadataImpl atm = (AttributeMetadataImpl)value;
validQualValue = atm.isVisible();
value = atm.getQuality(atlasConfig.getLanguages());
}
if (value instanceof Double) {
Double d = (Double) value;
String stringValue = NumberFormat.getPercentInstance()
.format(value);
JLabel label = new JLabel(stringValue);
if (validQualValue) {
Float green = d.floatValue();
Float red = 1f - d.floatValue();
c = new Color(red, green, 0.1f);
label.setBackground(c);
label.setOpaque(true);
label.setForeground(Color.white);
} else
label.setForeground(Color.black);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.TOP);
TableModel tm = table.getModel();
if (tm instanceof TableModelWithToolTooltip) {
String tt = ((TableModelWithToolTooltip) tm).getToolTipFor(row,
column);
if (tt != null)
label.setToolTipText(tt);
}
return label;
} else {
Component fromSuper = super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
return fromSuper;
}
}
}