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