org.primeframework.mvc.control.form.CountrySelect.java Source code

Java tutorial

Introduction

Here is the source code for org.primeframework.mvc.control.form.CountrySelect.java

Source

/*
 * Copyright (c) 2001-2007, Inversoft Inc., All Rights Reserved
 *
 * 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.primeframework.mvc.control.form;

import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;

import org.apache.commons.lang3.StringUtils;
import org.primeframework.mvc.control.annotation.ControlAttribute;
import org.primeframework.mvc.control.annotation.ControlAttributes;

/**
 * This class is the control for a select box.
 *
 * @author Brian Pontarelli
 */
@ControlAttributes(required = { @ControlAttribute(name = "name") }, optional = {
        @ControlAttribute(name = "disabled", types = { boolean.class, Boolean.class }),
        @ControlAttribute(name = "includeBlank", types = { boolean.class, Boolean.class }),
        @ControlAttribute(name = "multiple", types = { boolean.class, Boolean.class }),
        @ControlAttribute(name = "readonly", types = { boolean.class, Boolean.class }),
        @ControlAttribute(name = "required", types = { boolean.class, Boolean.class }),
        @ControlAttribute(name = "size", types = { int.class, Number.class }),
        @ControlAttribute(name = "tabindex", types = { int.class, Number.class }) })
public class CountrySelect extends Select {
    /**
     * Adds the countries Map and then calls super.
     */
    @Override
    protected Map<String, Object> makeParameters() {
        LinkedHashMap<String, String> countries = new LinkedHashMap<String, String>();

        if (attributes.containsKey("includeBlank") && (Boolean) attributes.get("includeBlank")) {
            countries.put("", "");
        }

        String preferred = (String) attributes.get("preferredCodes");
        if (preferred != null) {
            String[] parts = preferred.split(",");
            for (String part : parts) {
                Locale locale = new Locale("", part);
                countries.put(part, locale.getDisplayCountry(locale));
            }
        }

        SortedSet<Locale> alphabetical = new TreeSet<Locale>(new LocaleComparator(locale));
        Locale[] locales = Locale.getAvailableLocales();
        for (Locale locale : locales) {
            if (StringUtils.isNotBlank(locale.getCountry())
                    && StringUtils.isNotBlank(locale.getDisplayCountry(locale))) {
                alphabetical.add(locale);
            }
        }

        for (Locale locale : alphabetical) {
            if (!countries.containsKey(locale.getCountry())) {
                countries.put(locale.getCountry(), locale.getDisplayCountry(this.locale));
            }
        }

        attributes.put("items", countries);

        return super.makeParameters();
    }

    public static class LocaleComparator implements Comparator<Locale> {
        private Locale displayLocale;

        public LocaleComparator(Locale displayLocale) {
            this.displayLocale = displayLocale;
        }

        public int compare(Locale l1, Locale l2) {
            return l1.getDisplayCountry(displayLocale).compareTo(l2.getDisplayCountry(displayLocale));
        }
    }
}