Author: kiwiwings
Date: Mon Dec 31 12:07:37 2018
New Revision: 1850040
URL: http://svn.apache.org/viewvc?rev=1850040&view=rev
Log:
#63047 - Make POILogger subclassable
Modified:
poi/site/src/documentation/content/xdocs/changes.xml
poi/trunk/src/java/org/apache/poi/util/CommonsLogger.java
poi/trunk/src/java/org/apache/poi/util/NullLogger.java
poi/trunk/src/java/org/apache/poi/util/POILogger.java
poi/trunk/src/java/org/apache/poi/util/SystemOutLogger.java
poi/trunk/src/testcases/org/apache/poi/util/DummyPOILogger.java
poi/trunk/src/testcases/org/apache/poi/util/TestPOILogger.java
Modified: poi/site/src/documentation/content/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/changes.xml?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/changes.xml (original)
+++ poi/site/src/documentation/content/xdocs/changes.xml Mon Dec 31 12:07:37
2018
@@ -87,6 +87,7 @@
<release version="4.1.0" date="2019-02-??">
<actions>
+ <action dev="PD" type="fix" fixes-bug="63047"
context="POI_Overall">Make POILogger subclassable</action>
<action dev="PD" type="add" fixes-bug="63028" context="SL_Common XSLF
HSLF">Provide font embedding for slideshows</action>
<action dev="PD" type="fix" fixes-bug="61532" context="SXSSF">Fix
setting values/types during formula evaluation for SXSSF</action>
<action dev="PD" type="fix" fixes-bug="62629" context="OPC">Allow to
handle files with invalid content types for pictures</action>
Modified: poi/trunk/src/java/org/apache/poi/util/CommonsLogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/CommonsLogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/CommonsLogger.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/CommonsLogger.java Mon Dec 31
12:07:37 2018
@@ -28,14 +28,13 @@ import org.apache.commons.logging.LogFac
* calls as cheap as possible by performing lazy evaluation of the log
* message.<p>
*/
-public class CommonsLogger extends POILogger
+public class CommonsLogger implements POILogger
{
private static final LogFactory _creator = LogFactory.getFactory();
- private Log log;
+ private Log log;
@Override
- public void initialize(final String cat)
- {
+ public void initialize(final String cat) {
this.log = _creator.getInstance(cat);
}
@@ -46,51 +45,40 @@ public class CommonsLogger extends POILo
* @param obj1 The object to log.
*/
@Override
- protected void _log(final int level, final Object obj1)
- {
+ public void _log(final int level, final Object obj1) {
// FIXME: What happens if level is in between two levels (an even
number)?
// Should this be `if (level >= FATAL) ...`?
- if(level==FATAL)
- {
- if(log.isFatalEnabled())
- {
- log.fatal(obj1);
- }
- }
- else if(level==ERROR)
- {
- if(log.isErrorEnabled())
- {
- log.error(obj1);
- }
- }
- else if(level==WARN)
- {
- if(log.isWarnEnabled())
- {
- log.warn(obj1);
- }
- }
- else if(level==INFO)
- {
- if(log.isInfoEnabled())
- {
- log.info(obj1);
- }
- }
- else if(level==DEBUG)
- {
- if(log.isDebugEnabled())
- {
- log.debug(obj1);
- }
- }
- else
- {
- if(log.isTraceEnabled())
- {
- log.trace(obj1);
- }
+ switch (level) {
+ case FATAL:
+ if (log.isFatalEnabled()) {
+ log.fatal(obj1);
+ }
+ break;
+ case ERROR:
+ if (log.isErrorEnabled()) {
+ log.error(obj1);
+ }
+ break;
+ case WARN:
+ if (log.isWarnEnabled()) {
+ log.warn(obj1);
+ }
+ break;
+ case INFO:
+ if (log.isInfoEnabled()) {
+ log.info(obj1);
+ }
+ break;
+ case DEBUG:
+ if (log.isDebugEnabled()) {
+ log.debug(obj1);
+ }
+ break;
+ default:
+ if (log.isTraceEnabled()) {
+ log.trace(obj1);
+ }
+ break;
}
}
@@ -102,72 +90,65 @@ public class CommonsLogger extends POILo
* @param exception An exception to be logged
*/
@Override
- protected void _log(final int level, final Object obj1,
- final Throwable exception)
- {
+ public void _log(final int level, final Object obj1, final Throwable
exception) {
// FIXME: What happens if level is in between two levels (an even
number)?
// Should this be `if (level >= FATAL) ...`?
- if(level==FATAL)
- {
- if(log.isFatalEnabled())
- {
- if(obj1 != null)
- log.fatal(obj1, exception);
- else
- log.fatal(exception);
- }
- }
- else if(level==ERROR)
- {
- if(log.isErrorEnabled())
- {
- if(obj1 != null)
- log.error(obj1, exception);
- else
- log.error(exception);
- }
- }
- else if(level==WARN)
- {
- if(log.isWarnEnabled())
- {
- if(obj1 != null)
- log.warn(obj1, exception);
- else
- log.warn(exception);
- }
- }
- else if(level==INFO)
- {
- if(log.isInfoEnabled())
- {
- if(obj1 != null)
- log.info(obj1, exception);
- else
- log.info(exception);
- }
+ switch (level) {
+ case FATAL:
+ if (log.isFatalEnabled()) {
+ if (obj1 != null) {
+ log.fatal(obj1, exception);
+ } else {
+ log.fatal(exception);
+ }
+ }
+ break;
+ case ERROR:
+ if (log.isErrorEnabled()) {
+ if (obj1 != null) {
+ log.error(obj1, exception);
+ } else {
+ log.error(exception);
+ }
+ }
+ break;
+ case WARN:
+ if (log.isWarnEnabled()) {
+ if (obj1 != null) {
+ log.warn(obj1, exception);
+ } else {
+ log.warn(exception);
+ }
+ }
+ break;
+ case INFO:
+ if (log.isInfoEnabled()) {
+ if (obj1 != null) {
+ log.info(obj1, exception);
+ } else {
+ log.info(exception);
+ }
+ }
+ break;
+ case DEBUG:
+ if (log.isDebugEnabled()) {
+ if (obj1 != null) {
+ log.debug(obj1, exception);
+ } else {
+ log.debug(exception);
+ }
+ }
+ break;
+ default:
+ if (log.isTraceEnabled()) {
+ if (obj1 != null) {
+ log.trace(obj1, exception);
+ } else {
+ log.trace(exception);
+ }
+ }
+ break;
}
- else if(level==DEBUG)
- {
- if(log.isDebugEnabled())
- {
- if(obj1 != null)
- log.debug(obj1, exception);
- else
- log.debug(exception);
- }
- }
- else
- {
- if(log.isTraceEnabled())
- {
- if(obj1 != null)
- log.trace(obj1, exception);
- else
- log.trace(exception);
- }
- }
-
}
/**
@@ -180,46 +161,20 @@ public class CommonsLogger extends POILo
{
// FIXME: What happens if level is in between two levels (an even
number)?
// Should this be `if (level >= FATAL) ...`?
- if(level==FATAL)
- {
- if(log.isFatalEnabled())
- {
- return true;
- }
- }
- else if(level==ERROR)
- {
- if(log.isErrorEnabled())
- {
- return true;
- }
- }
- else if(level==WARN)
- {
- if(log.isWarnEnabled())
- {
- return true;
- }
+ switch (level) {
+ case FATAL:
+ return log.isFatalEnabled();
+ case ERROR:
+ return log.isErrorEnabled();
+ case WARN:
+ return log.isWarnEnabled();
+ case INFO:
+ return log.isInfoEnabled();
+ case DEBUG:
+ return log.isDebugEnabled();
+ default:
+ return false;
}
- else if(level==INFO)
- {
- if(log.isInfoEnabled())
- {
- return true;
- }
- }
- else if(level==DEBUG)
- {
- if(log.isDebugEnabled())
- {
- return true;
- }
- }
-
- return false;
-
}
-
-
-} // end package scope class POILogger
+}
Modified: poi/trunk/src/java/org/apache/poi/util/NullLogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/NullLogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/NullLogger.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/NullLogger.java Mon Dec 31 12:07:37
2018
@@ -24,7 +24,7 @@ package org.apache.poi.util;
* message.<p>
*/
@Internal
-public class NullLogger extends POILogger {
+public class NullLogger implements POILogger {
@Override
public void initialize(final String cat) {
// do nothing
@@ -38,7 +38,7 @@ public class NullLogger extends POILogge
*/
@Override
- protected void _log(final int level, final Object obj1) {
+ public void _log(final int level, final Object obj1) {
// do nothing
}
@@ -50,7 +50,7 @@ public class NullLogger extends POILogge
* @param exception An exception to be logged
*/
@Override
- protected void _log(int level, Object obj1, final Throwable exception) {
+ public void _log(int level, Object obj1, final Throwable exception) {
// do nothing
}
Modified: poi/trunk/src/java/org/apache/poi/util/POILogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/POILogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/POILogger.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/POILogger.java Mon Dec 31 12:07:37
2018
@@ -21,53 +21,41 @@ package org.apache.poi.util;
* A logger interface that strives to make it as easy as possible for
* developers to write log calls, while simultaneously making those
* calls as cheap as possible by performing lazy evaluation of the log
- * message.<p>
+ * message.
*/
@Internal
-public abstract class POILogger {
+public interface POILogger {
- public static final int DEBUG = 1;
- public static final int INFO = 3;
- public static final int WARN = 5;
- public static final int ERROR = 7;
- public static final int FATAL = 9;
+ int DEBUG = 1;
+ int INFO = 3;
+ int WARN = 5;
+ int ERROR = 7;
+ int FATAL = 9;
/**
- * Short strings for numeric log level. Use level as array index.
+ * Initialize the Logger - belongs to the SPI, called from the
POILogFactory
+ * @param cat the String that defines the log
*/
- protected static final String[] LEVEL_STRINGS_SHORT = {"?", "D", "?", "I",
"?", "W", "?", "E", "?", "F", "?"};
- /**
- * Long strings for numeric log level. Use level as array index.
- */
- protected static final String[] LEVEL_STRINGS = {"?0?", "DEBUG", "?2?",
"INFO", "?4?", "WARN", "?6?", "ERROR", "?8?", "FATAL", "?10+?"};
-
-
- /**
- * package scope so it cannot be instantiated outside of the util
- * package. You need a POILogger? Go to the POILogFactory for one
- */
- POILogger() {
- // no fields to initialize
- }
-
- abstract public void initialize(String cat);
+ void initialize(String cat);
/**
- * Log a message
+ * Log a message - belongs to the SPI, usually not called from user code
*
* @param level One of DEBUG, INFO, WARN, ERROR, FATAL
* @param obj1 The object to log. This is converted to a string.
*/
- abstract protected void _log(int level, Object obj1);
+ @Internal
+ void _log(int level, Object obj1);
/**
- * Log a message
+ * Log a message - belongs to the SPI, usually not called from user code
*
* @param level One of DEBUG, INFO, WARN, ERROR, FATAL
* @param obj1 The object to log. This is converted to a string.
* @param exception An exception to be logged
*/
- abstract protected void _log(int level, Object obj1, final Throwable
exception);
+ @Internal
+ void _log(int level, Object obj1, final Throwable exception);
/**
@@ -84,7 +72,7 @@ public abstract class POILogger {
*
* @param level One of DEBUG, INFO, WARN, ERROR, FATAL
*/
- abstract public boolean check(int level);
+ boolean check(int level);
/**
* Log a message. Lazily appends Object parameters together.
@@ -93,7 +81,7 @@ public abstract class POILogger {
* @param level One of DEBUG, INFO, WARN, ERROR, FATAL
* @param objs the objects to place in the message
*/
- public void log(int level, Object... objs) {
+ default void log(int level, Object... objs) {
if (!check(level)) return;
StringBuilder sb = new StringBuilder(32);
Throwable lastEx = null;
@@ -106,10 +94,9 @@ public abstract class POILogger {
}
String msg = sb.toString();
- msg = msg.replaceAll("[\r\n]+", " "); // log forging escape
+ // log forging escape
+ msg = msg.replaceAll("[\r\n]+", " ");
- // somehow this ambiguity works and doesn't lead to a loop,
- // but it's confusing ...
if (lastEx == null) {
_log(level, msg);
} else {
Modified: poi/trunk/src/java/org/apache/poi/util/SystemOutLogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/SystemOutLogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/SystemOutLogger.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/SystemOutLogger.java Mon Dec 31
12:07:37 2018
@@ -25,13 +25,16 @@ package org.apache.poi.util;
* calls as cheap as possible by performing lazy evaluation of the log
* message.
*/
-public class SystemOutLogger extends POILogger
-{
+public class SystemOutLogger implements POILogger {
+ /**
+ * Short strings for numeric log level. Use level as array index.
+ */
+ private static final String LEVEL_STRINGS_SHORT = "?D?I?W?E?F?";
+
private String _cat;
@Override
- public void initialize(final String cat)
- {
+ public void initialize(final String cat) {
this._cat=cat;
}
@@ -42,8 +45,7 @@ public class SystemOutLogger extends POI
* @param obj1 The object to log.
*/
@Override
- protected void _log(final int level, final Object obj1)
- {
+ public void _log(final int level, final Object obj1) {
_log(level, obj1, null);
}
@@ -56,13 +58,13 @@ public class SystemOutLogger extends POI
*/
@Override
@SuppressForbidden("uses printStackTrace")
- protected void _log(final int level, final Object obj1,
- final Throwable exception) {
- if (check(level)) {
- System.out.println("[" + _cat + "]" +
LEVEL_STRINGS_SHORT[Math.min(LEVEL_STRINGS_SHORT.length-1, level)] + " " +
obj1);
- if (exception != null) {
- exception.printStackTrace(System.out);
- }
+ public void _log(final int level, final Object obj1, final Throwable
exception) {
+ if (!check(level)) {
+ return;
+ }
+ System.out.println("[" + _cat + "]" +
LEVEL_STRINGS_SHORT.charAt(Math.min(LEVEL_STRINGS_SHORT.length()-1, level)) + "
" + obj1);
+ if (exception != null) {
+ exception.printStackTrace(System.out);
}
}
@@ -77,8 +79,7 @@ public class SystemOutLogger extends POI
* @see #FATAL
*/
@Override
- public boolean check(final int level)
- {
+ public boolean check(final int level) {
int currentLevel;
try {
currentLevel =
Integer.parseInt(System.getProperty("poi.log.level", WARN + ""));
@@ -88,7 +89,5 @@ public class SystemOutLogger extends POI
return level >= currentLevel;
}
-
-
-} // end package scope class POILogger
+}
Modified: poi/trunk/src/testcases/org/apache/poi/util/DummyPOILogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/util/DummyPOILogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/util/DummyPOILogger.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/util/DummyPOILogger.java Mon Dec 31
12:07:37 2018
@@ -24,7 +24,7 @@ import java.util.List;
* tests can see what got logged
*/
@Internal
-public class DummyPOILogger extends POILogger {
+public class DummyPOILogger implements POILogger {
public List<String>logged = new ArrayList<>();
public void reset() {
@@ -40,12 +40,12 @@ public class DummyPOILogger extends POIL
public void initialize(String cat) {}
@Override
- protected void _log(int level, Object obj1) {
+ public void _log(int level, Object obj1) {
logged.add(level + " - " + obj1);
}
@Override
- protected void _log(int level, Object obj1, Throwable exception) {
+ public void _log(int level, Object obj1, Throwable exception) {
logged.add(level + " - " + obj1 + " - " + exception);
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/util/TestPOILogger.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/util/TestPOILogger.java?rev=1850040&r1=1850039&r2=1850040&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/util/TestPOILogger.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/util/TestPOILogger.java Mon Dec 31
12:07:37 2018
@@ -27,7 +27,7 @@ import org.junit.Test;
/**
* Tests the log class.
*/
-public final class TestPOILogger extends POILogger {
+public final class TestPOILogger implements POILogger {
private String lastLog = "";
private Throwable lastEx;
@@ -65,13 +65,13 @@ public final class TestPOILogger extends
}
@Override
- protected void _log(int level, Object obj1) {
+ public void _log(int level, Object obj1) {
lastLog = (obj1 == null) ? "" : obj1.toString();
lastEx = null;
}
@Override
- protected void _log(int level, Object obj1, Throwable exception) {
+ public void _log(int level, Object obj1, Throwable exception) {
lastLog = (obj1 == null) ? "" : obj1.toString();
lastEx = exception;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]