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  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 }