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.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.util.Date;
- import java.util.Vector;
-
- public class LineChart extends Applet implements Runnable {
- static final int PARAMS = 1;
- static final int TEMPLATE = 2;
- static final Color[] defaultColors;
- 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 dotSize;
- boolean barBorderEnabled;
- boolean showDateTime;
- boolean isCumulative;
- String currentDateTime;
- Color backgroundColor;
- Color fontColor;
- Color lineColor;
- Vector items;
- Vector pointerToItems;
- Recordset chartData;
- int rowCount;
- int groupCount;
- int itemCount;
- int maxItemLabelWidth;
- int maxGroupLabelWidth;
- double maxValue;
- double minValue;
-
- public void start() {
- if (this.runner == null) {
- this.runner = new Thread(this);
- this.runner.start();
- }
-
- }
-
- public void stop() {
- if (this.runner != null) {
- this.runner.stop();
- this.runner = null;
- }
-
- }
-
- private void getData(int var1) {
- try {
- switch (var1) {
- case 1:
- this.chartData = new AppletParamRecordset(this, "ChartData");
- break;
- case 2:
- this.query.execute();
- this.chartData = this.query.getRecordset();
- }
-
- if (this.refreshTime == 0) {
- ((Applet)this).getAppletContext().showStatus("Done");
- } else {
- ((Applet)this).getAppletContext().showStatus("...");
- }
-
- this.rowCount = this.chartData.getRowCount();
- if (this.rowCount != 0) {
- for(int var2 = 0; var2 < this.rowCount; ++var2) {
- double var5;
- try {
- var5 = new Double(this.chartData.getData(var2 + 1, "Values"));
- } catch (Exception var9) {
- var5 = (double)0.0F;
- }
-
- if (var2 == 0) {
- this.groupCount = this.itemCount = 1;
- this.pointerToItems.setSize(this.rowCount);
- this.pointerToItems.setElementAt(new Integer(this.itemCount - 1), var2);
- this.items.setSize(this.itemCount);
- this.items.setElementAt(new Item(this.chartData.getData(var2 + 1, "Items")), this.itemCount - 1);
- ((Item)this.items.elementAt(this.itemCount - 1)).maxValue = var5;
- ((Item)this.items.elementAt(this.itemCount - 1)).minValue = var5;
- ((Item)this.items.elementAt(this.itemCount - 1)).value = var5;
- this.maxItemLabelWidth = this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Items"));
- this.maxGroupLabelWidth = this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Groups"));
- } else {
- if (!this.chartData.getData(var2 + 1, "Groups").equals(this.chartData.getData(var2, "Groups"))) {
- this.maxGroupLabelWidth = Math.max(this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Groups")), this.maxGroupLabelWidth);
- ++this.groupCount;
- }
-
- boolean var4 = false;
-
- for(int var3 = 0; var3 < var2; ++var3) {
- if (this.chartData.getData(var2 + 1, "Items").equals(this.chartData.getData(var3 + 1, "Items"))) {
- var4 = true;
- this.pointerToItems.setElementAt(this.pointerToItems.elementAt(var3), var2);
- int var7 = (Integer)this.pointerToItems.elementAt(var3);
- if (!this.isCumulative) {
- ((Item)this.items.elementAt(var7)).maxValue = Math.max(var5, ((Item)this.items.elementAt(var7)).maxValue);
- ((Item)this.items.elementAt(var7)).minValue = Math.min(var5, ((Item)this.items.elementAt(var7)).minValue);
- } else {
- Item var10000 = (Item)this.items.elementAt(var7);
- var10000.value += var5;
- ((Item)this.items.elementAt(var7)).maxValue = Math.max(((Item)this.items.elementAt(var7)).maxValue, ((Item)this.items.elementAt(var7)).value);
- ((Item)this.items.elementAt(var7)).minValue = Math.min(((Item)this.items.elementAt(var7)).minValue, ((Item)this.items.elementAt(var7)).value);
- }
- break;
- }
- }
-
- if (!var4) {
- ++this.itemCount;
- this.pointerToItems.setElementAt(new Integer(this.itemCount - 1), var2);
- this.items.setSize(this.itemCount);
- this.items.setElementAt(new Item(this.chartData.getData(var2 + 1, "Items")), this.itemCount - 1);
- ((Item)this.items.elementAt(this.itemCount - 1)).maxValue = var5;
- ((Item)this.items.elementAt(this.itemCount - 1)).minValue = var5;
- ((Item)this.items.elementAt(this.itemCount - 1)).value = var5;
- this.maxItemLabelWidth = Math.max(this.legendFontMetrics.stringWidth(this.chartData.getData(var2 + 1, "Items")), this.maxItemLabelWidth);
- }
- }
- }
-
- this.maxValue = (double)0.0F;
- this.minValue = (double)0.0F;
-
- for(int var12 = 0; var12 < this.itemCount; ++var12) {
- this.maxValue = Math.max(((Item)this.items.elementAt(var12)).maxValue, this.maxValue);
- this.minValue = Math.min(((Item)this.items.elementAt(var12)).minValue, this.minValue);
- }
-
- for(int var11 = 0; var11 < this.itemCount; ++var11) {
- if (var11 < 9) {
- ((Item)this.items.elementAt(var11)).color = defaultColors[var11];
- } else if (var11 < 18) {
- ((Item)this.items.elementAt(var11)).color = defaultColors[var11 - 9].darker();
- } else if (var11 < 27) {
- ((Item)this.items.elementAt(var11)).color = defaultColors[var11 - 18].darker().darker();
- } else {
- ((Item)this.items.elementAt(var11)).color = Color.black;
- }
- }
- }
-
- this.currentDateTime = (new Date()).toLocaleString();
- } catch (Exception var10) {
- if (this.debugInfoEnabled) {
- Debug.write(((Throwable)var10).getMessage());
- }
-
- }
- }
-
- public boolean mouseExit(Event var1, int var2, int var3) {
- if (var1.id == 505) {
- ((Applet)this).getAppletContext().showStatus("");
- return true;
- } else {
- return false;
- }
- }
-
- static {
- defaultColors = new Color[]{Color.red, Color.blue, Color.green, Color.yellow, Color.magenta, Color.cyan, Color.orange, Color.pink, Color.darkGray};
- }
-
- private void pause(int var1) {
- try {
- Thread.sleep((long)var1);
- } catch (InterruptedException var4) {
- if (this.debugInfoEnabled) {
- Debug.write(((Throwable)var4).getMessage());
- }
-
- }
- }
-
- public boolean mouseEnter(Event var1, int var2, int var3) {
- if (var1.id == 504) {
- ((Applet)this).getAppletContext().showStatus("(c)1996 Allaire Corp.");
- return true;
- } else {
- return false;
- }
- }
-
- public void run() {
- while(this.refreshTime != 0) {
- this.pause(this.refreshTime * 1000);
- this.getData(2);
- ((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);
- }
-
- this.legendFontName = ((Applet)this).getParameter("LegendFontName");
- if (this.legendFontName == null) {
- this.legendFontName = "TimesRoman";
- }
-
- var1 = ((Applet)this).getParameter("ShowLegend");
- if (var1 == null) {
- this.legendEnabled = true;
- } else if (var1.toLowerCase().equals("yes")) {
- this.legendEnabled = true;
- } else {
- this.legendEnabled = false;
- }
-
- 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("ShowDateTime");
- if (var1 == null) {
- this.showDateTime = true;
- } else if (var1.toLowerCase().equals("yes")) {
- this.showDateTime = true;
- } else {
- this.showDateTime = false;
- }
-
- var1 = ((Applet)this).getParameter("Cumulative");
- if (var1 == null) {
- this.isCumulative = false;
- } else if (var1.toLowerCase().equals("yes")) {
- this.isCumulative = true;
- } else {
- this.isCumulative = false;
- }
-
- var1 = ((Applet)this).getParameter("DotSize");
- if (var1 == null) {
- this.dotSize = 2;
- } else {
- this.dotSize = 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.pointerToItems = new Vector();
- this.items = new Vector();
- this.getData(1);
- }
-
- public synchronized void paint(Graphics var1) {
- if (this.itemCount > 0) {
- if (this.maxValue == (double)0.0F && this.minValue == (double)0.0F) {
- this.maxValue = (double)1.0F;
- } else if (this.maxValue < (double)0.0F) {
- this.maxValue = (double)0.0F;
- } else if (this.minValue > (double)0.0F) {
- this.minValue = (double)0.0F;
- }
-
- int var4 = ((Component)this).size().width / 15;
- int var5 = ((Component)this).size().height / 15;
- double var12 = Math.pow((double)10.0F, Math.floor(Math.log(this.maxValue - this.minValue) / Math.log((double)10.0F)));
- if ((this.maxValue - this.minValue) / var12 < (double)2.0F) {
- var12 /= (double)5.0F;
- }
-
- if ((this.maxValue - this.minValue) / var12 < (double)5.0F) {
- var12 /= (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 - var5);
- var1.setFont(this.legendFont);
- if (this.showDateTime) {
- var1.drawString("(as of " + this.currentDateTime + ")", Math.max((((Component)this).size().width - this.legendFontMetrics.stringWidth("(as of " + this.currentDateTime + ")")) / 2, 0), ((Component)this).size().height - var5 + this.legendFontHeight * 3 / 2);
- }
-
- int var25;
- if (this.legendEnabled) {
- int var43 = Math.min((((Component)this).size().height - this.titleFontHeight - 3 * var5) / this.legendFontHeight, this.itemCount);
- int var44 = (((Component)this).size().height - this.titleFontHeight - 3 * var5) / var43;
- if (var44 > 2 * this.titleFontHeight) {
- var44 = 2 * this.titleFontHeight;
- }
-
- var25 = this.legendFontHeight * 2 + this.maxItemLabelWidth + var4;
- int var42 = var43 * var44;
- int var8 = ((Component)this).size().width - var25;
- int var9 = (((Component)this).size().height - 3 * var5 - this.titleFontHeight - var42) / 2 + var5;
- var1.drawRect(var8 - this.legendFontHeight, var9 - var44 / 2, var25 - var4 + 2 * this.legendFontHeight, var42 + var44 / 2);
-
- for(int var2 = 0; var2 < var43; ++var2) {
- var1.setColor(((Item)this.items.elementAt(var2)).color);
- var1.fillRect(var8, var9, this.legendFontHeight, this.legendFontHeight);
- if (this.barBorderEnabled) {
- var1.setColor(this.fontColor);
- var1.drawRect(var8, var9, this.legendFontHeight - 1, this.legendFontHeight - 1);
- }
-
- var1.setColor(this.fontColor);
- var1.drawString(((Item)this.items.elementAt(var2)).label, var8 + 2 * this.legendFontHeight, var9 + this.legendFontHeight - 1);
- var9 += var44;
- }
- } else {
- boolean var28 = false;
- boolean var27 = false;
- boolean var26 = false;
- var25 = 0;
- }
-
- int var23 = ((Component)this).size().width - 2 * var4 - var25;
- int var24 = ((Component)this).size().height - this.titleFontHeight - this.legendFontHeight - 3 * var5;
- double var10 = Math.max((double)var24 / (this.maxValue - this.minValue), (double)0.0F);
- int var22 = Math.max(var23 / this.groupCount, 2);
- int var6 = var4;
- int var7 = var5 + var24 + (int)(this.minValue * var10);
-
- for(double var14 = (double)0.0F; var14 < this.maxValue; var14 += var12) {
- var1.setColor(this.lineColor);
- var1.drawLine(var6, var7 - (int)(var10 * var14), var6 + var23, var7 - (int)(var10 * var14));
- var1.drawString("" + var14, var6 - this.legendFontMetrics.stringWidth("" + var14) - 2, var7 - (int)(var10 * var14) + this.legendFontHeight / 2);
- }
-
- for(double var40 = (double)0.0F; var40 > this.minValue; var40 -= var12) {
- var1.setColor(this.lineColor);
- var1.drawLine(var6, var7 - (int)(var10 * var40), var6 + var23, var7 - (int)(var10 * var40));
- var1.drawString("" + var40, var6 - this.legendFontMetrics.stringWidth("" + var40) - 2, var7 - (int)(var10 * var40) + this.legendFontHeight / 2);
- }
-
- var6 += var22 / 2;
- double var20 = (double)0.0F;
- double var18 = (double)0.0F;
- String var30 = "";
- boolean var31 = true;
- double var16 = (double)0.0F;
-
- for(int var3 = 0; var3 < this.itemCount; ++var3) {
- ((Item)this.items.elementAt(var3)).value = (double)0.0F;
- ((Item)this.items.elementAt(var3)).previousValue = (double)0.0F;
- }
-
- for(int var36 = 0; var36 < this.rowCount; ++var36) {
- int var32 = (Integer)this.pointerToItems.elementAt(var36);
-
- String var29;
- try {
- var29 = this.chartData.getData(var36 + 1, "Groups");
- } catch (Exception var35) {
- var29 = "";
- }
-
- if (var36 > 0 && !var29.equals(var30)) {
- for(int var37 = 0; var37 < this.itemCount; ++var37) {
- if (!var31) {
- var1.setColor(((Item)this.items.elementAt(var37)).color);
- var1.drawLine(var6 - var22, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var37)).previousValue), var6, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var37)).value));
- var1.fillRect(var6 - var22 - this.dotSize, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var37)).previousValue) - this.dotSize, this.dotSize * 2 + 1, this.dotSize * 2 + 1);
- }
-
- if (!this.isCumulative) {
- ((Item)this.items.elementAt(var37)).copyValueAndReset();
- } else {
- ((Item)this.items.elementAt(var37)).copyValue();
- }
- }
-
- if (this.legendFontMetrics.stringWidth(var30) > var22) {
- var30 = var30.substring(0, var30.length() * var22 / this.legendFontMetrics.stringWidth(var30));
- }
-
- var1.setColor(this.fontColor);
- var1.drawString(var30, var6 - this.legendFontMetrics.stringWidth(var30) / 2, var7 + this.legendFontHeight + this.dotSize);
- var6 += var22;
- var31 = false;
- }
-
- var30 = var29;
-
- try {
- var16 = new Double(this.chartData.getData(var36 + 1, "Values"));
- } catch (Exception var34) {
- var16 = (double)0.0F;
- }
-
- Item var10000 = (Item)this.items.elementAt(var32);
- var10000.value += var16;
- }
-
- for(int var38 = 0; var38 < this.itemCount; ++var38) {
- var1.setColor(((Item)this.items.elementAt(var38)).color);
- var1.drawLine(var6 - var22, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var38)).previousValue), var6, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var38)).value));
- var1.fillRect(var6 - var22 - this.dotSize, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var38)).previousValue) - this.dotSize, this.dotSize * 2 + 1, this.dotSize * 2 + 1);
- var1.fillRect(var6 - this.dotSize, var7 - (int)((double)0.5F + var10 * ((Item)this.items.elementAt(var38)).value) - this.dotSize, this.dotSize * 2 + 1, this.dotSize * 2 + 1);
- }
-
- if (this.legendFontMetrics.stringWidth(var30) > var22) {
- var30 = var30.substring(0, var30.length() * var22 / this.legendFontMetrics.stringWidth(var30));
- }
-
- var1.setColor(this.fontColor);
- var1.drawString(var30, var6 - this.legendFontMetrics.stringWidth(var30) / 2, var7 + this.legendFontHeight + this.dotSize);
- }
-
- }
- }
-