src/org/objectweb/cjdbc/controller/core/ReportManager.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.core; 00026 00027 import java.io.File; 00028 import java.io.FileInputStream; 00029 import java.io.FileOutputStream; 00030 import java.io.PrintWriter; 00031 import java.io.StringWriter; 00032 import java.util.Date; 00033 import java.util.Enumeration; 00034 import java.util.Hashtable; 00035 00036 import org.apache.log4j.FileAppender; 00037 import org.apache.log4j.Logger; 00038 import org.apache.log4j.RollingFileAppender; 00039 import org.objectweb.cjdbc.common.log.Trace; 00040 import org.objectweb.cjdbc.common.util.Constants; 00041 import org.objectweb.cjdbc.common.util.ReadWrite; 00042 import org.objectweb.cjdbc.common.xml.ControllerXmlTags; 00043 00051 public class ReportManager 00052 { 00053 00055 static Trace logger = Trace 00056 .getLogger(ReportManager.class 00057 .getName()); 00058 00060 boolean reportEnabled = false; 00061 boolean hideSensitiveData = true; 00062 boolean generateOnShutdown = true; 00063 boolean generateOnFatal = true; 00064 boolean enableFileLogging = true; 00065 boolean showLogsOnly = false; 00066 String reportLocation = ControllerConstants.REPORT_LOCATION; 00067 00068 private Controller controller; 00069 private StringBuffer buffer; 00070 private FileOutputStream fos; 00071 00077 public ReportManager(Controller controller) 00078 { 00079 this.controller = controller; 00080 buffer = new StringBuffer(); 00081 //listLoggers(); 00082 } 00083 00088 public void startReport() 00089 { 00090 writeTitle("CJDBC (version:" + Constants.VERSION + ") REPORT generated on " 00091 + new Date().toString()); 00092 writeJavaProperties(); 00093 writeControllerSettings(); 00094 writeControllerInfo(); 00095 } 00096 00103 public ReportManager(Controller controller, boolean showLogsOnly) 00104 { 00105 this(controller); 00106 this.showLogsOnly = showLogsOnly; 00107 } 00108 00115 public ReportManager(Controller controller, Exception e) 00116 { 00117 this(controller); 00118 writeException(e); 00119 } 00120 00124 public void writeControllerInfo() 00125 { 00126 try 00127 { 00128 writeHeader("CONTROLLER INFO XML"); 00129 write(controller.getXml()); 00130 writeHeader("DATABASE INFO"); 00131 write(controller.viewDatabases()); 00132 writeHeader("DATABASE INFO XML"); 00133 write(controller.viewDatabasesXml()); 00134 } 00135 catch (Exception e) 00136 { 00137 e.printStackTrace(); 00138 } 00139 } 00140 00142 public void writeControllerSettings() 00143 { 00144 writeHeader("CONTROLLER SETTINGS"); 00145 write(controller.getConfiguration()); 00146 } 00147 00149 public void writeJavaProperties() 00150 { 00151 writeHeader("JAVA SETTINGS"); 00152 write(System.getProperties()); 00153 } 00154 00156 public void writeLogs() 00157 { 00158 writeHeader("LOG CONFIGURATION"); 00159 String s = this.getClass().getResource(ControllerConstants.LOG4J_RESOURCE) 00160 .getFile(); 00161 writeFile(s); 00162 writeHeader("LOGS"); 00163 if (isEnableFileLogging()) 00164 { 00165 Logger log = Logger.getRootLogger(); 00166 FileAppender appender = (FileAppender) log 00167 .getAppender("Filetrace"); 00168 s = appender.getFile(); 00169 writeFile(s); 00170 } 00171 } 00172 00178 public void writeException(Exception e) 00179 { 00180 writeHeader("EXCEPTION DESCRIPTION"); 00181 write(e.getClass().toString()); 00182 write(e.getMessage()); 00183 write(e.toString()); 00184 StringWriter sw = new StringWriter(); 00185 PrintWriter pw = new PrintWriter(sw); 00186 e.printStackTrace(pw); 00187 write(sw.toString()); 00188 } 00189 00195 public String generate() 00196 { 00197 // Here we get all the logs before writing report 00198 writeLogs(); 00199 try 00200 { 00201 File reportFile = new File(reportLocation + File.separator 00202 + ControllerConstants.REPORT_FILE); 00203 reportFile.getParentFile().mkdirs(); 00204 fos = new FileOutputStream(reportFile); 00205 fos.write(buffer.toString().getBytes()); 00206 fos.close(); 00207 String returned = buffer.toString(); 00208 // Reset buffer 00209 buffer.delete(0,buffer.length()); 00210 return returned; 00211 } 00212 catch (Exception e) 00213 { 00214 e.printStackTrace(); 00215 return ""; 00216 } 00217 } 00218 00224 public String generateJustLogs() 00225 { 00226 String s = this.getClass().getResource(ControllerConstants.LOG4J_RESOURCE) 00227 .getFile(); 00228 Logger log = Logger.getRootLogger(); 00229 try 00230 { 00231 FileAppender appender = (FileAppender) log.getAppender("Filetrace"); 00232 s = appender.getFile(); 00233 writeFile(s); 00234 return buffer.toString(); 00235 } 00236 catch (Exception e) 00237 { 00238 logger 00239 .warn("Filetrace appender is not of type FileAppender and cannot be dumped (" 00240 + e + ")"); 00241 return ""; 00242 } 00243 } 00244 00245 /* Write Methods */ 00246 00247 private void write(String string) 00248 { 00249 try 00250 { 00251 buffer.append(string.toString()); 00252 } 00253 catch (Exception e) 00254 { 00255 e.printStackTrace(); 00256 } 00257 } 00258 00259 private void writeFile(String filename) 00260 { 00261 try 00262 { 00263 File f = new File(filename); 00264 FileInputStream fis = new FileInputStream(f); 00265 byte[] logs = new byte[(int) f.length()]; 00266 fis.read(logs); 00267 write(new String(logs)); 00268 } 00269 catch (Exception e) 00270 { 00271 e.printStackTrace(); 00272 } 00273 } 00274 00275 private void write(Hashtable table) 00276 { 00277 buffer.append(ReadWrite.write(table, true)); 00278 } 00279 00280 private void writeTitle(String title) 00281 { 00282 write("===========================================================================" 00283 + System.getProperty("line.separator")); 00284 write("===========================================================================" 00285 + System.getProperty("line.separator")); 00286 write("==== " + title + System.getProperty("line.separator")); 00287 write("===========================================================================" 00288 + System.getProperty("line.separator")); 00289 write("===========================================================================" 00290 + System.getProperty("line.separator")); 00291 } 00292 00293 private void writeHeader(String header) 00294 { 00295 write(System.getProperty("line.separator")); 00296 write("############################################################" 00297 + System.getProperty("line.separator")); 00298 write("####\t\t" + header + System.getProperty("line.separator")); 00299 write("############################################################" 00300 + System.getProperty("line.separator")); 00301 } 00302 00303 private void setLogsDeleteOnExit() 00304 { 00305 try 00306 { 00307 Logger log = Logger.getRootLogger(); 00308 RollingFileAppender appender = (RollingFileAppender) log 00309 .getAppender("Filetrace"); 00310 File logFile = new File(appender.getFile()); 00311 logFile.deleteOnExit(); 00312 } 00313 catch (Exception e) 00314 { 00315 // appender has been removed or is not defined. 00316 logger.debug("Failed to set deleteOnExit on log file", e); 00317 } 00318 } 00319 00323 public final void setSettings(Hashtable settings) 00324 { 00325 //listLoggers(); 00326 setLogsDeleteOnExit(); 00327 if (settings == null) 00328 { 00329 reportEnabled = false; 00330 } 00331 else if (settings.containsKey(ControllerXmlTags.ATT_REPORT_ENABLED)) 00332 { 00333 reportEnabled = new Boolean((String) settings 00334 .get(ControllerXmlTags.ATT_REPORT_ENABLED)).booleanValue(); 00335 } 00336 if (!reportEnabled) 00337 { 00338 hideSensitiveData = false; 00339 generateOnShutdown = false; 00340 generateOnFatal = false; 00341 enableFileLogging = false; 00342 //removeFileTraceAppender(); 00343 return; 00344 } 00345 else 00346 { 00347 if ("true".equals(settings 00348 .get(ControllerXmlTags.ATT_REPORT_DELETE_ON_SHUTDOWN))) 00349 { 00350 setLogsDeleteOnExit(); 00351 } 00352 if (settings 00353 .containsKey(ControllerXmlTags.ATT_REPORT_ENABLE_FILE_LOGGING)) 00354 { 00355 enableFileLogging = new Boolean((String) settings 00356 .get(ControllerXmlTags.ATT_REPORT_ENABLE_FILE_LOGGING)) 00357 .booleanValue(); 00358 if (!enableFileLogging) 00359 { 00360 //removeFileTraceAppender(); 00361 } 00362 } 00363 if (settings.containsKey(ControllerXmlTags.ATT_REPORT_GENERATE_ON_FATAL)) 00364 { 00365 generateOnFatal = new Boolean((String) settings 00366 .get(ControllerXmlTags.ATT_REPORT_GENERATE_ON_FATAL)) 00367 .booleanValue(); 00368 } 00369 if (settings 00370 .containsKey(ControllerXmlTags.ATT_REPORT_GENERATE_ON_SHUTDOWN)) 00371 { 00372 generateOnShutdown = new Boolean((String) settings 00373 .get(ControllerXmlTags.ATT_REPORT_GENERATE_ON_SHUTDOWN)) 00374 .booleanValue(); 00375 } 00376 if (settings 00377 .containsKey(ControllerXmlTags.ATT_REPORT_HIDE_SENSITIVE_DATA)) 00378 { 00379 hideSensitiveData = new Boolean((String) settings 00380 .get(ControllerXmlTags.ATT_REPORT_HIDE_SENSITIVE_DATA)) 00381 .booleanValue(); 00382 } 00383 if (settings.containsKey(ControllerXmlTags.ATT_REPORT_REPORT_LOCATION)) 00384 { 00385 reportLocation = (String) settings 00386 .get(ControllerXmlTags.ATT_REPORT_REPORT_LOCATION); 00387 } 00388 } 00389 } 00390 00391 void listLoggers() 00392 { 00393 Logger log = Logger.getRootLogger(); 00394 Enumeration loggers = Logger.getDefaultHierarchy().getCurrentLoggers(); 00395 while (loggers.hasMoreElements()) 00396 { 00397 Logger logger = (Logger) loggers.nextElement(); 00398 log.debug("Found logger:" + logger.getName()); 00399 } 00400 } 00401 00405 public boolean isEnableFileLogging() 00406 { 00407 return enableFileLogging; 00408 } 00409 00413 public boolean isGenerateOnFatal() 00414 { 00415 return reportEnabled && generateOnFatal; 00416 } 00417 00421 public boolean isGenerateOnShutdown() 00422 { 00423 return reportEnabled && generateOnShutdown; 00424 } 00425 00429 public boolean isHideSensitiveData() 00430 { 00431 return hideSensitiveData; 00432 } 00433 00437 public boolean isReportEnabled() 00438 { 00439 return reportEnabled; 00440 } 00441 00445 public String getReportLocation() 00446 { 00447 return reportLocation; 00448 } 00449 00455 public void setEnableFileLogging(boolean enableFileLogging) 00456 { 00457 this.enableFileLogging = enableFileLogging; 00458 } 00459 00465 public void setGenerateOnFatal(boolean generateOnFatal) 00466 { 00467 this.generateOnFatal = generateOnFatal; 00468 } 00469 00475 public void setGenerateOnShutdown(boolean generateOnShutdown) 00476 { 00477 this.generateOnShutdown = generateOnShutdown; 00478 } 00479 00485 public void setHideSensitiveData(boolean hideSensitiveData) 00486 { 00487 this.hideSensitiveData = hideSensitiveData; 00488 } 00489 00495 public void setReportEnabled(boolean reportEnabled) 00496 { 00497 this.reportEnabled = reportEnabled; 00498 } 00499 00505 public void setReportLocation(String reportLocation) 00506 { 00507 this.reportLocation = reportLocation; 00508 } 00509 }

CJDBCversion1.0.4に対してTue Oct 12 15:16:01 2004に生成されました。 doxygen 1.3.8