1 package gov.nasa.pds.vtool.handler; 2 3 import gov.nasa.pds.tools.handler.ToolsFileHandler; 4 import gov.nasa.pds.tools.handler.ToolsStreamHandler; 5 import gov.nasa.pds.tools.logging.FullLogFormatter; 6 import gov.nasa.pds.tools.logging.MinimalLogFormatter; 7 import gov.nasa.pds.tools.logging.SummaryLogFormatter; 8 import gov.nasa.pds.tools.logging.ToolsLevel; 9 10 import java.io.File; 11 import java.io.IOException; 12 import java.util.logging.Formatter; 13 import java.util.logging.Handler; 14 import java.util.logging.Level; 15 16 public class HandlerFactory { 17 private static HandlerFactory factory = null; 18 19 private HandlerFactory() {} 20 21 public synchronized static HandlerFactory getInstance() { 22 if(factory == null) 23 factory = new HandlerFactory(); 24 25 return factory; 26 } 27 28 /*** 29 * Get an instance of a Handler object for the human-readable report. 30 * 31 * @param reportFile Specify a file name or set to 'null' to write to standard out. 32 * @param reportStyle Specify the report view. Must be set to 'full', 'min', or 'sum'. 33 * @param severity Specify the severity level and above for the reporting. Must be set 34 * to 'Info', 'Warning', or 'Error'. 35 * 36 * @return A proper Handler object based on the input parameters. 37 * 38 * @throws SecurityException 39 * @throws IOException 40 * @throws UnknownHandlerConfigurationException 41 */ 42 public Handler newInstance(File reportFile, String reportStyle, String severity) throws SecurityException, IOException, 43 UnknownHandlerConfigurationException { 44 Handler handler = null; 45 Formatter formatter = null; 46 Level level = null; 47 48 if("FULL".equalsIgnoreCase(reportStyle)) 49 formatter = new FullLogFormatter(); 50 else if("MIN".equalsIgnoreCase(reportStyle)) 51 formatter = new MinimalLogFormatter(); 52 else if("SUM".equalsIgnoreCase(reportStyle)) 53 formatter = new SummaryLogFormatter(); 54 else 55 throw new UnknownHandlerConfigurationException("Unknown report style: " + reportStyle); 56 57 if("INFO".equalsIgnoreCase(severity)) 58 level = ToolsLevel.INFO; 59 else if("WARNING".equalsIgnoreCase(severity)) 60 level = ToolsLevel.WARNING; 61 else if("ERROR".equalsIgnoreCase(severity)) 62 level = ToolsLevel.SEVERE; 63 else 64 throw new UnknownHandlerConfigurationException("Unknown severity level: " + severity); 65 66 if(reportFile != null) { 67 handler = new ToolsFileHandler(reportFile.toString(), level, formatter); 68 } 69 else { 70 handler = new ToolsStreamHandler(System.out, level, formatter); 71 } 72 return handler; 73 } 74 75 }