001    /**
002     * Implements the Cold Fusion Function monthasstring
003     */
004    package railo.runtime.functions.string;
005    
006    import java.text.DateFormatSymbols;
007    import java.util.Calendar;
008    import java.util.Date;
009    import java.util.Locale;
010    
011    import railo.commons.date.JREDateTimeUtil;
012    import railo.runtime.PageContext;
013    import railo.runtime.exp.ExpressionException;
014    import railo.runtime.ext.function.Function;
015    import railo.runtime.i18n.LocaleFactory;
016    
017    public final class MonthAsString implements Function {
018            
019            private static final int MONTH=1000*60*60*24*32;
020            private static Date[] dates=new Date[12];
021            static {
022                    Calendar cal=JREDateTimeUtil.getCalendar();
023                    cal.setTimeInMillis(0);
024                    dates[0]=cal.getTime();
025                    for(int i=1;i<12;i++) {
026                            cal.add(Calendar.MONTH,1);
027                            dates[i]=cal.getTime();
028                    }
029            }
030    
031            public static String call(PageContext pc , double month) throws ExpressionException {
032                    return call(month, pc.getLocale());
033            }
034            public static String call(PageContext pc , double month, String strLocale) throws ExpressionException {
035                    return call(month, strLocale==null?pc.getLocale():LocaleFactory.getLocale(strLocale));
036            }
037            
038            private static String call(double month, Locale locale) throws ExpressionException {
039                    int m=(int)month;
040                    if(m>=1 && m<=12) {
041                            return new DateFormatSymbols(locale).getMonths()[m-1];
042                    }
043                    throw new ExpressionException("invalid month definition in function monthAsString, must be between 1 and 12 now ["+month+"]");
044                    
045            }
046    }