Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2001-2009 Stephen Colebourne
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 package org.joda.time.chrono;
 
 
Utility class used by a few of the GJDateTimeFields.

Author(s):
Brian S O'Neill
Since:
1.0
 
 class GJLocaleSymbols {
     private static final int FAST_CACHE_SIZE = 64;
 
     private static final GJLocaleSymbols[] cFastCache = new GJLocaleSymbols[];
 
     private static WeakHashMap<LocaleGJLocaleSymbolscCache = new WeakHashMap<LocaleGJLocaleSymbols>();
 
     public static GJLocaleSymbols forLocale(Locale locale) {
         if (locale == null) {
             locale = Locale.getDefault();
         }
         int index = System.identityHashCode(locale) & ( - 1);
         GJLocaleSymbols symbols = [index];
         if (symbols != null && symbols.iLocale.get() == locale) {
             return symbols;
         }
         synchronized () {
             symbols = .get(locale);
             if (symbols == null) {
                 symbols = new GJLocaleSymbols(locale);
                 .put(localesymbols);
             }
         }
         [index] = symbols;
         return symbols;
     }
 
     private static String[] realignMonths(String[] months) {
         String[] a = new String[13];
         for (int i=1; i<13; i++) {
             a[i] = months[i - 1];
         }
         return a;
     }
 
     private static String[] realignDaysOfWeek(String[] daysOfWeek) {
         String[] a = new String[8];
         for (int i=1; i<8; i++) {
             a[i] = daysOfWeek[(i < 7) ? i + 1 : 1];
         }
         return a;
     }
 
     private static void addSymbols(TreeMap<StringIntegermapString[] symbolsInteger[] integers) {
         for (int i=symbols.length; --i>=0; ) {
             String symbol = symbols[i];
             if (symbol != null) {
                 map.put(symbolintegers[i]);
             }
         }
     }
 
     private static void addNumerals(TreeMap<StringIntegermapint startint endInteger[] integers) {
         for (int i=starti<=endi++) {
             map.put(String.valueOf(i).intern(), integers[i]);
         }
     }
 
     private static int maxLength(String[] a) {
         int max = 0;
         for (int i=a.length; --i>=0; ) {
             String s = a[i];
             if (s != null) {
                 int len = s.length();
                 if (len > max) {
                     max = len;
                }
            }
        }
        return max;
    }
    private final WeakReference<LocaleiLocale;
    private final String[] iEras;
    private final String[] iDaysOfWeek;
    private final String[] iShortDaysOfWeek;
    private final String[] iMonths;
    private final String[] iShortMonths;
    private final String[] iHalfday;
    private final TreeMap<StringIntegeriParseEras;
    private final TreeMap<StringIntegeriParseDaysOfWeek;
    private final TreeMap<StringIntegeriParseMonths;
    private final int iMaxEraLength;
    private final int iMaxDayOfWeekLength;
    private final int iMaxShortDayOfWeekLength;
    private final int iMaxMonthLength;
    private final int iMaxShortMonthLength;
    private final int iMaxHalfdayLength;

    

Parameters:
locale must not be null
    private GJLocaleSymbols(Locale locale) {
         = new WeakReference<Locale>(locale);
        
        DateFormatSymbols dfs = DateTimeUtils.getDateFormatSymbols(locale);
        
         = dfs.getEras();
         = realignDaysOfWeek(dfs.getWeekdays());
         = realignMonths(dfs.getMonths());
         = realignMonths(dfs.getShortMonths());
         = dfs.getAmPmStrings();
        Integer[] integers = new Integer[13];
        for (int i=0; i<13; i++) {
            integers[i] = Integer.valueOf(i);
        }
        addSymbols(integers);
        if ("en".equals(locale.getLanguage())) {
            // Include support for parsing "BCE" and "CE" if the language is
            // English. At some point Joda-Time will need an independent set of
            // localized symbols and not depend on java.text.DateFormatSymbols.
            .put("BCE"integers[0]);
            .put("CE"integers[1]);
        }
        addSymbols(integers);
        addSymbols(integers);
        addNumerals(, 1, 7, integers);
        addSymbols(integers);
        addSymbols(integers);
        addNumerals(, 1, 12, integers);
         = maxLength();
         = maxLength();
    }
    public String eraValueToText(int value) {
        return [value];
    }
    public int eraTextToValue(String text) {
        Integer era = .get(text);
        if (era != null) {
            return era.intValue();
        }
        throw new IllegalFieldValueException(DateTimeFieldType.era(), text);
    }
    public int getEraMaxTextLength() {
        return ;
    }
    public String monthOfYearValueToText(int value) {
        return [value];
    }
    public String monthOfYearValueToShortText(int value) {
        return [value];
    }
    public int monthOfYearTextToValue(String text) {
        Integer month = .get(text);
        if (month != null) {
            return month.intValue();
        }
        throw new IllegalFieldValueException(DateTimeFieldType.monthOfYear(), text);
    }
    public int getMonthMaxTextLength() {
        return ;
    }
    public int getMonthMaxShortTextLength() {
        return ;
    }
    public String dayOfWeekValueToText(int value) {
        return [value];
    }
    public String dayOfWeekValueToShortText(int value) {
        return [value];
    }
    public int dayOfWeekTextToValue(String text) {
        Integer day = .get(text);
        if (day != null) {
            return day.intValue();
        }
        throw new IllegalFieldValueException(DateTimeFieldType.dayOfWeek(), text);
    }
    public int getDayOfWeekMaxTextLength() {
        return ;
    }
    public int getDayOfWeekMaxShortTextLength() {
        return ;
    }
    public String halfdayValueToText(int value) {
        return [value];
    }
    public int halfdayTextToValue(String text) {
        String[] halfday = ;
        for (int i = halfday.length; --i>=0; ) {
            if (halfday[i].equalsIgnoreCase(text)) {
                return i;
            }
        }
        throw new IllegalFieldValueException(DateTimeFieldType.halfdayOfDay(), text);
    }
    public int getHalfdayMaxTextLength() {
        return ;
    }
New to GrepCode? Check out our FAQ X