View Javadoc

1   // Copyright 2006-2007, by the California Institute of Technology.
2   // ALL RIGHTS RESERVED. United States Government Sponsorship acknowledged.
3   // Any commercial use must be negotiated with the Office of Technology Transfer
4   // at the California Institute of Technology.
5   //
6   // This software is subject to U. S. export control laws and regulations
7   // (22 C.F.R. 120-130 and 15 C.F.R. 730-774). To the extent that the software
8   // is subject to U.S. export control laws and regulations, the recipient has
9   // the responsibility to obtain export licenses or other export authority as
10  // may be required before exporting such information to foreign countries or
11  // providing access to foreign nationals.
12  //
13  // $Id: SummaryLogFormatter.java 3461 2008-08-07 17:43:26Z pramirez $
14  
15  package gov.nasa.pds.tools.logging;
16  
17  import gov.nasa.pds.tools.label.Label;
18  
19  import java.util.ArrayList;
20  import java.util.HashMap;
21  import java.util.Iterator;
22  import java.util.List;
23  import java.util.Map;
24  import java.util.logging.Formatter;
25  import java.util.logging.Handler;
26  import java.util.logging.LogRecord;
27  
28  
29  public class SummaryLogFormatter extends Formatter {
30  	private int numPassed;
31  	private int numFailed;
32  	private int numSkipped;
33  	private StringBuffer config;
34  	private StringBuffer parameters;
35  	private boolean headerPrinted;
36  	private Map errorMessageRecords;
37  	private Map warningMessageRecords;
38  	private Map infoMessageRecords;
39  	private static String padding = "      ";
40  	private static String lineFeed = System.getProperty("line.separator", "\n");
41  	private static String doubleLineFeed = System.getProperty("line.separator", "\n") + System.getProperty("line.separator", "\n");
42  	
43  	public SummaryLogFormatter() {
44  		numPassed = 0;
45  		numFailed = 0;
46  		numSkipped = 0;
47  		headerPrinted = false;
48  		errorMessageRecords = new HashMap();
49  		warningMessageRecords = new HashMap();
50  		infoMessageRecords = new HashMap();
51  		config = new StringBuffer();
52  		parameters = new StringBuffer("Parameter Settings:" + doubleLineFeed);
53  	}
54  
55  	/* (non-Javadoc)
56       * @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
57       */
58  	public String format(LogRecord record) {
59  		ToolsLogRecord toolsRecord = (ToolsLogRecord) record;
60  		if (toolsRecord.getLevel() == ToolsLevel.CONFIGURATION) {
61  			config.append("  " + toolsRecord.getMessage() + lineFeed);
62  		} else if (toolsRecord.getLevel() == ToolsLevel.PARAMETER) {
63  			parameters.append("  " + toolsRecord.getMessage() + lineFeed);
64  		} else if (toolsRecord.getLevel() == ToolsLevel.NOTIFICATION&& (Label.PASS.equals(toolsRecord.getMessage()) || 
65  				Label.SKIP.equals(toolsRecord.getMessage()) || Label.FAIL.equals(toolsRecord.getMessage()))) {
66  			if (record.getMessage().equals("PASS"))
67  				numPassed++;
68  			else if (record.getMessage().equals("FAIL"))
69  				numFailed++;
70  			else
71  				numSkipped++;
72  			
73  			if (!headerPrinted) {
74  				StringBuffer report = new StringBuffer();
75  				report.append("PDS Validation Tool Report" + doubleLineFeed);
76  				report.append(config);
77  				report.append(lineFeed);
78  				report.append(parameters);
79  				report.append(lineFeed);
80  				headerPrinted = true;
81  				return report.toString();
82  			}
83  		} else {
84  			processRecord(toolsRecord);
85  		}
86  		
87  		return "";
88  	}
89  	
90  	private void processRecord(ToolsLogRecord record) {
91  		Map messageRecords = null;
92  		
93  		if (record.getLevel() == ToolsLevel.SEVERE)
94  			messageRecords = errorMessageRecords;
95  		else if (record.getLevel() == ToolsLevel.WARNING)
96  			messageRecords = warningMessageRecords;
97  		else if (record.getLevel() == ToolsLevel.INFO)
98  			messageRecords = infoMessageRecords;
99  		
100 		if (messageRecords != null) {
101 			MessageRecord mr = (MessageRecord) messageRecords.get(record.getMessage());
102 			if (mr == null) {
103 				mr = new MessageRecord();
104 				messageRecords.put(record.getMessage(), mr);
105 				mr.setMessage(record.getMessage());
106 			    mr.setFile(record.getFile());
107 				mr.setLine(record.getLine());
108 			}
109 			
110 			mr.seen();
111 		}
112 	}
113 	
114 	public String getTail(Handler handler) {
115 		StringBuffer report = new StringBuffer();
116 		int totalFiles = numPassed + numFailed + numSkipped;
117 		int totalValidated = numPassed + numFailed;
118 		
119 		report.append(doubleLineFeed + "Errors Found:" + doubleLineFeed);
120 		for (Iterator i = errorMessageRecords.values().iterator(); i.hasNext();) {
121 			MessageRecord mr = (MessageRecord) i.next();
122 			report.append("  ERROR  " + mr.getMessage() + lineFeed);
123 			if (mr.hasFile()) {
124 				report.append("  Example: ");
125 				if (mr.hasLine()) {
126 					report.append("line " + mr.getLine() + " of ");
127 				}
128 				report.append(mr.getFile() + lineFeed);
129 			}
130 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
131 		}
132 		
133 		report.append(doubleLineFeed + "Warnings Found:" + doubleLineFeed);
134 		for (Iterator i = warningMessageRecords.values().iterator(); i.hasNext();) {
135 			MessageRecord mr = (MessageRecord) i.next();
136 			report.append("  WARN  " + mr.getMessage() + lineFeed);
137 			if (mr.hasFile()) {
138 				report.append("  Example: ");
139 				if (mr.hasLine()) {
140 					report.append("line " + mr.getLine() + " of ");
141 				}
142 				report.append(mr.getFile() + lineFeed);
143 			}
144 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
145 		}
146 		
147 		report.append(doubleLineFeed + "Info Found:" + doubleLineFeed);
148 		for (Iterator i = infoMessageRecords.values().iterator(); i.hasNext();) {
149 			MessageRecord mr = (MessageRecord) i.next();
150 			report.append("  INFO  " + mr.getMessage() + lineFeed);
151 			if (mr.hasFile()) {
152 				report.append("  Example: ");
153 				if (mr.hasLine()) {
154 					report.append("line " + mr.getLine() + " of ");
155 				}
156 				report.append(mr.getFile() + lineFeed);
157 			}
158 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
159 		}
160 		
161 		report.append(doubleLineFeed + "Summary:" + doubleLineFeed);
162 		report.append("  " + totalValidated + " of " + totalFiles + " validated, " + numSkipped + " skipped" + lineFeed);
163 		report.append("  " + numPassed + " of " + totalValidated + " passed" + doubleLineFeed);
164 		report.append("End of Report" + lineFeed);
165 		return report.toString();
166 	}
167 
168 }