Review comments++
This commit is contained in:
		| @@ -1,95 +1,96 @@ | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.FileNotFoundException; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a use case for testing two different modules: File Logger and | ||||
|  * Console Logger | ||||
|  *  | ||||
|  */ | ||||
| public final class App { | ||||
|  | ||||
|   public static FileLoggerModule fileLoggerModule = null; | ||||
|   public static ConsoleLoggerModule consoleLoggerModule = null; | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public static void prepare() throws FileNotFoundException { | ||||
|  | ||||
|     fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|     consoleLoggerModule = ConsoleLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare modules */ | ||||
|     fileLoggerModule.prepare(); | ||||
|     consoleLoggerModule.prepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public static void unprepare() { | ||||
|  | ||||
|     /* Close all resources */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|     consoleLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method is main executor | ||||
|    *  | ||||
|    * @param args for providing default program arguments | ||||
|    */ | ||||
|   public static void execute(final String... args) { | ||||
|  | ||||
|     /* Send logs on file system */ | ||||
|     fileLoggerModule.printString("Message"); | ||||
|     fileLoggerModule.printErrorString("Error"); | ||||
|  | ||||
|     /* Send logs on console */ | ||||
|     consoleLoggerModule.printString("Message"); | ||||
|     consoleLoggerModule.printErrorString("Error"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Program entry point. | ||||
|    *  | ||||
|    * @param args command line args. | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public static void main(final String... args) throws FileNotFoundException { | ||||
|     prepare(); | ||||
|     execute(args); | ||||
|     unprepare(); | ||||
|   } | ||||
|  | ||||
|   private App() {} | ||||
| } | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.FileNotFoundException; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a use case for testing two different modules: File Logger and | ||||
|  * Console Logger | ||||
|  *  | ||||
|  */ | ||||
| public final class App { | ||||
|  | ||||
|   public static FileLoggerModule fileLoggerModule; | ||||
|   public static ConsoleLoggerModule consoleLoggerModule; | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public static void prepare() throws FileNotFoundException { | ||||
|  | ||||
|     /* Create new singleton objects and prepare their modules */ | ||||
|     fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|     consoleLoggerModule = ConsoleLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare modules */ | ||||
|     fileLoggerModule.prepare(); | ||||
|     consoleLoggerModule.prepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public static void unprepare() { | ||||
|  | ||||
|     /* Close all resources */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|     consoleLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method is main executor | ||||
|    *  | ||||
|    * @param args for providing default program arguments | ||||
|    */ | ||||
|   public static void execute(final String... args) { | ||||
|  | ||||
|     /* Send logs on file system */ | ||||
|     fileLoggerModule.printString("Message"); | ||||
|     fileLoggerModule.printErrorString("Error"); | ||||
|  | ||||
|     /* Send logs on console */ | ||||
|     consoleLoggerModule.printString("Message"); | ||||
|     consoleLoggerModule.printErrorString("Error"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Program entry point. | ||||
|    *  | ||||
|    * @param args command line args. | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public static void main(final String... args) throws FileNotFoundException { | ||||
|     prepare(); | ||||
|     execute(args); | ||||
|     unprepare(); | ||||
|   } | ||||
|  | ||||
|   private App() {} | ||||
| } | ||||
|   | ||||
| @@ -1,108 +1,104 @@ | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.PrintStream; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a Console logger module, which can print simple and error messages | ||||
|  * in two designated formats | ||||
|  */ | ||||
| public final class ConsoleLoggerModule { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(ConsoleLoggerModule.class); | ||||
|  | ||||
|   private static ConsoleLoggerModule singleton = null; | ||||
|  | ||||
|   public PrintStream output = null; | ||||
|   public PrintStream error = null; | ||||
|  | ||||
|   private ConsoleLoggerModule() {} | ||||
|  | ||||
|   /** | ||||
|    * Static method to get single instance of class | ||||
|    *  | ||||
|    * @return singleton instance of ConsoleLoggerModule | ||||
|    */ | ||||
|   public static ConsoleLoggerModule getSingleton() { | ||||
|  | ||||
|     if (ConsoleLoggerModule.singleton == null) { | ||||
|       ConsoleLoggerModule.singleton = new ConsoleLoggerModule(); | ||||
|     } | ||||
|  | ||||
|     return ConsoleLoggerModule.singleton; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    */ | ||||
|   public void prepare() { | ||||
|  | ||||
|     LOGGER.debug("ConsoleLoggerModule::prepare();"); | ||||
|  | ||||
|     this.output = new PrintStream(System.out); | ||||
|     this.error = new PrintStream(System.err); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public void unprepare() { | ||||
|  | ||||
|     if (this.output != null) { | ||||
|  | ||||
|       this.output.flush(); | ||||
|       this.output.close(); | ||||
|     } | ||||
|  | ||||
|     if (this.error != null) { | ||||
|  | ||||
|       this.error.flush(); | ||||
|       this.error.close(); | ||||
|     } | ||||
|  | ||||
|     LOGGER.debug("ConsoleLoggerModule::unprepare();"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a message | ||||
|    *  | ||||
|    * @param value will be printed on console | ||||
|    */ | ||||
|   public void printString(final String value) { | ||||
|     this.output.println(value); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a error message | ||||
|    *  | ||||
|    * @param value will be printed on error console | ||||
|    */ | ||||
|   public void printErrorString(final String value) { | ||||
|     this.error.println(value); | ||||
|   } | ||||
| } | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.PrintStream; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
|  | ||||
| /** | ||||
|  * The ConsoleLoggerModule is responsible for showing logs on System Console | ||||
|  * <p> | ||||
|  * The below example demonstrates a Console logger module, which can print simple and error messages | ||||
|  * in two designated formats | ||||
|  */ | ||||
| public final class ConsoleLoggerModule { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(ConsoleLoggerModule.class); | ||||
|  | ||||
|   private static ConsoleLoggerModule singleton = null; | ||||
|  | ||||
|   public PrintStream output = null; | ||||
|   public PrintStream error = null; | ||||
|  | ||||
|   private ConsoleLoggerModule() {} | ||||
|  | ||||
|   /** | ||||
|    * Static method to get single instance of class | ||||
|    *  | ||||
|    * @return singleton instance of ConsoleLoggerModule | ||||
|    */ | ||||
|   public static ConsoleLoggerModule getSingleton() { | ||||
|  | ||||
|     if (ConsoleLoggerModule.singleton == null) { | ||||
|       ConsoleLoggerModule.singleton = new ConsoleLoggerModule(); | ||||
|     } | ||||
|  | ||||
|     return ConsoleLoggerModule.singleton; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    */ | ||||
|   public void prepare() { | ||||
|  | ||||
|     LOGGER.debug("ConsoleLoggerModule::prepare();"); | ||||
|  | ||||
|     this.output = new PrintStream(System.out); | ||||
|     this.error = new PrintStream(System.err); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public void unprepare() { | ||||
|  | ||||
|     if (this.output != null) { | ||||
|  | ||||
|       this.output.flush(); | ||||
|       this.output.close(); | ||||
|     } | ||||
|  | ||||
|     if (this.error != null) { | ||||
|  | ||||
|       this.error.flush(); | ||||
|       this.error.close(); | ||||
|     } | ||||
|  | ||||
|     LOGGER.debug("ConsoleLoggerModule::unprepare();"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a message | ||||
|    *  | ||||
|    * @param value will be printed on console | ||||
|    */ | ||||
|   public void printString(final String value) { | ||||
|     this.output.println(value); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a error message | ||||
|    *  | ||||
|    * @param value will be printed on error console | ||||
|    */ | ||||
|   public void printErrorString(final String value) { | ||||
|     this.error.println(value); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,116 +1,112 @@ | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.PrintStream; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a File logger module, which can print simple and error messages in | ||||
|  * two designated files | ||||
|  */ | ||||
| public final class FileLoggerModule { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(FileLoggerModule.class); | ||||
|  | ||||
|   private static FileLoggerModule singleton = null; | ||||
|  | ||||
|   private static final String OUTPUT_FILE = "output.txt"; | ||||
|   private static final String ERROR_FILE = "error.txt"; | ||||
|  | ||||
|   public PrintStream output = null; | ||||
|   public PrintStream error = null; | ||||
|  | ||||
|   private FileLoggerModule() {} | ||||
|  | ||||
|   /** | ||||
|    * Static method to get single instance of class | ||||
|    *  | ||||
|    * @return singleton instance of FileLoggerModule | ||||
|    */ | ||||
|   public static FileLoggerModule getSingleton() { | ||||
|  | ||||
|     if (FileLoggerModule.singleton == null) { | ||||
|       FileLoggerModule.singleton = new FileLoggerModule(); | ||||
|     } | ||||
|  | ||||
|     return FileLoggerModule.singleton; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public void prepare() throws FileNotFoundException { | ||||
|  | ||||
|     LOGGER.debug("FileLoggerModule::prepare();"); | ||||
|  | ||||
|     this.output = new PrintStream(new FileOutputStream(OUTPUT_FILE)); | ||||
|     this.error = new PrintStream(new FileOutputStream(ERROR_FILE)); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public void unprepare() { | ||||
|  | ||||
|     if (this.output != null) { | ||||
|  | ||||
|       this.output.flush(); | ||||
|       this.output.close(); | ||||
|     } | ||||
|  | ||||
|     if (this.error != null) { | ||||
|  | ||||
|       this.error.flush(); | ||||
|       this.error.close(); | ||||
|     } | ||||
|  | ||||
|     LOGGER.debug("FileLoggerModule::unprepare();"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a message | ||||
|    *  | ||||
|    * @param value will be printed in file | ||||
|    */ | ||||
|   public void printString(final String value) { | ||||
|     this.output.println(value); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a error message | ||||
|    *  | ||||
|    * @param value will be printed on error file | ||||
|    */ | ||||
|   public void printErrorString(final String value) { | ||||
|     this.error.println(value); | ||||
|   } | ||||
| } | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.PrintStream; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
|  | ||||
| /** | ||||
|  * The FileLoggerModule is responsible for showing logs on File System | ||||
|  * <p> | ||||
|  * The below example demonstrates a File logger module, which can print simple and error messages in | ||||
|  * two designated files | ||||
|  */ | ||||
| public final class FileLoggerModule { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(FileLoggerModule.class); | ||||
|  | ||||
|   private static FileLoggerModule singleton = null; | ||||
|  | ||||
|   private static final String OUTPUT_FILE = "output.txt"; | ||||
|   private static final String ERROR_FILE = "error.txt"; | ||||
|  | ||||
|   public PrintStream output = null; | ||||
|   public PrintStream error = null; | ||||
|  | ||||
|   private FileLoggerModule() {} | ||||
|  | ||||
|   /** | ||||
|    * Static method to get single instance of class | ||||
|    *  | ||||
|    * @return singleton instance of FileLoggerModule | ||||
|    */ | ||||
|   public static FileLoggerModule getSingleton() { | ||||
|  | ||||
|     if (FileLoggerModule.singleton == null) { | ||||
|       FileLoggerModule.singleton = new FileLoggerModule(); | ||||
|     } | ||||
|  | ||||
|     return FileLoggerModule.singleton; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the initialization | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   public void prepare() throws FileNotFoundException { | ||||
|  | ||||
|     LOGGER.debug("FileLoggerModule::prepare();"); | ||||
|  | ||||
|     this.output = new PrintStream(new FileOutputStream(OUTPUT_FILE)); | ||||
|     this.error = new PrintStream(new FileOutputStream(ERROR_FILE)); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Following method performs the finalization | ||||
|    */ | ||||
|   public void unprepare() { | ||||
|  | ||||
|     if (this.output != null) { | ||||
|  | ||||
|       this.output.flush(); | ||||
|       this.output.close(); | ||||
|     } | ||||
|  | ||||
|     if (this.error != null) { | ||||
|  | ||||
|       this.error.flush(); | ||||
|       this.error.close(); | ||||
|     } | ||||
|  | ||||
|     LOGGER.debug("FileLoggerModule::unprepare();"); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a message | ||||
|    *  | ||||
|    * @param value will be printed in file | ||||
|    */ | ||||
|   public void printString(final String value) { | ||||
|     this.output.println(value); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Used to print a error message | ||||
|    *  | ||||
|    * @param value will be printed on error file | ||||
|    */ | ||||
|   public void printErrorString(final String value) { | ||||
|     this.error.println(value); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,182 +1,182 @@ | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import static org.junit.Assert.assertEquals; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileReader; | ||||
| import java.io.IOException; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
| import org.junit.Test; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a JUnit test for testing two different modules: File Logger and | ||||
|  * Console Logger | ||||
|  */ | ||||
| public final class FileLoggerModuleTest { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(FileLoggerModuleTest.class); | ||||
|  | ||||
|   private static final String OUTPUT_FILE = "output.txt"; | ||||
|   private static final String ERROR_FILE = "error.txt"; | ||||
|  | ||||
|   private static final String MESSAGE = "MESSAGE"; | ||||
|   private static final String ERROR = "ERROR"; | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * This test verify that 'MESSAGE' is perfectly printed in output file | ||||
|    *  | ||||
|    * @throws IOException if program is not able to find log files (output.txt and error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void positiveTestFileMessage() throws IOException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Print 'Message' in file */ | ||||
|     fileLoggerModule.printString(MESSAGE); | ||||
|  | ||||
|     /* Test if 'Message' is printed in file */ | ||||
|     assertEquals(readFirstLine(OUTPUT_FILE), MESSAGE); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that nothing is printed in output file | ||||
|    *  | ||||
|    * @throws IOException if program is not able to find log files (output.txt and error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void negativeTestFileMessage() throws IOException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Test if nothing is printed in file */ | ||||
|     assertEquals(readFirstLine(OUTPUT_FILE), null); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that 'ERROR' is perfectly printed in error file | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void positiveTestFileErrorMessage() throws FileNotFoundException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Print 'Error' in file */ | ||||
|     fileLoggerModule.printErrorString(ERROR); | ||||
|  | ||||
|     /* Test if 'Message' is printed in file */ | ||||
|     assertEquals(readFirstLine(ERROR_FILE), ERROR); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that nothing is printed in error file | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void negativeTestFileErrorMessage() throws FileNotFoundException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Test if nothing is printed in file */ | ||||
|     assertEquals(readFirstLine(ERROR_FILE), null); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Utility method to read first line of a file | ||||
|    *  | ||||
|    * @param file as file name to be read | ||||
|    * @return a string value as first line in file | ||||
|    */ | ||||
|   private static final String readFirstLine(final String file) { | ||||
|  | ||||
|     String firstLine = null; | ||||
|     BufferedReader bufferedReader = null; | ||||
|     try { | ||||
|  | ||||
|       /* Create a buffered reader */ | ||||
|       bufferedReader = new BufferedReader(new FileReader(file)); | ||||
|  | ||||
|       while (bufferedReader.ready()) { | ||||
|  | ||||
|         /* Read the line */ | ||||
|         firstLine = bufferedReader.readLine(); | ||||
|       } | ||||
|  | ||||
|       LOGGER.info("ModuleTest::readFirstLine() : firstLine : " + firstLine); | ||||
|  | ||||
|     } catch (final IOException e) { | ||||
|       LOGGER.error("ModuleTest::readFirstLine()", e); | ||||
|     } finally { | ||||
|  | ||||
|       if (bufferedReader != null) { | ||||
|         try { | ||||
|           bufferedReader.close(); | ||||
|         } catch (final IOException e) { | ||||
|           LOGGER.error("ModuleTest::readFirstLine()", e); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     return firstLine; | ||||
|   } | ||||
| } | ||||
| /** | ||||
|  * The MIT License Copyright (c) 2016 Amit Dixit | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|  * associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|  * including without limitation the rights to use, copy, modify, merge, publish, distribute, | ||||
|  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all copies or | ||||
|  * substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT | ||||
|  * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||||
|  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
| package com.iluwatar.module; | ||||
|  | ||||
| import static org.junit.Assert.assertEquals; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileReader; | ||||
| import java.io.IOException; | ||||
|  | ||||
| import org.apache.log4j.Logger; | ||||
| import org.junit.Test; | ||||
|  | ||||
| /** | ||||
|  * The Module pattern can be considered a Creational pattern and a Structural pattern. It manages | ||||
|  * the creation and organization of other elements, and groups them as the structural pattern does. | ||||
|  * An object that applies this pattern can provide the equivalent of a namespace, providing the | ||||
|  * initialization and finalization process of a static class or a class with static members with | ||||
|  * cleaner, more concise syntax and semantics. | ||||
|  * <p> | ||||
|  * The below example demonstrates a JUnit test for testing two different modules: File Logger and | ||||
|  * Console Logger | ||||
|  */ | ||||
| public final class FileLoggerModuleTest { | ||||
|  | ||||
|   private static final Logger LOGGER = Logger.getLogger(FileLoggerModuleTest.class); | ||||
|  | ||||
|   private static final String OUTPUT_FILE = "output.txt"; | ||||
|   private static final String ERROR_FILE = "error.txt"; | ||||
|  | ||||
|   private static final String MESSAGE = "MESSAGE"; | ||||
|   private static final String ERROR = "ERROR"; | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * This test verify that 'MESSAGE' is perfectly printed in output file | ||||
|    *  | ||||
|    * @throws IOException if program is not able to find log files (output.txt and error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void testFileMessage() throws IOException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Print 'Message' in file */ | ||||
|     fileLoggerModule.printString(MESSAGE); | ||||
|  | ||||
|     /* Test if 'Message' is printed in file */ | ||||
|     assertEquals(readFirstLine(OUTPUT_FILE), MESSAGE); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that nothing is printed in output file | ||||
|    *  | ||||
|    * @throws IOException if program is not able to find log files (output.txt and error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void testNoFileMessage() throws IOException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Test if nothing is printed in file */ | ||||
|     assertEquals(readFirstLine(OUTPUT_FILE), null); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that 'ERROR' is perfectly printed in error file | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void testFileErrorMessage() throws FileNotFoundException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Print 'Error' in file */ | ||||
|     fileLoggerModule.printErrorString(ERROR); | ||||
|  | ||||
|     /* Test if 'Message' is printed in file */ | ||||
|     assertEquals(readFirstLine(ERROR_FILE), ERROR); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * This test verify that nothing is printed in error file | ||||
|    *  | ||||
|    * @throws FileNotFoundException if program is not able to find log files (output.txt and | ||||
|    *         error.txt) | ||||
|    */ | ||||
|   @Test | ||||
|   public void testNoFileErrorMessage() throws FileNotFoundException { | ||||
|  | ||||
|     /* Get singletong instance of File Logger Module */ | ||||
|     final FileLoggerModule fileLoggerModule = FileLoggerModule.getSingleton(); | ||||
|  | ||||
|     /* Prepare the essential sub modules, to perform the sequence of jobs */ | ||||
|     fileLoggerModule.prepare(); | ||||
|  | ||||
|     /* Test if nothing is printed in file */ | ||||
|     assertEquals(readFirstLine(ERROR_FILE), null); | ||||
|  | ||||
|     /* Unprepare to cleanup the modules */ | ||||
|     fileLoggerModule.unprepare(); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Utility method to read first line of a file | ||||
|    *  | ||||
|    * @param file as file name to be read | ||||
|    * @return a string value as first line in file | ||||
|    */ | ||||
|   private static final String readFirstLine(final String file) { | ||||
|  | ||||
|     String firstLine = null; | ||||
|     BufferedReader bufferedReader = null; | ||||
|     try { | ||||
|  | ||||
|       /* Create a buffered reader */ | ||||
|       bufferedReader = new BufferedReader(new FileReader(file)); | ||||
|  | ||||
|       while (bufferedReader.ready()) { | ||||
|  | ||||
|         /* Read the line */ | ||||
|         firstLine = bufferedReader.readLine(); | ||||
|       } | ||||
|  | ||||
|       LOGGER.info("ModuleTest::readFirstLine() : firstLine : " + firstLine); | ||||
|  | ||||
|     } catch (final IOException e) { | ||||
|       LOGGER.error("ModuleTest::readFirstLine()", e); | ||||
|     } finally { | ||||
|  | ||||
|       if (bufferedReader != null) { | ||||
|         try { | ||||
|           bufferedReader.close(); | ||||
|         } catch (final IOException e) { | ||||
|           LOGGER.error("ModuleTest::readFirstLine()", e); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     return firstLine; | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user