From 67f56f36f25bbb00749733e0e65b4c357e93314f Mon Sep 17 00:00:00 2001 From: "Sergey S. Betke" Date: Sun, 15 Aug 2021 02:44:12 +0300 Subject: [PATCH] feat: :sparkles: Write validator errors to System.err #120 --- .../org/odftoolkit/odfvalidator/Logger.java | 109 ++++++++++-------- .../org/odftoolkit/odfvalidator/Main.java | 18 +-- 2 files changed, 68 insertions(+), 59 deletions(-) diff --git a/validator/src/main/java/org/odftoolkit/odfvalidator/Logger.java b/validator/src/main/java/org/odftoolkit/odfvalidator/Logger.java index 190abf2727..27674d7c16 100644 --- a/validator/src/main/java/org/odftoolkit/odfvalidator/Logger.java +++ b/validator/src/main/java/org/odftoolkit/odfvalidator/Logger.java @@ -41,6 +41,8 @@ public enum LogLevel { private String m_aFileName; private String m_aEntryName; private PrintStream m_aOut; + private PrintStream m_aInfoStream; + private PrintStream m_aErrorStream; private int m_nErrors; private int m_nWarnings; private LogLevel m_nLevel; @@ -56,22 +58,22 @@ public enum LogLevel { Logger(String aFileName, String aEntryName, PrintStream aOut, LogLevel nLevel) { m_aFileName = aFileName; m_aEntryName = aEntryName; - m_aOut = aOut; m_nLevel = nLevel; m_nErrors = 0; m_nWarnings = 0; m_aParentLogger = null; + setOutputStream(aOut); } /** Creates a new instance of Logger */ Logger(String aEntryName, Logger aParentLogger) { m_aFileName = aParentLogger.m_aFileName; m_aEntryName = aEntryName; - m_aOut = aParentLogger.m_aOut; m_nLevel = aParentLogger.m_nLevel; m_nErrors = 0; m_nWarnings = 0; m_aParentLogger = aParentLogger; + setOutputStream(aParentLogger.m_aOut); } static void enableHTML(boolean isHTMLEnabled) { @@ -84,6 +86,13 @@ public PrintStream getOutputStream() { public void setOutputStream(PrintStream aOut) { m_aOut = aOut; + if (m_aOut != null) { + m_aInfoStream = m_aOut; + m_aErrorStream = m_aOut; + } else { + m_aInfoStream = System.out; + m_aErrorStream = System.err; + } } public void setInputStream(InputStream aIn) { @@ -112,27 +121,27 @@ int getWarningCount() { void logWarning(String aMsg) { if (m_nLevel.compareTo(LogLevel.WARNING) >= 0) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aInfoStream.print(""); } - logMessage(WARNING_PREFIX, aMsg); + logMessage(m_aInfoStream, WARNING_PREFIX, aMsg); } incWarnings(); } void logFatalError(String aMsg) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aErrorStream.print(""); } - logMessage(FATAL_PREFIX, aMsg); + logMessage(m_aErrorStream, FATAL_PREFIX, aMsg); incErrors(); } void logError(String aMsg) { if (m_nLevel.compareTo(LogLevel.ERROR) >= 0) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aErrorStream.print(""); } - logMessage(ERROR_PREFIX, aMsg); + logMessage(m_aErrorStream, ERROR_PREFIX, aMsg); } incErrors(); } @@ -140,36 +149,36 @@ void logError(String aMsg) { void logInfo(String aMsg, boolean bForceOutput) { if (m_nLevel.compareTo(LogLevel.INFO) >= 0 || bForceOutput) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aInfoStream.print(""); } - logMessage(INFO_PREFIX, aMsg); + logMessage(m_aInfoStream, INFO_PREFIX, aMsg); } } void logWarning(SAXParseException e) { if (m_nLevel.compareTo(LogLevel.WARNING) >= 0) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aInfoStream.print(""); } - logMessage(WARNING_PREFIX, e); + logMessage(m_aInfoStream, WARNING_PREFIX, e); } incWarnings(); } void logFatalError(SAXParseException e) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aErrorStream.print(""); } - logMessage(FATAL_PREFIX, e); + logMessage(m_aErrorStream, FATAL_PREFIX, e); incErrors(); } void logError(SAXParseException e) { if (m_isHTMLEnabled) { - m_aOut.print(""); + m_aErrorStream.print(""); } if (m_nLevel.compareTo(LogLevel.ERROR) >= 0) { - logMessage(ERROR_PREFIX, e); + logMessage(m_aErrorStream, ERROR_PREFIX, e); } incErrors(); } @@ -183,43 +192,43 @@ void logSummaryInfo() { false); } - private void printFileEntryPrefix() { - m_aOut.print(m_aFileName); + private void printFileEntryPrefix(PrintStream aOut) { + aOut.print(m_aFileName); if (m_aEntryName != null && m_aEntryName.length() > 0) { - m_aOut.print("/"); - m_aOut.print(m_aEntryName); + aOut.print("/"); + aOut.print(m_aEntryName); } } - private void logMessage(String aPrefix, SAXParseException e) { + private void logMessage(PrintStream aOut, String aPrefix, SAXParseException e) { // filepath if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - printFileEntryPrefix(); - m_aOut.print("["); - m_aOut.print(e.getLineNumber()); - m_aOut.print(","); - m_aOut.print(e.getColumnNumber()); - m_aOut.print("]: "); + printFileEntryPrefix(aOut); + aOut.print("["); + aOut.print(e.getLineNumber()); + aOut.print(","); + aOut.print(e.getColumnNumber()); + aOut.print("]: "); if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } // prefix, e.g. warning if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - m_aOut.print(aPrefix); + aOut.print(aPrefix); if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - m_aOut.print(" " + e.getMessage()); + aOut.print(" " + e.getMessage()); if (m_isHTMLEnabled) { - m_aOut.print("
"); + aOut.print("

"); } - m_aOut.println(); + aOut.println(); if (m_aEntryContent != null) { try { @@ -232,44 +241,44 @@ private void logMessage(String aPrefix, SAXParseException e) { String errorLine = reader.readLine(); int len = errorLine.length(); if (len > 80) { - m_aOut.println( + aOut.println( errorLine.substring( Math.max(0, e.getColumnNumber() - 40), Math.min(len - 1, e.getColumnNumber() + 39))); - m_aOut.println("".format("%1$38s", "----^")); + aOut.println("".format("%1$38s", "----^")); } else { - m_aOut.println(errorLine); - m_aOut.println("".format("%1$" + Math.max(0, e.getColumnNumber() - 2) + "s", "----^")); + aOut.println(errorLine); + aOut.println("".format("%1$" + Math.max(0, e.getColumnNumber() - 2) + "s", "----^")); } } catch (IOException x) { } } } - private void logMessage(String aPrefix, String aMsg) { + private void logMessage(PrintStream aOut, String aPrefix, String aMsg) { // filepath if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - printFileEntryPrefix(); - m_aOut.print(": "); + printFileEntryPrefix(aOut); + aOut.print(": "); if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } // prefix, e.g. warning if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - m_aOut.print(aPrefix); + aOut.print(aPrefix); if (m_isHTMLEnabled) { - m_aOut.print(""); + aOut.print(""); } - m_aOut.print(" " + aMsg); + aOut.print(" " + aMsg); if (m_isHTMLEnabled) { - m_aOut.print("

"); + aOut.print("

"); } - m_aOut.println(); + aOut.println(); } private void incErrors() { diff --git a/validator/src/main/java/org/odftoolkit/odfvalidator/Main.java b/validator/src/main/java/org/odftoolkit/odfvalidator/Main.java index cd23f04d52..d0ab729791 100644 --- a/validator/src/main/java/org/odftoolkit/odfvalidator/Main.java +++ b/validator/src/main/java/org/odftoolkit/odfvalidator/Main.java @@ -126,8 +126,8 @@ public static void main(String[] aArgs) { || aArg.equals("-1.3")) { aVersion = OdfVersion.valueOf(aArg.substring(1), false); } else if (aArg.startsWith("-")) { - System.out.print(aArg); - System.out.println(": unknown option, use '-h' for help"); + System.err.print(aArg); + System.err.println(": unknown option, use '-h' for help"); System.exit(1); } else if (aArg.length() > 0) { aFileNames.add(aArg); @@ -176,11 +176,11 @@ public static void main(String[] aArgs) { aConfig = new Configuration(aConfigFile); } catch (FileNotFoundException e) { if (aConfigFileName != null) { - System.out.println(aConfigFile.getAbsolutePath() + ": file not found."); + System.err.println(aConfigFile.getAbsolutePath() + ": file not found."); System.exit(1); } } catch (IOException e) { - System.out.println( + System.err.println( "error reading " + aConfigFile.getAbsolutePath() + ": " + e.getLocalizedMessage()); System.exit(1); } @@ -219,7 +219,7 @@ public static void main(String[] aArgs) { aConfig.setProperty(Configuration.MATHML3_SCHEMA, aMathMLSchemaFileName); } - PrintStream aOut = aOutputFileName != null ? new PrintStream(aOutputFileName) : System.out; + PrintStream aOut = aOutputFileName != null ? new PrintStream(aOutputFileName) : null; ODFValidator aValidator = new ODFValidator(aConfig, nLogLevel, aVersion); if (aConfigFileName != null) { @@ -228,12 +228,12 @@ public static void main(String[] aArgs) { aValidator.validate(aOut, aFileNames, aExcludeRegExp, eMode, bRecursive, aFilterFileName); } } catch (ODFValidatorException e) { - System.out.println(e.getMessage()); - System.out.println("Validation aborted."); + System.err.println(e.getMessage()); + System.err.println("Validation aborted."); System.exit(1); } catch (FileNotFoundException e) { - System.out.println(e.getMessage()); - System.out.println("Validation aborted."); + System.err.println(e.getMessage()); + System.err.println("Validation aborted."); System.exit(1); } }