ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/reports/DBReporter/NodePage.java
Revision: 1.5
Committed: Fri Feb 16 09:13:12 2001 UTC (24 years, 10 months ago) by pjm2
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +2 -2 lines
State: FILE REMOVED
Log Message:
After the radical changes in the i-scream database design, some of these
classes had to be rewritten.  The new design also meant that it was
possible to generate multiple reports per machine per SQL select, so other
parts of the DBReporter were rewritten to take advantage of this
performance gain.

File Contents

# User Rev Content
1 pjm2 1.3 //---PACKAGE DECLARATION---
2    
3     //---IMPORTS---
4    
5     import java.io.*;
6     import java.util.*;
7    
8     /**
9     * Produces 2nd-, 3rd- and 4th-level index pages for reports.
10     *
11 pjm2 1.4 * @author $Author: pjm2 $
12 pjm2 1.5 * @version $Id: NodePage.java,v 1.4 2001/01/15 09:37:08 pjm2 Exp $
13 pjm2 1.3 */
14     public class NodePage {
15    
16     //---FINAL ATTRIBUTES---
17    
18     /**
19     * The current CVS revision of this class
20     */
21 pjm2 1.5 public final String REVISION = "$Revision: 1.4 $";
22 pjm2 1.3
23     private final String[] FIELDS = {"machine name", "time period", "report type"};
24    
25     //---STATIC METHODS---
26    
27     //---CONSTRUCTORS---
28    
29     public NodePage(String reportDirectory, LinkedList pages){
30     _reportDirectory = reportDirectory;
31     _pages = pages;
32     }
33    
34     //---PUBLIC METHODS---
35    
36    
37     public void generateAllLevels(String levelsDir) {
38    
39     // Create the directory to dump the levels into.
40     try {
41     File newSubDir = new File(_reportDirectory + levelsDir);
42     if (!newSubDir.isDirectory()){
43     newSubDir.mkdir();
44     }
45     }
46     catch (Exception e){
47     System.out.println("Could not create a subdirectory in the reports directory: "+e);
48     return;
49     }
50    
51     LinkedList level4_0_1 = this.generateLevel(0, 1, 2);
52     LinkedList level4_0_2 = this.generateLevel(0, 2, 1);
53     LinkedList level4_1_2 = this.generateLevel(1, 2, 0);
54    
55     LinkedList level3_0 = this.generateLevel(0);
56     LinkedList level3_1 = this.generateLevel(1);
57     LinkedList level3_2 = this.generateLevel(2);
58    
59     LinkedList level2_0 = this.generateBasicLevel(0);
60     LinkedList level2_1 = this.generateBasicLevel(1);
61     LinkedList level2_2 = this.generateBasicLevel(2);
62    
63     stringArrayBottomFileOut(levelsDir, "level4_0_1", level4_0_1, 0, 1, "The following types of report are available. ");
64     stringArrayBottomFileOut(levelsDir, "level4_0_2", level4_0_2, 0, 2, "Reports are available for following time periods. ");
65     stringArrayBottomFileOut(levelsDir, "level4_1_2", level4_1_2, 1, 2, "Reports are available for the following machines. ");
66    
67     stringArrayFileOut(levelsDir, "level3_0", level3_0, 0, 0, 1, "The following reports are available for machine ");
68 pjm2 1.4 stringArrayFileOut(levelsDir, "level3_1", level3_1, 1, 0, 1, "The following reports are available for time period ");
69 pjm2 1.3 stringArrayFileOut(levelsDir, "level3_2", level3_2, 2, 1, 2, "The following reports are available for report type ");
70    
71     stringFileOut(levelsDir, "level2_0", level2_0, 0, "Reports are available for the following machines");
72     stringFileOut(levelsDir, "level2_1", level2_1, 1, "Reports are available for the following time periods");
73     stringFileOut(levelsDir, "level2_2", level2_2, 2, "The following types of report are available");
74    
75     }
76    
77    
78     private void stringFileOut(String levelsDir, String filename, LinkedList reports, int indexA, String title) {
79     try {
80     FileWriter writer = new FileWriter(_reportDirectory+levelsDir+filename+".shtml");
81     BufferedWriter bw = new BufferedWriter(writer);
82     Iterator it = reports.iterator();
83     bw.write("<html><body><p><b>"+title+"</b></p>");
84     bw.newLine();
85     while (it.hasNext()) {
86     String str = (String)it.next();
87     bw.write("<a href=\"../"+levelsDir+"level3_"+indexA+"."+str.replace('/', '_')+".shtml"+"\">"+str+"</a><br>");
88     bw.newLine();
89     }
90     bw.write("</body></html>");
91     bw.flush();
92     bw.close();
93     }
94     catch (IOException e) {
95     System.out.println("Failed to output "+filename);
96     }
97     }
98    
99 pjm2 1.4 private void stringArrayFileOut(String levelsDir, String filename, LinkedList reports, int indexA, int indexB, int indexC, String baseTitle) {
100 pjm2 1.3 Iterator it = reports.iterator();
101     HashSet set = new HashSet();
102     while (it.hasNext()){
103     String item = ((String[])it.next())[indexA];
104     set.add(item);
105     }
106     Iterator setit = set.iterator();
107     while (setit.hasNext()) {
108     String extension = (String)setit.next();
109 pjm2 1.4 String title = baseTitle + extension;
110 pjm2 1.3 try {
111     FileWriter writer = new FileWriter(_reportDirectory+levelsDir+filename+"."+extension.replace('/', '_')+".shtml");
112     BufferedWriter bw = new BufferedWriter(writer);
113     bw.write("<html><body><p><b>"+title+"</b></p>");
114     bw.newLine();
115     it = reports.iterator();
116     while (it.hasNext()) {
117     String[] stra = (String[])it.next();
118     if (extension.equals(stra[indexA])) {
119     bw.write("<a href=\"../"+levelsDir+"level4_"+indexB+"_"+indexC+"."+stra[indexB].replace('/', '_')+"."+stra[indexC].replace('/', '_')+".shtml\">");
120     for (int i = 0; i < stra.length; i++) {
121     bw.write(stra[i]+" ");
122     }
123     bw.write("</a><br>");
124     bw.newLine();
125     }
126     }
127     bw.write("</body></html>");
128     bw.flush();
129     bw.close();
130     }
131     catch (IOException e) {
132     System.out.println("Failed to output "+filename+"."+extension);
133     }
134     }
135     }
136    
137     private void stringArrayBottomFileOut(String levelsDir, String filename, LinkedList reports, int indexA, int indexB, String baseTitle) {
138     Iterator it = reports.iterator();
139     HashSet set = new HashSet();
140     while (it.hasNext()){
141     String[] entry = (String[])it.next();
142     set.add(entry);
143     }
144     Iterator setit = set.iterator();
145     while (setit.hasNext()) {
146     String[] entry = (String[])setit.next();
147     String title = baseTitle + "Your choice has been limited to the "+FIELDS[indexA]+" "+entry[indexA]+" and the "+FIELDS[indexB]+" "+entry[indexB];
148     HashSet links = new HashSet();
149     try {
150     String extension = ("."+entry[indexA]+"."+entry[indexB]).replace('/', '_');
151     FileWriter writer = new FileWriter(_reportDirectory+levelsDir+filename+extension+".shtml");
152     BufferedWriter bw = new BufferedWriter(writer);
153     it = reports.iterator();
154     bw.write("<html><body><p><b>"+title+"</b></p>");
155     bw.newLine();
156     while (it.hasNext()) {
157     String[] stra = (String[])it.next();
158     if (entry[indexA].equals(stra[indexA]) && entry[indexB].equals(stra[indexB])) {
159     String link = "<a href=\"../"+stra[1]+stra[0]+"."+stra[2]+".shtml\">";
160     for (int i = 0; i < stra.length; i++) {
161     link += (stra[i]+" ");
162     }
163     link += "</a><br>";
164     links.add(link);
165     }
166     }
167     // Write the unique links we found.
168     Iterator linkit = links.iterator();
169     while (linkit.hasNext()) {
170     bw.write((String)linkit.next());
171     bw.newLine();
172     }
173     bw.write("</body></html>");
174     bw.flush();
175     bw.close();
176     }
177     catch (IOException e) {
178     System.out.println("Failed to output "+filename+"."+entry[indexA]+"."+entry[indexB]+": "+e);
179     }
180     }
181     }
182    
183    
184     private LinkedList generateBasicLevel(int indexA) {
185     LinkedList pagesMade = new LinkedList();
186     HashSet set = new HashSet();
187     Iterator it = _pages.iterator();
188     while (it.hasNext()) {
189     String item = ((String[])it.next())[indexA];
190     set.add(item);
191     }
192    
193     Iterator setit = set.iterator();
194     while (setit.hasNext()){
195     String setitem = (String)setit.next();
196     // Make the page.
197     pagesMade.add(setitem);
198     }
199    
200     return pagesMade;
201     }
202    
203    
204     private LinkedList generateLevel(int indexA) {
205     LinkedList pagesMade = new LinkedList();
206     //Populate the HashSet.
207     HashSet set = new HashSet();
208     Iterator it = _pages.iterator();
209     while (it.hasNext()) {
210     String item = ((String[])it.next())[indexA];
211     set.add(item);
212     }
213    
214     Iterator setit = set.iterator();
215     while (setit.hasNext()){
216     String setitem = (String)setit.next();
217     it = _pages.iterator();
218     while (it.hasNext()){
219     String[] entry = (String[])it.next();
220     if (setitem.equals(entry[indexA])) {
221     // Make this page.
222     pagesMade.add(entry);
223     }
224     }
225     }
226    
227     return pagesMade;
228     }
229    
230     private LinkedList generateLevel(int indexA, int indexB, int indexC) {
231     LinkedList pagesMade = new LinkedList();
232     // Select unique pairs of elements
233     HashSet set = new HashSet();
234    
235     // Populate the HashSet.
236     Iterator it = _pages.iterator();
237     while (it.hasNext()) {
238     String[] pair = new String[2];
239     String[] entry = (String[])it.next();
240     pair[0] = entry[indexA];
241     pair[1] = entry[indexB];
242     set.add(pair);
243     }
244    
245     Iterator setit = set.iterator();
246     while (setit.hasNext()){
247     String[] pair = (String[])setit.next();
248     it = _pages.iterator();
249     while (it.hasNext()){
250     String[] entry = (String[])it.next();
251     if (pair[0].equals(entry[indexA]) && pair[1].equals(entry[indexB])) {
252     // Make this page.
253     pagesMade.add(entry);
254     }
255     }
256     }
257    
258     return pagesMade;
259     }
260    
261     /**
262     * Overrides the {@link java.lang.Object#toString() Object.toString()}
263     * method to provide clean logging (every class should have this).
264     *
265     * @return the name of this class and its CVS revision
266     */
267     public String toString() {
268     return this.getClass().getName() + "(" + REVISION.substring(11, REVISION.length() - 2) + ")";
269     }
270    
271     //---PRIVATE METHODS---
272    
273     //---ACCESSOR/MUTATOR METHODS---
274    
275     //---ATTRIBUTES---
276    
277     String _reportDirectory;
278     LinkedList _pages;
279    
280     //---STATIC ATTRIBUTES---
281    
282     }