001    package org.apache.myfaces.tobago.util;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one or more
005     * contributor license agreements.  See the NOTICE file distributed with
006     * this work for additional information regarding copyright ownership.
007     * The ASF licenses this file to You under the Apache License, Version 2.0
008     * (the "License"); you may not use this file except in compliance with
009     * the License.  You may obtain a copy of the License at
010     *
011     *      http://www.apache.org/licenses/LICENSE-2.0
012     *
013     * Unless required by applicable law or agreed to in writing, software
014     * distributed under the License is distributed on an "AS IS" BASIS,
015     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016     * See the License for the specific language governing permissions and
017     * limitations under the License.
018     */
019    
020    import org.apache.commons.lang.StringUtils;
021    
022    import java.util.ArrayList;
023    import java.util.List;
024    import java.util.Locale;
025    
026    public class LocaleUtil {
027    
028      private LocaleUtil() {
029      }
030    
031      public static Locale createLocale(String value) {
032        Locale locale = null;
033        String[] strings = StringUtils.split(value, "_");
034        switch (strings.length) {
035          case 1:
036            locale = new Locale(strings[0]);
037            break;
038          case 2:
039            locale = new Locale(strings[0], strings[1]);
040            break;
041          case 3:
042            locale = new Locale(strings[0], strings[1], strings[2]);
043            break;
044          default:
045            // TODO
046        }
047        return locale;
048      }
049    
050      public static List<Locale> getLocaleList(Locale locale) {
051    
052        String string = locale.toString();
053        List<Locale> locales = new ArrayList<Locale>(3);
054        locales.add(locale);
055        int underscore;
056        while ((underscore = string.lastIndexOf('_')) > 0) {
057          string = string.substring(0, underscore);
058          locales.add(createLocale(string));
059        }
060    
061        return locales;
062      }
063    }