// Path: humanize-joda/src/main/java/humanize/time/joda/JodaTimeFormatProvider.java
// public static class JodaDateTimeFormat extends JodaBaseFormat<DateTimeFormatter>
// {
// 
//     private static final long serialVersionUID = -7080564879531103796L;
// 
//     public JodaDateTimeFormat(Method method)
//     {
//         super(method);
//     }
// 
//     @Override
//     public StringBuffer format(Object param, StringBuffer appendTo, FieldPosition pos)
//     {
//         return appendTo.append(((DateTime) param).toString(get()));
//     }
// 
//     public Object parse(String source) throws ParseException
//     {
//         return format.parseDateTime(source);
//     }
// 
//     public Format withLocale(Locale locale)
//     {
//         format = get().withLocale(locale);
//         return this;
//     }
// 
// }
// 
// Path: humanize-joda/src/main/java/humanize/time/joda/JodaTimeFormatProvider.java
// public static class JodaPeriodFormat extends JodaBaseFormat<PeriodFormatter>
// {
// 
//     private static final long serialVersionUID = 7075580918316147610L;
// 
//     private Locale locale;
// 
//     public JodaPeriodFormat(Method method)
//     {
//         super(method);
//     }
// 
//     @Override
//     public StringBuffer format(Object param, StringBuffer appendTo, FieldPosition pos)
//     {
//         return appendTo.append(((Period) param).toString(get()));
//     }
// 
//     public Object parse(String source) throws ParseException
//     {
//         return format.parsePeriod(source);
//     }
// 
//     public synchronized Format withLocale(Locale locale)
//     {
//         this.locale = locale;
//         this.format = get();
//         return this;
//     }
// 
//     @Override
//     protected PeriodFormatter invoke() throws IllegalAccessException, InvocationTargetException
//     {
//         return (PeriodFormatter) method.invoke(null, locale);
//     }
// 
// }


import humanize.time.joda.JodaTimeFormatProvider.JodaDateTimeFormat;
import humanize.time.joda.JodaTimeFormatProvider.JodaPeriodFormat;
import java.text.Format;
import java.util.HashMap;
import java.util.Map;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.format.ISOPeriodFormat;
package humanize.time.joda;




/**
 * Table to find Joda time format variants by name.
 */
public final class FormatTables implements FormatNames
{

    private static FormatTables instance;

    /**
     * Retrieves a variants map for a given format name.
     * 
     * @param name
     *            The format name
     * @return a mutable map of variants
     */
    public static Map<String, Format> get(String name)
    {
        return instance().methods.get(name);
    }

    public static synchronized FormatTables instance()
    {
        if (instance == null) {
            instance = new FormatTables();
        }
        return instance;
    }

    private final Map<String, Map<String, Format>> methods = new HashMap<String, Map<String, Format>>();

    private FormatTables()
    {
        initialize();
    }

    private void initialize()
    {
        Map<String, Format> jtm = new HashMap<String, Format>();

// Path: humanize-joda/src/main/java/humanize/time/joda/JodaTimeFormatProvider.java
// public static class JodaDateTimeFormat extends JodaBaseFormat<DateTimeFormatter>
// {
// 
//     private static final long serialVersionUID = -7080564879531103796L;
// 
//     public JodaDateTimeFormat(Method method)
//     {
//         super(method);
//     }
// 
//     @Override
//     public StringBuffer format(Object param, StringBuffer appendTo, FieldPosition pos)
//     {
//         return appendTo.append(((DateTime) param).toString(get()));
//     }
// 
//     public Object parse(String source) throws ParseException
//     {
//         return format.parseDateTime(source);
//     }
// 
//     public Format withLocale(Locale locale)
//     {
//         format = get().withLocale(locale);
//         return this;
//     }
// 
// }
// 
// Path: humanize-joda/src/main/java/humanize/time/joda/JodaTimeFormatProvider.java
// public static class JodaPeriodFormat extends JodaBaseFormat<PeriodFormatter>
// {
// 
//     private static final long serialVersionUID = 7075580918316147610L;
// 
//     private Locale locale;
// 
//     public JodaPeriodFormat(Method method)
//     {
//         super(method);
//     }
// 
//     @Override
//     public StringBuffer format(Object param, StringBuffer appendTo, FieldPosition pos)
//     {
//         return appendTo.append(((Period) param).toString(get()));
//     }
// 
//     public Object parse(String source) throws ParseException
//     {
//         return format.parsePeriod(source);
//     }
// 
//     public synchronized Format withLocale(Locale locale)
//     {
//         this.locale = locale;
//         this.format = get();
//         return this;
//     }
// 
//     @Override
//     protected PeriodFormatter invoke() throws IllegalAccessException, InvocationTargetException
//     {
//         return (PeriodFormatter) method.invoke(null, locale);
//     }
// 
// }


// Path: humanize-joda/src/main/java/humanize/time/joda/FormatTables.java
import humanize.time.joda.JodaTimeFormatProvider.JodaDateTimeFormat;
import humanize.time.joda.JodaTimeFormatProvider.JodaPeriodFormat;
import java.text.Format;
import java.util.HashMap;
import java.util.Map;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.format.ISOPeriodFormat;

package humanize.time.joda;




/**
 * Table to find Joda time format variants by name.
 */
public final class FormatTables implements FormatNames
{

    private static FormatTables instance;

    /**
     * Retrieves a variants map for a given format name.
     * 
     * @param name
     *            The format name
     * @return a mutable map of variants
     */
    public static Map<String, Format> get(String name)
    {
        return instance().methods.get(name);
    }

    public static synchronized FormatTables instance()
    {
        if (instance == null) {
            instance = new FormatTables();
        }
        return instance;
    }

    private final Map<String, Map<String, Format>> methods = new HashMap<String, Map<String, Format>>();

    private FormatTables()
    {
        initialize();
    }

    private void initialize()
    {
        Map<String, Format> jtm = new HashMap<String, Format>();

        JodaDateTimeFormat shortDate = newDateTimeFormat("shortDate");