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

# Content
1 //---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 * @author $Author: pjm2 $
12 * @version $Id: NodePage.java,v 1.4 2001/01/15 09:37:08 pjm2 Exp $
13 */
14 public class NodePage {
15
16 //---FINAL ATTRIBUTES---
17
18 /**
19 * The current CVS revision of this class
20 */
21 public final String REVISION = "$Revision: 1.4 $";
22
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 stringArrayFileOut(levelsDir, "level3_1", level3_1, 1, 0, 1, "The following reports are available for time period ");
69 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 private void stringArrayFileOut(String levelsDir, String filename, LinkedList reports, int indexA, int indexB, int indexC, String baseTitle) {
100 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 String title = baseTitle + extension;
110 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 }