ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/reports/DBReporter2/ReportMaker.java
Revision: 1.3
Committed: Sat Feb 3 19:14:37 2001 UTC (24 years, 10 months ago) by pjm2
Branch: MAIN
Changes since 1.2: +3 -1 lines
Log Message:
Test file no longer needed.

File Contents

# User Rev Content
1 pjm2 1.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 pjm2 1.2
9     // ReportMaker class - used to produce each type of report for a machine.
10 pjm2 1.1 public class ReportMaker {
11 pjm2 1.2
12     // Constructor. This takes the database Statement.
13 pjm2 1.1 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 pjm2 1.2 // Produce all reports in the report list for the machine.
21     public void produce(ReportList reports, String machine) throws SQLException {
22 pjm2 1.1
23     System.out.println("Producing reports for " + machine + ".");
24    
25 pjm2 1.2 // Make a list of PlotData objects to build the charts.
26     LinkedList plots = new LinkedList();
27 pjm2 1.1 Iterator reportIt = reports.iterator();
28     while (reportIt.hasNext()) {
29 pjm2 1.2 reportIt.next();
30     plots.add(new PlotData(_startTime, _endTime));
31 pjm2 1.1 }
32    
33 pjm2 1.2
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 pjm2 1.1 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 pjm2 1.2 Iterator plotIt = plots.iterator();
59 pjm2 1.1 while (reportIt.hasNext()) {
60 pjm2 1.2 PlotData plotData = (PlotData)plotIt.next();
61 pjm2 1.1 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 pjm2 1.2 rs.close();
76 pjm2 1.1 }
77     catch (SQLException e) {
78     System.out.println("SQLException: " + e);
79     }
80    
81     System.out.println("[DEBUG]Writing graphs to disk.");
82    
83 pjm2 1.2 // Write a chart of each report to disk.
84     Iterator plotIt = plots.iterator();
85 pjm2 1.1 reportIt = reports.iterator();
86     while (reportIt.hasNext()) {
87     Report report = (Report)reportIt.next();
88     String reportField = report.getReportField();
89 pjm2 1.2 PlotData plotData = (PlotData)plotIt.next();
90 pjm2 1.1 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 pjm2 1.3 IscreamFilePlacer placer = new IscreamFilePlacer("/home/cut/pjm2/webpages/reports/");
100     File destination = placer.makeDirs(_dateDir, machine, reportField);
101     imgWriter.writeChart(img, new File(destination, "chart.gif"));
102 pjm2 1.2 System.out.println("[DEBUG]Point count: " + plotData.countPoints());
103 pjm2 1.1 }
104    
105     }
106    
107     private Statement _stmt = null;
108     private String _dateDir;
109     private long _startTime;
110     private long _endTime;
111     }