Refactoring Teaser III
This time a simple one.
Following test will help you understand the code:
public class MyLoggerTest implements Console { private String msg; private MyLogger logger = new MyLogger(this); @Test public void handleNonIOExceptions() { logger.error(new IllegalArgumentException("Ignore Exception")); assertEquals("SEVERE: Dying due to exception : Ignore Exception", msg); } @Test public void ignoreSpecificIOExceptions() { String errorMsg = "Broken pipe:" + Math.random(); logger.error(new IOException(errorMsg)); assertEquals("FINE: Ignoring Exception for : " + errorMsg, msg); } @Test public void handleGenericIOExceptions() { String errorMsg = "Random IO Error:" + Math.random(); logger.error(new IOException(errorMsg)); assertEquals("SEVERE: Dying due to exception : " + errorMsg, msg); } @Override public void write(final String msg) { this.msg = msg; } } |
public class MyLogger { private final Console out; public MyLogger(final Console out) { this.out = out; } private static final String[] IGNORED_IOEXCEPTION_MESSAGES = { "An existing connection was forcibly closed by the remote host", "Connection reset by peer", "Broken pipe", "Connection timed out", "No route to host", }; public void error(final Throwable t) { if (isIgnored(t)) { out.write("FINE: Ignoring Exception for : " + t.getMessage()); } else { out.write("SEVERE: Dying due to exception : " + t.getMessage()); } } private boolean isIgnored(final Throwable t) { if (t instanceof IOException) { final String exceptionMessage = t.getMessage(); for (String ignoredMessage : IGNORED_IOEXCEPTION_MESSAGES) { if (exceptionMessage.startsWith(ignoredMessage)) { return true; } } } return false; } } |
and
public interface Console { void write(String msg); } |
Feel free to download the Java project.


