home *** CD-ROM | disk | FTP | other *** search
- import allaire.dcf.recordset.AppletParamRecordset;
- import allaire.dcf.recordset.Query;
- import allaire.dcf.recordset.Recordset;
- import allaire.util.Debug;
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Panel;
- import java.util.Date;
- import java.util.Vector;
-
- public class BarChart extends Applet implements Runnable {
- static final int VERTICAL = 1;
- static final int HORIZONTAL = 2;
- Thread runner;
- Query query;
- int refreshTime;
- boolean debugInfoEnabled;
- String title;
- String titleFontName;
- Font titleFont;
- FontMetrics titleFontMetrics;
- int titleFontHeight;
- String legendFontName;
- Font legendFont;
- FontMetrics legendFontMetrics;
- int legendFontHeight;
- int legendHeight;
- int legendWidth;
- boolean legendEnabled;
- int orientation;
- int shadow;
- double scale;
- boolean barBorderEnabled;
- boolean showDateTime;
- Color[] defaultColors;
- Vector colors;
- Recordset chartData;
- int itemCount;
- int maxLegendWidth;
- double maxValue;
- double minValue;
- Color backgroundColor;
- Color fontColor;
- Color lineColor;
- Panel panel;
-
- public void start() {
- if (this.runner == null) {
- this.runner = new Thread(this);
- this.runner.start();
- }
-
- }
-
- public BarChart() {
- this.defaultColors = new Color[]{Color.red, Color.blue, Color.green, Color.yellow, Color.magenta, Color.cyan, Color.orange, Color.pink, Color.darkGray};
- }
-
- public void stop() {
- if (this.runner != null) {
- this.runner.stop();
- this.runner = null;
- }
-
- }
-
- private void getData() {
- this.maxValue = this.minValue = (double)0.0F;
-
- try {
- if (this.chartData == null) {
- this.chartData = new AppletParamRecordset(this, "ChartData");
- } else {
- this.query.execute();
- this.chartData = this.query.getRecordset();
- }
-
- if (this.refreshTime == 0) {
- ((Applet)this).getAppletContext().showStatus("Done");
- } else {
- ((Applet)this).getAppletContext().showStatus("...");
- }
-
- this.itemCount = this.chartData.getRowCount();
- this.colors.setSize(this.itemCount);
- this.maxLegendWidth = 0;
-
- for(int var1 = 0; var1 < this.itemCount; ++var1) {
- this.maxLegendWidth = Math.max(this.legendFontMetrics.stringWidth(this.chartData.getData(var1 + 1, "Items")), this.maxLegendWidth);
-
- double var3;
- try {
- var3 = new Double(this.chartData.getData(var1 + 1, "Values"));
- } catch (Exception var7) {
- var3 = (double)0.0F;
- }
-
- if (var3 > this.maxValue) {
- this.maxValue = var3;
- }
-
- if (var3 < this.minValue) {
- this.minValue = var3;
- }
-
- if (!this.chartData.columnExists("Colors")) {
- if (var1 < 9) {
- this.colors.setElementAt(this.defaultColors[var1], var1);
- } else if (var1 < 18) {
- this.colors.setElementAt(this.defaultColors[var1 - 9].darker(), var1);
- } else if (var1 < 27) {
- this.colors.setElementAt(this.defaultColors[var1 - 18].darker().darker(), var1);
- } else {
- this.colors.setElementAt(Color.black, var1);
- }
- } else {
- String var2 = this.chartData.getData(var1 + 1, "Colors");
- if (var2.equals("red")) {
- this.colors.setElementAt(Color.red, var1);
- } else if (var2.equals("green")) {
- this.colors.setElementAt(Color.green, var1);
- } else if (var2.equals("blue")) {
- this.colors.setElementAt(Color.blue, var1);
- } else if (var2.equals("pink")) {
- this.colors.setElementAt(Color.pink, var1);
- } else if (var2.equals("orange")) {
- this.colors.setElementAt(Color.orange, var1);
- } else if (var2.equals("magenta")) {
- this.colors.setElementAt(Color.magenta, var1);
- } else if (var2.equals("cyan")) {
- this.colors.setElementAt(Color.cyan, var1);
- } else if (var2.equals("white")) {
- this.colors.setElementAt(Color.white, var1);
- } else if (var2.equals("yellow")) {
- this.colors.setElementAt(Color.yellow, var1);
- } else if (var2.equals("gray")) {
- this.colors.setElementAt(Color.gray, var1);
- } else if (var2.equals("darkGray")) {
- this.colors.setElementAt(Color.darkGray, var1);
- } else {
- this.colors.setElementAt(Color.black, var1);
- }
- }
- }
-
- } catch (Exception var8) {
- if (this.debugInfoEnabled) {
- Debug.write(((Throwable)var8).getMessage());
- }
-
- }
- }
-
- private void pause(int var1) {
- try {
- Thread.sleep((long)var1);
- } catch (InterruptedException var4) {
- if (this.debugInfoEnabled) {
- Debug.write(((Throwable)var4).getMessage());
- }
-
- }
- }
-
- public void run() {
- while(this.refreshTime != 0) {
- this.pause(this.refreshTime * 1000);
- this.getData();
- ((Component)this).repaint();
- }
-
- this.stop();
- }
-
- public synchronized void init() {
- String var1 = ((Applet)this).getParameter("RefreshTime");
- if (var1 == null) {
- this.refreshTime = 0;
- } else {
- this.refreshTime = Integer.parseInt(var1);
- var1 = ((Applet)this).getParameter("RefreshDataFromURL");
- if (var1 == null) {
- this.refreshTime = 0;
- } else {
- if (var1.indexOf(63) == -1) {
- var1 = var1 + '?';
- }
-
- this.query = new Query(var1);
- this.query.addParam("RefreshTime", String.valueOf(this.refreshTime));
- }
- }
-
- var1 = ((Applet)this).getParameter("DebugInfoEnabled");
- if (var1 == null) {
- this.debugInfoEnabled = false;
- } else if (var1.toLowerCase().equals("yes")) {
- this.debugInfoEnabled = true;
- } else {
- this.debugInfoEnabled = false;
- }
-
- this.title = ((Applet)this).getParameter("Title");
- if (this.title == null) {
- this.title = "Chart";
- }
-
- this.titleFontName = ((Applet)this).getParameter("TitleFontName");
- if (this.titleFontName == null) {
- this.titleFontName = "TimesRoman";
- }
-
- var1 = ((Applet)this).getParameter("TitleFontHeight");
- if (var1 == null) {
- this.titleFontHeight = 12;
- } else {
- this.titleFontHeight = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("ShowDateTime");
- if (var1 == null) {
- this.showDateTime = true;
- } else if (var1.toLowerCase().equals("yes")) {
- this.showDateTime = true;
- } else {
- this.showDateTime = false;
- }
-
- this.legendFontName = ((Applet)this).getParameter("LegendFontName");
- if (this.legendFontName == null) {
- this.legendFontName = "TimesRoman";
- }
-
- var1 = ((Applet)this).getParameter("LegendFontHeight");
- if (var1 == null) {
- this.legendFontHeight = 10;
- } else {
- this.legendFontHeight = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("DrawBorders");
- if (var1 == null) {
- this.barBorderEnabled = true;
- } else if (var1.toLowerCase().equals("yes")) {
- this.barBorderEnabled = true;
- } else {
- this.barBorderEnabled = false;
- }
-
- var1 = ((Applet)this).getParameter("Orientation");
- if (var1 == null) {
- this.orientation = 1;
- } else if (var1.toLowerCase().equals("vertical")) {
- this.orientation = 1;
- } else if (var1.toLowerCase().equals("horizontal")) {
- this.orientation = 2;
- } else {
- this.orientation = 1;
- }
-
- var1 = ((Applet)this).getParameter("Shadow");
- if (var1 == null) {
- this.shadow = 4;
- } else {
- this.shadow = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("BackgroundColor");
- if (var1 == null) {
- this.backgroundColor = ((Component)this).getBackground();
- } else {
- this.backgroundColor = new Color(Integer.valueOf(var1, 16));
- }
-
- var1 = ((Applet)this).getParameter("FontColor");
- if (var1 == null) {
- this.fontColor = Color.black;
- } else {
- this.fontColor = new Color(Integer.valueOf(var1, 16));
- }
-
- var1 = ((Applet)this).getParameter("GridLineColor");
- if (var1 == null) {
- this.lineColor = Color.gray;
- } else {
- this.lineColor = new Color(Integer.valueOf(var1, 16));
- }
-
- ((Component)this).setBackground(this.backgroundColor);
- this.titleFont = new Font(this.titleFontName, 1, this.titleFontHeight);
- this.titleFontMetrics = ((Component)this).getFontMetrics(this.titleFont);
- this.legendFont = new Font(this.legendFontName, 0, this.legendFontHeight);
- this.legendFontMetrics = ((Component)this).getFontMetrics(this.legendFont);
- this.colors = new Vector();
- this.getData();
- }
-
- public synchronized void paint(Graphics var1) {
- double var16 = (double)0.0F;
- if (this.itemCount > 0) {
- if (this.maxValue == (double)0.0F && this.minValue == (double)0.0F) {
- this.maxValue = (double)1.0F;
- }
-
- int var3 = ((Component)this).size().width / 15;
- int var4 = ((Component)this).size().height / 15;
- double var7 = Math.pow((double)10.0F, Math.floor(Math.log(this.maxValue - this.minValue) / Math.log((double)10.0F)));
- if ((this.maxValue - this.minValue) / var7 < (double)6.0F) {
- var7 /= (double)2.0F;
- }
-
- var1.setColor(this.fontColor);
- var1.setFont(this.titleFont);
- var1.drawString(this.title, Math.max((((Component)this).size().width - this.titleFontMetrics.stringWidth(this.title)) / 2, 0), ((Component)this).size().height - var4);
- var1.setFont(this.legendFont);
- if (this.showDateTime) {
- String var19 = (new Date()).toLocaleString();
- var1.drawString("(as of " + var19 + ")", Math.max((((Component)this).size().width - this.legendFontMetrics.stringWidth("(as of " + var19 + ")")) / 2, 0), ((Component)this).size().height - var4 + this.legendFontHeight * 3 / 2);
- }
-
- switch (this.orientation) {
- case 1:
- int var36 = ((Component)this).size().width - 2 * var3;
- int var37 = ((Component)this).size().height - this.titleFontHeight - this.legendFontHeight - 3 * var4;
- this.scale = Math.max((double)var37 / (this.maxValue - this.minValue), (double)0.0F);
- int var34 = Math.max(var36 * 3 / (4 * this.itemCount), this.legendFontMetrics.stringWidth("O"));
- int var35 = Math.max((var36 - this.itemCount * var34) / this.itemCount, 0);
- int var26 = var3;
- int var29 = var4 + (int)(this.scale * this.maxValue);
-
- for(double var31 = (double)0.0F; var31 < this.maxValue; var31 += var7) {
- var1.setColor(this.lineColor);
- var1.drawLine(var26, var29 - (int)(this.scale * var31), var26 + var36, var29 - (int)(this.scale * var31));
- var1.drawString("" + var31, var26 - this.legendFontMetrics.stringWidth("" + var31) - 2, var29 - (int)(this.scale * var31) + this.legendFontHeight / 2);
- }
-
- for(double var32 = (double)0.0F; var32 > this.minValue; var32 -= var7) {
- var1.setColor(this.lineColor);
- var1.drawLine(var26, var29 - (int)(this.scale * var32), var26 + var36, var29 - (int)(this.scale * var32));
- var1.drawString("" + var32, var26 - this.legendFontMetrics.stringWidth("" + var32) - 2, var29 - (int)(this.scale * var32) + this.legendFontHeight / 2);
- }
-
- var26 += var35 / 2 + this.shadow;
-
- for(int var25 = 0; var25 < this.itemCount; ++var25) {
- try {
- var16 = new Double(this.chartData.getData(var25 + 1, "Values"));
- } catch (Exception var24) {
- var16 = (double)0.0F;
- }
-
- String var40;
- try {
- var40 = this.chartData.getData(var25 + 1, "Items");
- } catch (Exception var23) {
- var40 = "";
- }
-
- if (this.legendFontMetrics.stringWidth(var40) > var34) {
- var40 = var40.substring(0, var40.length() * var34 / this.legendFontMetrics.stringWidth(var40));
- }
-
- int var33 = (int)Math.abs(this.scale * var16);
- if (var16 < (double)0.0F) {
- var1.setColor(this.lineColor);
- var1.fillRect(var26, var29, var34, var33);
- var1.setColor((Color)this.colors.elementAt(var25));
- var1.fillRect(var26 - this.shadow, var29 + this.shadow, var34, var33);
- var1.setColor(this.fontColor);
- var1.drawString("" + var16, var26 + (var34 - this.legendFontMetrics.stringWidth("" + var16)) / 2, var29 + var33 + this.legendFontHeight + this.shadow);
- var1.drawString(var40, var26 + (var34 - this.legendFontMetrics.stringWidth(var40)) / 2, var29 - 2);
- if (this.barBorderEnabled) {
- var1.drawRect(var26 - this.shadow, var29 + this.shadow, var34 - 1, var33 - 1);
- }
- } else {
- var1.setColor(this.lineColor);
- var1.fillRect(var26, var29 - var33, var34, var33);
- var1.setColor((Color)this.colors.elementAt(var25));
- var1.fillRect(var26 - this.shadow, var29 - var33 + this.shadow, var34, var33);
- var1.setColor(this.fontColor);
- var1.drawString("" + var16, var26 + (var34 - this.legendFontMetrics.stringWidth("" + var16)) / 2, var29 - var33 - 2);
- var1.drawString(var40, var26 + (var34 - this.legendFontMetrics.stringWidth(var40)) / 2, var29 + this.legendFontHeight + this.shadow);
- if (this.barBorderEnabled) {
- var1.drawRect(var26 - this.shadow, var29 - var33 + this.shadow, var34 - 1, var33 - 1);
- }
- }
-
- var26 += var34 + var35;
- }
-
- return;
- case 2:
- int var14 = ((Component)this).size().width - 2 * var3 - this.maxLegendWidth;
- int var15 = ((Component)this).size().height - this.titleFontHeight - this.legendFontHeight - 2 * var4;
- this.scale = Math.max((double)var14 / (this.maxValue - this.minValue), (double)0.0F);
- int var12 = var15 * 3 / (4 * this.itemCount);
- int var13 = Math.max((var15 - this.itemCount * var12) / this.itemCount, 0);
- int var5 = var3 + this.maxLegendWidth - (int)(this.scale * this.minValue) + this.shadow;
- int var6 = var4;
-
- for(double var9 = (double)0.0F; var9 < this.maxValue; var9 += var7) {
- var1.setColor(this.lineColor);
- var1.drawLine(var5 + (int)(this.scale * var9), var6, var5 + (int)(this.scale * var9), var6 + var15);
- var1.drawString("" + var9, var5 + (int)(this.scale * var9) - this.legendFontMetrics.stringWidth("" + var9) / 2, var6 - 2);
- }
-
- for(double var30 = (double)0.0F; var30 > this.minValue; var30 -= var7) {
- var1.setColor(this.lineColor);
- var1.drawLine(var5 + (int)(this.scale * var30), var6, var5 + (int)(this.scale * var30), var6 + var15);
- var1.drawString("" + var30, var5 + (int)(this.scale * var30) - this.legendFontMetrics.stringWidth("" + var30) / 2, var6 - 2);
- }
-
- var6 += var13 / 2 + this.shadow;
-
- for(int var2 = 0; var2 < this.itemCount; ++var2) {
- try {
- var16 = new Double(this.chartData.getData(var2 + 1, "Values"));
- } catch (Exception var22) {
- var16 = (double)0.0F;
- }
-
- String var18;
- try {
- var18 = this.chartData.getData(var2 + 1, "Items");
- } catch (Exception var21) {
- var18 = "";
- }
-
- int var11 = (int)Math.abs(this.scale * var16);
- if (var16 < (double)0.0F) {
- var1.setColor(this.lineColor);
- var1.fillRect(var5 - var11, var6, var11, var12);
- var1.setColor((Color)this.colors.elementAt(var2));
- var1.fillRect(var5 - var11 - this.shadow, var6 - this.shadow, var11, var12);
- var1.setColor(this.fontColor);
- var1.drawString("" + var16, var5 + 3, var6 + var12 / 2 + this.legendFontHeight / 2 - this.shadow);
- if (this.barBorderEnabled) {
- var1.drawRect(var5 - var11 - this.shadow, var6 - this.shadow, var11 - 1, var12 - 1);
- }
- } else {
- var1.setColor(this.lineColor);
- var1.fillRect(var5, var6, var11, var12);
- var1.setColor((Color)this.colors.elementAt(var2));
- var1.fillRect(var5 - this.shadow, var6 - this.shadow, var11, var12);
- var1.setColor(this.fontColor);
- var1.drawString("" + var16, var5 + var11 + 3, var6 + var12 / 2 + this.legendFontHeight / 2 - this.shadow);
- if (this.barBorderEnabled) {
- var1.drawRect(var5 - this.shadow, var6 - this.shadow, var11 - 1, var12 - 1);
- }
- }
-
- var1.drawString(var18, var3 / 2, var6 + var12 / 2 + this.legendFontHeight / 2 - this.shadow);
- var6 += var12 + var13;
- }
-
- return;
- }
- }
-
- }
- }
-