ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/reports/DBReporter2/ReportMaker.java
Revision: 1.2
Committed: Sat Feb 3 17:26:07 2001 UTC (24 years, 10 months ago) by pjm2
Branch: MAIN
Changes since 1.1: +20 -15 lines
Log Message:
Fixed the runnaway memory problem.

File Contents

# Content
1 import java.sql.*;
2 import java.util.*;
3 import java.awt.image.*;
4 import java.io.*;
5
6 import uk.ac.ukc.iscream.util.*;
7
8
9 // ReportMaker class - used to produce each type of report for a machine.
10 public class ReportMaker {
11
12 // Constructor. This takes the database Statement.
13 public ReportMaker(Statement stmt, String dateDir, long startTime, long endTime) {
14 _stmt = stmt;
15 _dateDir = dateDir;
16 _startTime = startTime;
17 _endTime = endTime;
18 }
19
20 // Produce all reports in the report list for the machine.
21 public void produce(ReportList reports, String machine) throws SQLException {
22
23 System.out.println("Producing reports for " + machine + ".");
24
25 // Make a list of PlotData objects to build the charts.
26 LinkedList plots = new LinkedList();
27 Iterator reportIt = reports.iterator();
28 while (reportIt.hasNext()) {
29 reportIt.next();
30 plots.add(new PlotData(_startTime, _endTime));
31 }
32
33
34 // Select the data we nede from the database.
35 String sql = "SELECT receipt_date, xml FROM ipacket WHERE machine_name='" + machine + "' AND receipt_date>=" + _startTime + " AND receipt_date<=" + _endTime + " ORDER BY receipt_date;";
36 ResultSet rs = null;
37 try {
38 rs = _stmt.executeQuery(sql);
39 }
40 catch (SQLException e) {
41 System.out.println("Unable to select data for " + machine + ".");
42 return;
43 }
44
45 System.out.println("[DEBUG]Populating PlotData objects.");
46
47 // Go through each selected XML string and add the necessary
48 // data to the PlotData object associated with that report.
49 try {
50 XMLPacketMaker pm = null;
51 XMLPacket packet = null;
52 String xml = null;
53 while(rs.next()) {
54 xml = rs.getString("xml");
55 pm = new XMLPacketMaker(xml);
56 packet = pm.createXMLPacket();
57 reportIt = reports.iterator();
58 Iterator plotIt = plots.iterator();
59 while (reportIt.hasNext()) {
60 PlotData plotData = (PlotData)plotIt.next();
61 Report report = (Report)reportIt.next();
62 String reportField = report.getReportField();
63 long x = rs.getLong("receipt_date");
64 double y;
65 try {
66 y = Double.parseDouble(packet.getParam(reportField));
67 }
68 catch (NumberFormatException e) {
69 System.out.println("Skipped a non-numerical field for " + reportField + ".");
70 continue;
71 }
72 plotData.addPoint(x, y);
73 }
74 }
75 rs.close();
76 }
77 catch (SQLException e) {
78 System.out.println("SQLException: " + e);
79 }
80
81 System.out.println("[DEBUG]Writing graphs to disk.");
82
83 // Write a chart of each report to disk.
84 Iterator plotIt = plots.iterator();
85 reportIt = reports.iterator();
86 while (reportIt.hasNext()) {
87 Report report = (Report)reportIt.next();
88 String reportField = report.getReportField();
89 PlotData plotData = (PlotData)plotIt.next();
90 plotData.flushPoints();
91 plotData.scaleToFitX(SHTMLLayout.CHART_WIDTH, SHTMLLayout.CHART_HEIGHT);
92 IscreamChart chart = new IscreamChart(_startTime, _endTime);
93 double maxY = report.getMaxY();
94 if (!report.isScaled()) {
95 maxY = plotData.getMaxY();
96 }
97 BufferedImage img = chart.drawChart(plotData, SHTMLLayout.CHART_WIDTH, SHTMLLayout.CHART_HEIGHT, 24, 10, maxY);
98 IscreamChartWriter imgWriter = new IscreamChartWriter();
99 imgWriter.writeChart(img, _dateDir + "_" + machine + "_" + reportField + ".gif");
100 System.out.println("[DEBUG]Point count: " + plotData.countPoints());
101 }
102
103 }
104
105 private Statement _stmt = null;
106 private String _dateDir;
107 private long _startTime;
108 private long _endTime;
109 }