ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/reports/DBReporter/NodePage.java
Revision: 1.4
Committed: Mon Jan 15 09:37:08 2001 UTC (24 years, 11 months ago) by pjm2
Branch: MAIN
Changes since 1.3: +6 -6 lines
Log Message:
Fixed a bug that produced a list of the wrong reports when browsing by
time period.

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     * @version $Id: NodePage.java,v 1.3 2001/01/13 19:38:52 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.4 public final String REVISION = "$Revision: 1.3 $";
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     }