001/*
002 *  Copyright 2001-2005 Stephen Colebourne
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.joda.time.format;
017
018/**
019 * Factory that creates instances of PeriodFormatter.
020 * <p>
021 * Period formatting is performed by the {@link PeriodFormatter} class.
022 * Three classes provide factory methods to create formatters, and this is one.
023 * The others are {@link ISOPeriodFormat} and {@link PeriodFormatterBuilder}.
024 * <p>
025 * PeriodFormat is thread-safe and immutable, and the formatters it returns
026 * are as well.
027 *
028 * @author Brian S O'Neill
029 * @since 1.0
030 * @see ISOPeriodFormat
031 * @see PeriodFormatterBuilder
032 */
033public class PeriodFormat {
034
035    /** An english words based formatter. */
036    private static PeriodFormatter cEnglishWords;
037
038    /**
039     * Constructor.
040     *
041     * @since 1.1 (previously private)
042     */
043    protected PeriodFormat() {
044        super();
045    }
046
047    //-----------------------------------------------------------------------
048    /**
049     * Gets the default PeriodFormatter.
050     * <p>
051     * This currently returns a word based formatter using English only.
052     * Hopefully future release will support localized period formatting.
053     * 
054     * @return the formatter
055     */
056    public static PeriodFormatter getDefault() {
057        if (cEnglishWords == null) {
058            String[] variants = {" ", ",", ",and ", ", and "};
059            cEnglishWords = new PeriodFormatterBuilder()
060                .appendYears()
061                .appendSuffix(" year", " years")
062                .appendSeparator(", ", " and ", variants)
063                .appendMonths()
064                .appendSuffix(" month", " months")
065                .appendSeparator(", ", " and ", variants)
066                .appendWeeks()
067                .appendSuffix(" week", " weeks")
068                .appendSeparator(", ", " and ", variants)
069                .appendDays()
070                .appendSuffix(" day", " days")
071                .appendSeparator(", ", " and ", variants)
072                .appendHours()
073                .appendSuffix(" hour", " hours")
074                .appendSeparator(", ", " and ", variants)
075                .appendMinutes()
076                .appendSuffix(" minute", " minutes")
077                .appendSeparator(", ", " and ", variants)
078                .appendSeconds()
079                .appendSuffix(" second", " seconds")
080                .appendSeparator(", ", " and ", variants)
081                .appendMillis()
082                .appendSuffix(" millisecond", " milliseconds")
083                .toFormatter();
084        }
085        return cEnglishWords;
086    }
087
088}