/*
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package org.hyperic.image.chart;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.text.NumberFormat;
import javax.imageio.ImageIO;
import org.hyperic.hq.context.Bootstrap;
import org.hyperic.util.data.IDataPoint;
public class AvailabilityReportChart extends Chart{
private static int CIRCLE_SIZE = 11;
private static BufferedImage GOOD_CIRCLE;
private static BufferedImage DANGER_CIRCLE;
private static BufferedImage UNKNOWN_CIRCLE;
private static BufferedImage[] CIRCLES;
private static final FontMetrics TEXT_METRICS;
private static final Color COLOR_TRANSPARENT = new Color(241,243, 246);
private static final Color TEXT_COLOR = Color.BLACK;
private static final String LARGEST_NUMBER = "999";
private static final int TEXT_BUFFER = 2;
private static final int SET_BUFFER = 5;
private static final int CIRCLE_WITH_BUFFER_WIDTH;
private static final int STANDARD_SET_WIDTH;
private static final int IMAGE_WIDTH;
static {
// Get Font Metrics
Image img = new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY);
java.awt.Graphics g = img.getGraphics();
TEXT_METRICS = g.getFontMetrics(DEFAULT_LEGEND_PLAIN);
g.dispose();
// Load Images
InputStream i;
try {
i = Bootstrap.getResource("images/icon_available_green.gif").getInputStream();
GOOD_CIRCLE = ImageIO.read(i);
i.close();
i = Bootstrap.getResource("images/icon_available_red.gif").getInputStream();
DANGER_CIRCLE = ImageIO.read(i);
i.close();
i = Bootstrap.getResource("images/icon_available_error.gif").getInputStream();
UNKNOWN_CIRCLE = ImageIO.read(i);
i.close();
} catch(IOException e) {
System.out.println(e);
}
CIRCLES =
new BufferedImage[] { GOOD_CIRCLE, DANGER_CIRCLE, UNKNOWN_CIRCLE };
CIRCLE_WITH_BUFFER_WIDTH = GOOD_CIRCLE.getWidth() + TEXT_BUFFER;
STANDARD_SET_WIDTH = CIRCLE_WITH_BUFFER_WIDTH +
TEXT_METRICS.stringWidth(LARGEST_NUMBER) +
SET_BUFFER;
IMAGE_WIDTH = (STANDARD_SET_WIDTH * 3) - SET_BUFFER;
}
public AvailabilityReportChart() {
super(IMAGE_WIDTH, GOOD_CIRCLE.getHeight());
setBorder(0);
//useIndexColors = true;
indexColors = true;
}
protected void init() {
showLeftLabels = false;
showBottomLabels = false;
showLeftLegend = false;
showTopLegend = false;
}
protected Rectangle draw(ChartGraphics g) {
g.graphics.setFont(DEFAULT_FONT);
int yCircle = 0;
int y2Circle = CIRCLE_SIZE - 1;
g.graphics.setPaint(COLOR_TRANSPARENT);
g.graphics.fillRect(0, 0, width, height);
DataPointCollection datapts = getDataPoints();
NumberFormat fmt = NumberFormat.getInstance();
fmt.setMaximumFractionDigits(0);
g.graphics.setColor(TEXT_COLOR);
for (int i = 0; i < datapts.size(); i++) {
double val = ((IDataPoint) datapts.get(i)).getValue();
if (val > 0) {
g.graphics.drawImage(CIRCLES[i], STANDARD_SET_WIDTH * i,
yCircle, COLOR_TRANSPARENT, null);
g.graphics.drawString(fmt.format(val), STANDARD_SET_WIDTH * i +
CIRCLE_WITH_BUFFER_WIDTH, y2Circle);
}
}
return new Rectangle(0, 0, height, width);
}
// protected IndexColorModel getIndexColorModel() {
// IndexColorModel cm = super.getIndexColorModel();
//
// int size = cm.getMapSize();
// byte r[] = new byte[size];
// byte g[] = new byte[size];
// byte b[] = new byte[size];
//
// cm.getReds(r);
// cm.getGreens(g);
// cm.getBlues(b);
//
// // Make room by moving the first color to the end of the list
// r[size-1] = r[0];
// g[size-1] = g[0];
// b[size-1] = b[0];
//
// // Set our transparent color as the first in the index
// r[0] = (byte)COLOR_TRANSPARENT.getRed();
// g[0] = (byte)COLOR_TRANSPARENT.getGreen();
// b[0] = (byte)COLOR_TRANSPARENT.getBlue();
//
// return new IndexColorModel(8, size, r, g, b, 0);
// }
protected int getYLabelWidth(Graphics2D g) { return 0; }
protected Rectangle getInteriorRectangle(ChartGraphics g) {
return new Rectangle(0, 0, width, height);
}
protected String[] getXLabels() { return null; }
}