1607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com/*
2607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * Copyright (C) 2010 Google Inc.
3607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com *
4607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * Licensed under the Apache License, Version 2.0 (the "License");
5607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * you may not use this file except in compliance with the License.
6607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * You may obtain a copy of the License at
7607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com *
8607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * http://www.apache.org/licenses/LICENSE-2.0
9607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com *
10607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * Unless required by applicable law or agreed to in writing, software
11607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * distributed under the License is distributed on an "AS IS" BASIS,
12607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * See the License for the specific language governing permissions and
14607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * limitations under the License.
158a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com */
16607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
17607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.compackage com.android.i18n.addressinput;
18607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
19607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com/**
20607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com * A simple class to hold region data. Instances of this class are immutable.
21607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com */
22607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.comclass RegionData {
23607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
24607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    private String mKey;
25607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    private String mName;
26607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
27607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    /**
28607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * Create a new RegionData object.
29607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
30607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    private RegionData() {
31607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
32607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
33607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    /**
34607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * Copy constructor. data should not be null.
35607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     *
36607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * @param data A populated instance of RegionData
37607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
38607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    private RegionData(RegionData data) {
39607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        Util.checkNotNull(data);
40607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        mKey = data.mKey;
41607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        mName = data.mName;
42607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
43607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
44607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    /**
458a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com     * Gets the key of the region. For example, California's key is "CA".
46607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
47607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    String getKey() {
48607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return mKey;
498a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
508a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
518a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    /**
528a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com     * Gets the name. Returns null if not specified.
53607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
54607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    String getName() {
55607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return mName;
56607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
57607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
58607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    /**
59607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * Gets the best display name. Returns the name if this is not null, otherwise the key.
60607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
61607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    public String getDisplayName() {
62607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return (mName != null) ? mName : mKey;
63607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
64607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
65607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    /**
66607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * Checks if the input subkey is the name (in Latin or local script) of the region. Returns
67607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * false if subkey is not a valid name for the region, or the input subkey is null.
68607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     *
69607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * @param subkey a string that refers to the name of a geo location. Like "California", "CA", or
70607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     *               "Mountain View". Names in the local script are also supported.
71607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
72607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    boolean isValidName(String subkey) {
73607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        if (subkey == null) {
74607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            return false;
75607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
76607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        if (subkey.equalsIgnoreCase(mKey) || subkey.equalsIgnoreCase(mName)) {
77607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            return true;
78607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
79607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        return false;
80607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
81607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
8297cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    /**
83607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * A builder class to facilitate the creation of RegionData objects.
84607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     */
85607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    static class Builder {
86607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        RegionData mData = new RegionData();
87607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
88607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        RegionData build() {
89607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            return new RegionData(mData);
90607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
91607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
92607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        Builder setKey(String key) {
93607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            Util.checkNotNull(key, "Key should not be null.");
94607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            mData.mKey = key;
95607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            return this;
96607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
97607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
98607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        /**
99607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com         * Sets name of the region. For example, "California". If the name is an empty string, sets
100607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com         * it to null.
101607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com         */
102607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        Builder setName(String name) {
103607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            mData.mName = Util.trimToNull(name);
104607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com            return this;
105607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        }
106607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    }
107607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com}
108607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com