Class AbstractConsoleLogger<T>

  • Type Parameters:
    T - The type of the Record instances managed by the Logger.
    All Implemented Interfaces:
    org.refcodes.component.Destroyable, org.refcodes.logger.LogDecorator, org.refcodes.logger.Logger<T>, org.refcodes.mixin.ErrorPrintStreamAccessor, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamBuilder<AbstractConsoleLogger<T>>, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamMutator, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamProperty, org.refcodes.mixin.RowWidthAccessor, org.refcodes.mixin.RowWidthAccessor.RowWidthBuilder<AbstractConsoleLogger<?>>, org.refcodes.mixin.RowWidthAccessor.RowWidthMutator, org.refcodes.mixin.RowWidthAccessor.RowWidthProperty, org.refcodes.mixin.StandardPrintStreamAccessor, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamBuilder<AbstractConsoleLogger<T>>, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamMutator, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamProperty, org.refcodes.textual.TableStyleAccessor, org.refcodes.textual.TableStyleAccessor.TableStyleBuilder<AbstractConsoleLogger<?>>, org.refcodes.textual.TableStyleAccessor.TableStyleMutator, org.refcodes.textual.TableStyleAccessor.TableStyleProperty
    Direct Known Subclasses:
    ConsoleLogger

    public abstract class AbstractConsoleLogger<T>
    extends Object
    implements org.refcodes.component.Destroyable, org.refcodes.logger.Logger<T>, org.refcodes.mixin.RowWidthAccessor.RowWidthProperty, org.refcodes.mixin.RowWidthAccessor.RowWidthBuilder<AbstractConsoleLogger<?>>, org.refcodes.textual.TableStyleAccessor.TableStyleProperty, org.refcodes.textual.TableStyleAccessor.TableStyleBuilder<AbstractConsoleLogger<?>>, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamProperty, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamBuilder<AbstractConsoleLogger<T>>, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamProperty, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamBuilder<AbstractConsoleLogger<T>>
    The AbstractConsoleLogger implements the Logger interface for providing logging functionality with extended pimped console output (via System.out and (via sub-classing also System.err).

    The AbstractConsoleLogger by default uses the most promising width in characters of the system's terminal in use by calling the method SystemUtility.toPreferredTerminalWidth(). In case you pass a "-Dconsole.width=n" JVM argument, then your width is taken, else the actual console's width is being tried to be determined. See SystemProperty.CONSOLE_WIDTH. You can also use the setRowWidth(int) or withRowWidth(int) method in order to programmatically set the console's row width.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  AbstractConsoleLogger.OutputPrintStream
      The Enum OutputPrintStream.
      • Nested classes/interfaces inherited from interface org.refcodes.component.Destroyable

        org.refcodes.component.Destroyable.DestroyAutomaton
      • Nested classes/interfaces inherited from interface org.refcodes.mixin.ErrorPrintStreamAccessor

        org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamBuilder<B extends org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamBuilder<?>>, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamMutator, org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamProperty
      • Nested classes/interfaces inherited from interface org.refcodes.mixin.RowWidthAccessor

        org.refcodes.mixin.RowWidthAccessor.RowWidthBuilder<B extends org.refcodes.mixin.RowWidthAccessor.RowWidthBuilder<?>>, org.refcodes.mixin.RowWidthAccessor.RowWidthMutator, org.refcodes.mixin.RowWidthAccessor.RowWidthProperty
      • Nested classes/interfaces inherited from interface org.refcodes.mixin.StandardPrintStreamAccessor

        org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamBuilder<B extends org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamBuilder<?>>, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamMutator, org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamProperty
      • Nested classes/interfaces inherited from interface org.refcodes.textual.TableStyleAccessor

        org.refcodes.textual.TableStyleAccessor.TableStyleBuilder<B extends org.refcodes.textual.TableStyleAccessor.TableStyleBuilder<?>>, org.refcodes.textual.TableStyleAccessor.TableStyleMutator, org.refcodes.textual.TableStyleAccessor.TableStyleProperty
    • Constructor Summary

      Constructors 
      Constructor Description
      AbstractConsoleLogger​(org.refcodes.tabular.FormattedHeader<T> aHeader)
      Initially enables or disables ANSI escape sequences as of detection of terminal's ANSI support.
    • Field Detail

      • DEFAULT_ANSI_BOX_GRID_COLOR

        protected String DEFAULT_ANSI_BOX_GRID_COLOR
        The default ANSI Escape-Sequence for the logger's box grid to be used when ANSI Escape-Codes are enabled.
      • _isPrintHead

        protected boolean _isPrintHead
      • _isPrintSeparator

        protected boolean _isPrintSeparator
      • _hasLogLines

        protected boolean _hasLogLines
      • _header

        protected org.refcodes.tabular.FormattedHeader<T> _header
      • _tableBuilder

        protected org.refcodes.textual.TableBuilder _tableBuilder
      • _rowWidth

        protected int _rowWidth
      • _tableStyle

        protected org.refcodes.textual.TableStyle _tableStyle
      • _hasLeftBorder

        protected boolean _hasLeftBorder
      • _hasRightBorder

        protected boolean _hasRightBorder
    • Constructor Detail

      • AbstractConsoleLogger

        public AbstractConsoleLogger​(org.refcodes.tabular.FormattedHeader<T> aHeader)
        Initially enables or disables ANSI escape sequences as of detection of terminal's ANSI support. You can overrule this setting by calling setEscapeCodes(boolean). See also SystemUtility.isAnsiTerminal().
        Parameters:
        aHeader - the header
    • Method Detail

      • log

        public void log​(org.refcodes.tabular.Record<? extends T> aRecord)
                 throws org.refcodes.logger.IllegalRecordRuntimeException,
                        org.refcodes.logger.UnexpectedLogRuntimeException
        Specified by:
        log in interface org.refcodes.logger.Logger<T>
        Throws:
        org.refcodes.logger.IllegalRecordRuntimeException
        org.refcodes.logger.UnexpectedLogRuntimeException
      • getStandardPrintStream

        public PrintStream getStandardPrintStream()
        Specified by:
        getStandardPrintStream in interface org.refcodes.mixin.StandardPrintStreamAccessor
      • setStandardPrintStream

        public void setStandardPrintStream​(PrintStream aOutStream)
        Specified by:
        setStandardPrintStream in interface org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamMutator
      • getErrorPrintStream

        public PrintStream getErrorPrintStream()
        Specified by:
        getErrorPrintStream in interface org.refcodes.mixin.ErrorPrintStreamAccessor
      • setErrorPrintStream

        public void setErrorPrintStream​(PrintStream aErrStream)
        Specified by:
        setErrorPrintStream in interface org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamMutator
      • setStyle

        public void setStyle​(String aTableStyle)
        Convenience method for setLoggerStyle(String): As the underlying configuration framework used by the RuntimeLoggerSingleton cannot convert a String to an enum, we got to provide such a method ourselves. When configuring programmatically use setTableStyle(TableStyle), when using the "runtimelogger-config.xml" use the property "loggerStyle" for this method to be invoked. Valid arguments are as of the TableStyle enumeration:
        • SINGLE_HEADER_SINGLE_BODY
        • DOUBLE_SINGLE_HEADER_SINGLE_BODY
        • DOUBLE_HEADER_DOUBLE_BODY
        • DOUBLE_SINGLE_HEADER_DOUBLE_SINGLE_BODY
        • DOUBLE_HEADER_SINGLE_BODY
        • DOUBLE_HEADER_DOUBLE_SINGLE_BODY
        • DOUBLE_SINGLE_HEADER_SINGLE_DASHED_BODY
        • ASCII_HEADER_ASCII_BODY
        • BLANK_HEADER_BLANK_BODY
        • SINGLE_BLANK_HEADER_SINGLE_BLANK_BODY
        • ASCII_BLANK_HEADER_ASCII_BLANK_BODY
        Parameters:
        aTableStyle - The style to use for the logger.
      • getTableStyle

        public org.refcodes.textual.TableStyle getTableStyle()
        Specified by:
        getTableStyle in interface org.refcodes.textual.TableStyleAccessor
      • setTableStyle

        public void setTableStyle​(org.refcodes.textual.TableStyle aTableStyle)
        Specified by:
        setTableStyle in interface org.refcodes.textual.TableStyleAccessor.TableStyleMutator
      • setLoggerStyle

        public void setLoggerStyle​(String aTableStyleName)
        As the underlying configuration framework used by the RuntimeLoggerSingleton cannot convert a String to an enum, we got to provide such a method ourselves. When configuring programmatically use setTableStyle(TableStyle), when using the "runtimelogger-config.xml" use the property "loggerStyle" for this method to be invoked. Valid arguments are as of the TableStyle enumeration:
        • SINGLE_HEADER_SINGLE_BODY
        • DOUBLE_SINGLE_HEADER_SINGLE_BODY
        • DOUBLE_HEADER_DOUBLE_BODY
        • DOUBLE_SINGLE_HEADER_DOUBLE_SINGLE_BODY
        • DOUBLE_HEADER_SINGLE_BODY
        • DOUBLE_HEADER_DOUBLE_SINGLE_BODY
        • DOUBLE_SINGLE_HEADER_SINGLE_DASHED_BODY
        • ASCII_HEADER_ASCII_BODY
        • BLANK_HEADER_BLANK_BODY
        • SINGLE_BLANK_HEADER_SINGLE_BLANK_BODY
        • ASCII_BLANK_HEADER_ASCII_BLANK_BODY
        Parameters:
        aTableStyleName - The style to use for the logger.
      • setEscapeCodes

        public void setEscapeCodes​(boolean isEscCodesEnabled)
        Sets the escape codes.
        Parameters:
        isEscCodesEnabled - the new escape codes
      • hasLeftBorder

        public boolean hasLeftBorder()
        Checks for left border.
        Returns:
        true, if successful
      • setLeftBorder

        public void setLeftBorder​(boolean hasLeftBorder)
        Sets the left border.
        Parameters:
        hasLeftBorder - the new left border
      • withLeftBorder

        public AbstractConsoleLogger<T> withLeftBorder​(boolean hasLeftBorder)
        With left border.
        Parameters:
        hasLeftBorder - the has left border
        Returns:
        the formatted logger
      • hasRightBorder

        public boolean hasRightBorder()
        Checks for right border.
        Returns:
        true, if successful
      • setRightBorder

        public void setRightBorder​(boolean hasRightBorder)
        Sets the right border.
        Parameters:
        hasRightBorder - the new right border
      • withRightBorder

        public AbstractConsoleLogger<T> withRightBorder​(boolean hasRightBorder)
        With right border.
        Parameters:
        hasRightBorder - the has right border
        Returns:
        the formatted logger
      • withErrorPrintStream

        public AbstractConsoleLogger<T> withErrorPrintStream​(PrintStream aErrorPrintStream)
        Specified by:
        withErrorPrintStream in interface org.refcodes.mixin.ErrorPrintStreamAccessor.ErrorPrintStreamBuilder<T>
      • withStandardPrintStream

        public AbstractConsoleLogger<T> withStandardPrintStream​(PrintStream aStandardPrintStream)
        Specified by:
        withStandardPrintStream in interface org.refcodes.mixin.StandardPrintStreamAccessor.StandardPrintStreamBuilder<T>
      • withTableStyle

        public AbstractConsoleLogger<?> withTableStyle​(org.refcodes.textual.TableStyle aTableStyle)
        Specified by:
        withTableStyle in interface org.refcodes.textual.TableStyleAccessor.TableStyleBuilder<T>
      • withRowWidth

        public AbstractConsoleLogger<?> withRowWidth​(int aRowWidth)
        Specified by:
        withRowWidth in interface org.refcodes.mixin.RowWidthAccessor.RowWidthBuilder<T>
      • getRowWidth

        public int getRowWidth()
        Specified by:
        getRowWidth in interface org.refcodes.mixin.RowWidthAccessor
      • setRowWidth

        public void setRowWidth​(int aRowWidth)
        Specified by:
        setRowWidth in interface org.refcodes.mixin.RowWidthAccessor.RowWidthMutator
      • hasEscapeCodes

        public boolean hasEscapeCodes()
        Checks for escape codes.
        Returns:
        true, if successful
      • withEscapeCodes

        public AbstractConsoleLogger<T> withEscapeCodes​(boolean isEscCodesEnabled)
        With escape codes.
        Parameters:
        isEscCodesEnabled - the is esc codes enabled
        Returns:
        the formatted logger
      • destroy

        public void destroy()
        Specified by:
        destroy in interface org.refcodes.component.Destroyable
      • init

        protected void init()
        Inits the logger.
      • printSeparator

        public void printSeparator()
        Specified by:
        printSeparator in interface org.refcodes.logger.LogDecorator
      • printTail

        public void printTail()
        Specified by:
        printTail in interface org.refcodes.logger.LogDecorator
      • printHead

        public void printHead()
        Specified by:
        printHead in interface org.refcodes.logger.LogDecorator
      • toPreConfiguredTableBuilder

        protected org.refcodes.textual.TableBuilder toPreConfiguredTableBuilder​(org.refcodes.tabular.FormattedHeader<?> aHeader,
                                                                                AbstractConsoleLogger.OutputPrintStream aOutputPrintStream)
        Creates a pre-configured TableBuilder, can be used by sub-classes in case them require additional TableBuilder instances.
        Parameters:
        aHeader - the header
        aOutputPrintStream - the output print stream
        Returns:
        A pre-configured TableBuilder (as of the attributes state of the AbstractConsoleLogger).
      • log

        protected void log​(org.refcodes.tabular.Record<? extends T> aRecord,
                           org.refcodes.tabular.FormattedHeader<T> aHeader,
                           org.refcodes.textual.TableBuilder aTableBuilder)
        Prints out a log-line with regard to the provided Header unsing the provided TableBuilder.
        Parameters:
        aRecord - The record to log.
        aHeader - The Header with which to determine the visibility of the Record's elements.
        aTableBuilder - The TableBuilder to use for printing.
        Throws:
        ClassCastException - the class cast exception