1
2
3
4
5
6
7
8
9
10
11
12
13 package gov.nasa.pds.ltdt.testLabel;
14
15 import gov.nasa.pds.tools.dict.Dictionary;
16 import gov.nasa.pds.tools.handler.ToolsStreamHandler;
17 import gov.nasa.pds.tools.label.Label;
18 import gov.nasa.pds.tools.label.parser.LabelParser;
19 import gov.nasa.pds.tools.label.parser.LabelParserFactory;
20 import gov.nasa.pds.tools.logging.ToolsLevel;
21 import gov.nasa.pds.tools.logging.ToolsLogRecord;
22 import gov.nasa.pds.tools.report.Report;
23 import gov.nasa.pds.tools.time.ToolsTime;
24
25 import java.io.ByteArrayInputStream;
26 import java.io.ByteArrayOutputStream;
27 import java.io.IOException;
28 import java.io.OutputStream;
29 import java.net.URL;
30 import java.text.SimpleDateFormat;
31 import java.util.logging.Handler;
32 import java.util.logging.Level;
33 import java.util.logging.Logger;
34
35 import javax.xml.transform.TransformerException;
36
37 /***
38 * Class to perform validaton
39 *
40 * @author mcayanan
41 *
42 */
43 public class Validator {
44
45 private static Logger log = Logger.getLogger(Validator.class.getName());
46 private Handler logHandler;
47 private ByteArrayOutputStream xmlLog;
48
49 /***
50 * Constructor
51 *
52 */
53 public Validator() {
54 this.xmlLog = new ByteArrayOutputStream();
55 Logger logger = Logger.getLogger("");
56 logger.setLevel(ToolsLevel.CONFIG);
57 Handler []handler = logger.getHandlers();
58 for(int i = 0; i < logger.getHandlers().length; i++)
59 logger.removeHandler(handler[i]);
60 ToolsStreamHandler sh = new ToolsStreamHandler(xmlLog);
61 logger.addHandler(sh);
62 logHandler = sh;
63 }
64
65 /***
66 * Do the validation.
67 *
68 * @param testLabel A label to validate.
69 * @param dictionary A dictionary.
70 * @param out An output stream where the validation report will be
71 * stored.
72 * @throws TransformerException
73 * @throws IOException
74 */
75 public void doValidation(URL testLabel, Dictionary dictionary, OutputStream out)
76 throws TransformerException,
77 IOException {
78 LabelParserFactory factory = LabelParserFactory.getInstance();
79 LabelParser parser = factory.newLabelParser();
80
81 SimpleDateFormat format =
82 new SimpleDateFormat("EEE, MMM dd yyyy 'at' hh:mm:ss a");
83 logMessage(ToolsLevel.CONFIG, new ToolsTime().getTime(format));
84 parser.getProperties().setProperty("parser.pointers", "false");
85 Label label = null;
86 try {
87 label = parser.parse(testLabel, dictionary);
88 logMessage(ToolsLevel.NOTIFICATION, label.getStatus(), testLabel.toString());
89 } catch (gov.nasa.pds.tools.label.parser.ParseException p) {
90 logMessage(ToolsLevel.NOTIFICATION, "SKIP", testLabel.toString());
91 } catch (IOException io) {
92 logMessage(ToolsLevel.NOTIFICATION, "SKIP", testLabel.toString());
93 logMessage(ToolsLevel.WARNING, io.getMessage(), testLabel.toString());
94 } finally {
95 logHandler.close();
96 }
97 doReporting(out);
98 }
99
100 /***
101 * Generates a report of the validation.
102 *
103 * @param output An output stream where the report will be stored.
104 *
105 * @throws TransformerException
106 * @throws IOException
107 */
108 private void doReporting(OutputStream output)
109 throws TransformerException,
110 IOException {
111 try {
112 ByteArrayInputStream input = new ByteArrayInputStream(xmlLog.toByteArray());
113 Report humanReport = new Report(input, "report-ltdtool.xsl");
114 humanReport.generateReport(output, "WARNING");
115 } finally {
116 output.close();
117 }
118 }
119
120 /***
121 * Routine to store a message into the logger.
122 * @param level The severity level of the message.
123 * @param msg The message to log.
124 */
125 public void logMessage(Level level, String msg) {
126 logMessage(level, msg, null);
127 }
128
129 /***
130 * Routine to store a message into the logger.
131 * @param level The severity level of the message.
132 * @param msg The message to log.
133 * @param file The file name associated with the message being logged.
134 */
135 public void logMessage(Level level, String msg, String file) {
136 log.log(new ToolsLogRecord(level, msg, file));
137 }
138 }