// 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;
        ipm.put(ISO_PERIOD_ALTERNATE, newISOPeriodFormat(ISO_PERIOD_ALTERNATE));
        ipm.put(ISO_PERIOD_ALTERNATE_EXTENDED, newISOPeriodFormat("alternateExtended"));
        ipm.put(ISO_PERIOD_ALTERNATE_WITH_WEEKS, newISOPeriodFormat("alternateWithWeeks"));
        ipm.put(ISO_PERIOD_ALTERNATE_EXTENDED_WITH_WEEKS, newISOPeriodFormat("alternateExtendedWithWeeks"));

        methods.put(FORMAT_JODA_ISO_PERIOD, ipm);
    }

    private JodaDateTimeFormat newDateTimeFormat(Class<?> clazz, String name)
    {
        try
        {
            return new JodaDateTimeFormat(clazz.getMethod(name));
        } catch (Exception e)
        {
            throw new RuntimeException(e);
        }

    }

    private JodaDateTimeFormat newDateTimeFormat(String name)
    {
        return newDateTimeFormat(DateTimeFormat.class, name);
    }

    private JodaDateTimeFormat newISODateTimeFormat(String name)
    {
        return newDateTimeFormat(ISODateTimeFormat.class, name);
    }

// 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;

        ipm.put(ISO_PERIOD_ALTERNATE, newISOPeriodFormat(ISO_PERIOD_ALTERNATE));
        ipm.put(ISO_PERIOD_ALTERNATE_EXTENDED, newISOPeriodFormat("alternateExtended"));
        ipm.put(ISO_PERIOD_ALTERNATE_WITH_WEEKS, newISOPeriodFormat("alternateWithWeeks"));
        ipm.put(ISO_PERIOD_ALTERNATE_EXTENDED_WITH_WEEKS, newISOPeriodFormat("alternateExtendedWithWeeks"));

        methods.put(FORMAT_JODA_ISO_PERIOD, ipm);
    }

    private JodaDateTimeFormat newDateTimeFormat(Class<?> clazz, String name)
    {
        try
        {
            return new JodaDateTimeFormat(clazz.getMethod(name));
        } catch (Exception e)
        {
            throw new RuntimeException(e);
        }

    }

    private JodaDateTimeFormat newDateTimeFormat(String name)
    {
        return newDateTimeFormat(DateTimeFormat.class, name);
    }

    private JodaDateTimeFormat newISODateTimeFormat(String name)
    {
        return newDateTimeFormat(ISODateTimeFormat.class, name);
    }

    private JodaPeriodFormat newISOPeriodFormat(String name)