1
2
3
4
5
6
7
8
9
10
11
12
13
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
56
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 }