1 /* 2 * Copyright (C) 2010 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.i18n.addressinput; 18 19 import java.util.HashMap; 20 import java.util.Map; 21 22 /** 23 * Enumerates all the data fields found in the JSON-format address property data that are used by 24 * the Android Address Input Widget. 25 */ 26 enum AddressDataKey { 27 /** 28 * Identifies the countries for which data is provided. 29 */ 30 COUNTRIES, 31 /** 32 * The standard format string. This identifies which fields can be used in the address, along 33 * with their order. This also carries additional information for use in formatting the fields 34 * into multiple lines. This is also used to indicate which fields should _not_ be used for an 35 * address. 36 */ 37 FMT, 38 /** 39 * The unique ID of the region, in the form of a path from parent IDs to the key. 40 */ 41 ID, 42 /** 43 * The key of the region, unique to its parent. If there is an accepted abbreviation for this 44 * region, then the key will be set to this and name will be set to the local name for this 45 * region. If there is no accepted abbreviation, then this key will be the local name and there 46 * will be no local name specified. This value must be present. 47 */ 48 KEY, 49 /** 50 * The language of this data, if known. 51 */ 52 LANG, 53 /** 54 * The latin format string {@link #FMT} used when a country defines an alternative format for 55 * use with the latin script, such as in China. 56 */ 57 LFMT, 58 /** 59 * Indicates the type of the name used for the locality (city) field. 60 */ 61 LOCALITY_NAME_TYPE, 62 /** 63 * Indicates which fields must be present in a valid address. 64 */ 65 REQUIRE, 66 /** 67 * Indicates the type of the name used for the state (administrative area) field. 68 */ 69 STATE_NAME_TYPE, 70 /** 71 * Encodes the {@link #KEY} value of all the children of this region. 72 */ 73 SUB_KEYS, 74 /** 75 * Encodes the transliterated latin name value of all the children of this region, if the local 76 * names are not in latin script already. 77 */ 78 SUB_LNAMES, 79 /** 80 * Indicates, for each child of this region, whether that child has additional children. 81 */ 82 SUB_MORES, 83 /** 84 * Encodes the local name value of all the children of this region. 85 */ 86 SUB_NAMES, 87 /** 88 * Encodes the {@link #ZIP} value for the subtree beneath this region. 89 */ 90 XZIP, 91 /** 92 * Encodes the postal code pattern if at the country level, and the postal code prefix if at a 93 * level below country. 94 */ 95 ZIP, 96 /** 97 * Indicates the type of the name used for the ZIP (postal code) field. 98 */ 99 ZIP_NAME_TYPE; 100 101 /** 102 * Returns a field based on its keyname (value in the JSON-format file), or null if no field 103 * matches. 104 */ 105 static AddressDataKey get(String keyname) { 106 return ADDRESS_KEY_NAME_MAP.get(keyname.toLowerCase()); 107 } 108 109 private static final Map<String, AddressDataKey> ADDRESS_KEY_NAME_MAP = 110 new HashMap<String, AddressDataKey>(); 111 112 static { 113 // Populates the map of enums against their lower-cased string values for easy look-up. 114 for (AddressDataKey field : values()) { 115 ADDRESS_KEY_NAME_MAP.put(field.toString().toLowerCase(), field); 116 } 117 } 118 } 119