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  
14  package gov.nasa.pds.tools.logging;
15  
16  import gov.nasa.pds.tools.label.Label;
17  
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.Iterator;
21  import java.util.List;
22  import java.util.Map;
23  import java.util.logging.Formatter;
24  import java.util.logging.Handler;
25  import java.util.logging.LogRecord;
26  
27  
28  public class SummaryLogFormatter extends Formatter {
29  	private int numPassed;
30  	private int numFailed;
31  	private int numSkipped;
32  	private StringBuffer config;
33  	private StringBuffer parameters;
34  	private boolean headerPrinted;
35  	private Map errorMessageRecords;
36  	private Map warningMessageRecords;
37  	private Map infoMessageRecords;
38  	private static String padding = "      ";
39  	private static String lineFeed = System.getProperty("line.separator", "\n");
40  	private static String doubleLineFeed = System.getProperty("line.separator", "\n") + System.getProperty("line.separator", "\n");
41  	
42  	public SummaryLogFormatter() {
43  		numPassed = 0;
44  		numFailed = 0;
45  		numSkipped = 0;
46  		headerPrinted = false;
47  		errorMessageRecords = new HashMap();
48  		warningMessageRecords = new HashMap();
49  		infoMessageRecords = new HashMap();
50  		config = new StringBuffer();
51  		parameters = new StringBuffer("Parameter Settings:" + doubleLineFeed);
52  	}
53  
54  	/* (non-Javadoc)
55       * @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
56       */
57  	public String format(LogRecord record) {
58  		ToolsLogRecord toolsRecord = (ToolsLogRecord) record;
59  		if (toolsRecord.getLevel() == ToolsLevel.CONFIGURATION) {
60  			config.append("  " + toolsRecord.getMessage() + lineFeed);
61  		} else if (toolsRecord.getLevel() == ToolsLevel.PARAMETER) {
62  			parameters.append("  " + toolsRecord.getMessage() + lineFeed);
63  		} else if (toolsRecord.getLevel() == ToolsLevel.NOTIFICATION&& (Label.PASS.equals(toolsRecord.getMessage()) || 
64  				Label.SKIP.equals(toolsRecord.getMessage()) || Label.FAIL.equals(toolsRecord.getMessage()))) {
65  			if (record.getMessage().equals("PASS"))
66  				numPassed++;
67  			else if (record.getMessage().equals("FAIL"))
68  				numFailed++;
69  			else
70  				numSkipped++;
71  			
72  			if (!headerPrinted) {
73  				StringBuffer report = new StringBuffer();
74  				report.append("PDS Validation Tool Report" + doubleLineFeed);
75  				report.append(config);
76  				report.append(lineFeed);
77  				report.append(parameters);
78  				report.append(lineFeed);
79  				headerPrinted = true;
80  				return report.toString();
81  			}
82  		} else {
83  			processRecord(toolsRecord);
84  		}
85  		
86  		return "";
87  	}
88  	
89  	private void processRecord(ToolsLogRecord record) {
90  		Map messageRecords = null;
91  		
92  		if (record.getLevel() == ToolsLevel.SEVERE)
93  			messageRecords = errorMessageRecords;
94  		else if (record.getLevel() == ToolsLevel.WARNING)
95  			messageRecords = warningMessageRecords;
96  		else if (record.getLevel() == ToolsLevel.INFO)
97  			messageRecords = infoMessageRecords;
98  		
99  		if (messageRecords != null) {
100 			MessageRecord mr = (MessageRecord) messageRecords.get(record.getMessage());
101 			if (mr == null) {
102 				mr = new MessageRecord();
103 				messageRecords.put(record.getMessage(), mr);
104 				mr.setMessage(record.getMessage());
105 			    mr.setFile(record.getFile());
106 				mr.setLine(record.getLine());
107 			}
108 			
109 			mr.seen();
110 		}
111 	}
112 	
113 	public String getTail(Handler handler) {
114 		StringBuffer report = new StringBuffer();
115 		int totalFiles = numPassed + numFailed + numSkipped;
116 		int totalValidated = numPassed + numFailed;
117 		
118 		report.append(doubleLineFeed + "Errors Found:" + doubleLineFeed);
119 		for (Iterator i = errorMessageRecords.values().iterator(); i.hasNext();) {
120 			MessageRecord mr = (MessageRecord) i.next();
121 			report.append("  ERROR  " + mr.getMessage() + lineFeed);
122 			if (mr.hasFile()) {
123 				report.append("  Example: ");
124 				if (mr.hasLine()) {
125 					report.append("line " + mr.getLine() + " of ");
126 				}
127 				report.append(mr.getFile() + lineFeed);
128 			}
129 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
130 		}
131 		
132 		report.append(doubleLineFeed + "Warnings Found:" + doubleLineFeed);
133 		for (Iterator i = warningMessageRecords.values().iterator(); i.hasNext();) {
134 			MessageRecord mr = (MessageRecord) i.next();
135 			report.append("  WARN  " + mr.getMessage() + lineFeed);
136 			if (mr.hasFile()) {
137 				report.append("  Example: ");
138 				if (mr.hasLine()) {
139 					report.append("line " + mr.getLine() + " of ");
140 				}
141 				report.append(mr.getFile() + lineFeed);
142 			}
143 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
144 		}
145 		
146 		report.append(doubleLineFeed + "Info Found:" + doubleLineFeed);
147 		for (Iterator i = infoMessageRecords.values().iterator(); i.hasNext();) {
148 			MessageRecord mr = (MessageRecord) i.next();
149 			report.append("  INFO  " + mr.getMessage() + lineFeed);
150 			if (mr.hasFile()) {
151 				report.append("  Example: ");
152 				if (mr.hasLine()) {
153 					report.append("line " + mr.getLine() + " of ");
154 				}
155 				report.append(mr.getFile() + lineFeed);
156 			}
157 			report.append("  " + mr.getTimesSeen() + " occurence(s)" + doubleLineFeed);
158 		}
159 		
160 		report.append(doubleLineFeed + "Summary:" + doubleLineFeed);
161 		report.append("  " + totalValidated + " of " + totalFiles + " validated, " + numSkipped + " skipped" + lineFeed);
162 		report.append("  " + numPassed + " of " + totalValidated + " passed" + doubleLineFeed);
163 		report.append("End of Report" + lineFeed);
164 		return report.toString();
165 	}
166 
167 }