001package org.javasimon.console.text;
002
003/**
004 * Basic value formatter.
005 * Handles null value delegating to a null Stringifier.
006 *
007 * @param <T> Input type
008 * @author gquintana
009 */
010public class BaseStringifier<T> implements Stringifier<T> {
011
012        /** Stringifier to handle null values. */
013        private final Stringifier nullStringifier;
014
015        /**
016         * Constructor.
017         *
018         * @param nullStringifier Stringifier to handle null values
019         */
020        public BaseStringifier(Stringifier nullStringifier) {
021                this.nullStringifier = nullStringifier;
022        }
023
024        /**
025         * Check whether input value should be considered as null
026         *
027         * @param object Input value
028         * @return Null-style
029         */
030        protected boolean isValid(T object) {
031                return object != null;
032        }
033
034        @Override
035        public final String toString(T object) {
036                return isValid(object) ? doToString(object) : nullToString();
037        }
038
039        /** Converts null input value to string. */
040        @SuppressWarnings("unchecked")
041        protected final String nullToString() {
042                return nullStringifier.toString(null);
043        }
044
045        /** Converts not null input value to string. */
046        protected String doToString(T object) {
047                return object.toString();
048        }
049}