1f7c6911047d63bc76292f55ce538da32818dd931Jesse Wilson/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f7c6911047d63bc76292f55ce538da32818dd931Jesse Wilson * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f7c6911047d63bc76292f55ce538da32818dd931Jesse Wilson * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util.jar; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap; 224acd18f3adaaf8ac542f8fef20a4ef27bffa49f0Jesse Wilsonimport java.util.Locale; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Attributes} class is used to store values for manifest entries. 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attribute keys are generally instances of {@code Attributes.Name}. Values 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * associated with attribute keys are of type {@code String}. 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Attributes implements Cloneable, Map<Object, Object> { 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Attributes} as name/value pairs. Maps the attribute names (as 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Attributes.Name}) of a JAR file manifest to arbitrary values. The 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * attribute names thus are obtained from the {@link Manifest} for 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * convenience. 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Map<Object, Object> map; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name part of the name/value pairs constituting an attribute as 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by the specification of the JAR manifest. May be composed of the 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * following ASCII signs as defined in the EBNF below: 4557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * name = alphanum *headerchar 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * headerchar = alphanum | - | _ 4957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * alphanum = {A-Z} | {a-z} | {0-9} 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class Name { 53678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The class path (a main attribute). */ 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name CLASS_PATH = new Name("Class-Path"); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The version of the manifest file (a main attribute). */ 57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name MANIFEST_VERSION = new Name("Manifest-Version"); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The main class's name (for stand-alone applications). */ 60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name MAIN_CLASS = new Name("Main-Class"); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** Defines the signature version of the JAR file. */ 63678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SIGNATURE_VERSION = new Name("Signature-Version"); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The {@code Content-Type} manifest attribute. */ 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name CONTENT_TYPE = new Name("Content-Type"); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Sealed} manifest attribute which may have the value 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} for sealed archives. 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name SEALED = new Name("Sealed"); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Title} attribute whose value is a string 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that defines the title of the extension implementation. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_TITLE = new Name("Implementation-Title"); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Version} attribute defining the version of 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension implementation. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 84678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VERSION = new Name("Implementation-Version"); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Vendor} attribute defining the organization 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that maintains the extension implementation. 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 90678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VENDOR = new Name("Implementation-Vendor"); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Title} attribute defining the title of the 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extension specification. 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 96678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_TITLE = new Name("Specification-Title"); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Version} attribute defining the version of 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension specification. 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 102678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_VERSION = new Name("Specification-Version"); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Vendor} attribute defining the organization 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that maintains the extension specification. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 108678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_VENDOR = new Name("Specification-Vendor"); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-List} attribute defining the extensions that are 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * needed by the applet. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name EXTENSION_LIST = new Name("Extension-List"); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-Name} attribute which defines the unique name of 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension. 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name EXTENSION_NAME = new Name("Extension-Name"); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-Installation} attribute. 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 125678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name EXTENSION_INSTALLATION = new Name("Extension-Installation"); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Vendor-Id} attribute specifies the vendor 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of an extension implementation if the applet requires an 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation from a specific vendor. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 132678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VENDOR_ID = new Name("Implementation-Vendor-Id"); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-URL} attribute specifying a URL that can be 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used to obtain the most recent version of the extension if the 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * required version is not already installed. 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 139678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_URL = new Name("Implementation-URL"); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14159675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes /** 14259675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes * @hide 14359675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes */ 14459675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes public static final Name NAME = new Name("Name"); 14559675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes 14659675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes private final String name; 14757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 148678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public Name(String name) { 149678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson // encoded name + "\r\n" must be <= 72 bytes; ASCII-only so byte count equals char count 150678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson if (name.isEmpty() || name.length() > Manifest.LINE_LENGTH_LIMIT - 2) { 151678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson throw new IllegalArgumentException(name); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 15357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 154678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson for (int i = 0; i < name.length(); i++) { 155678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson char ch = name.charAt(i); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || ch == '_' || ch == '-' || (ch >= '0' && ch <= '9'))) { 158678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson throw new IllegalArgumentException(name); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 16157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 162678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson this.name = name; 16357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson } 16457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 165678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson String getName() { 16657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson return name; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public boolean equals(Object object) { 170678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson return object instanceof Name 1714acd18f3adaaf8ac542f8fef20a4ef27bffa49f0Jesse Wilson && ((Name) object).name.equalsIgnoreCase(name); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public int hashCode() { 1754acd18f3adaaf8ac542f8fef20a4ef27bffa49f0Jesse Wilson return name.toLowerCase(Locale.US).hashCode(); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 178678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public String toString() { 179678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson return name; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes() { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map = new HashMap<Object, Object>(); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance obtaining keys and values from 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter {@code attrib}. 19357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param attrib 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The attributes to obtain entries from. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes(Attributes attrib) { 19957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson map = (Map<Object, Object>) ((HashMap) attrib.map).clone(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance with initial capacity of size 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code size}. 20557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param size 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initial size of this {@code Attributes} instance. 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes(int size) { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map = new HashMap<Object, Object>(size); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes all key/value pairs from this {@code Attributes}. 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void clear() { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.clear(); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains the specified key. 22257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The key to search for. 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the key is found, {@code false} otherwise. 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean containsKey(Object key) { 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.containsKey(key); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains the specified value. 23357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value to search for. 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the value is found, {@code false} otherwise. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean containsValue(Object value) { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.containsValue(value); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a set containing map entries for each of the key/value pair 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contained in this {@code Attributes}. 24557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a set of Map.Entry's 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<Map.Entry<Object, Object>> entrySet() { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.entrySet(); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value associated with the parameter key. 25457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to search for. 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return Object associated with key, or {@code null} if key does not 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exist. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object get(Object key) { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.get(key); 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains any keys. 26657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if one or more keys exist, {@code false} otherwise. 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isEmpty() { 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.isEmpty(); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code Set} containing all the keys found in this {@code 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 27657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Set} of all keys. 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<Object> keySet() { 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.keySet(); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Stores key/value pairs in this {@code Attributes}. 28557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to associate with value. 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value to store in this {@code Attributes}. 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value being stored. 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ClassCastException 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when key is not an {@code Attributes.Name} or value is not 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a {@code String}. 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 29557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson @SuppressWarnings("cast") 29657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson // Require cast to force ClassCastException 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object put(Object key, Object value) { 29857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson return map.put((Name) key, (String) value); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 30257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Stores all the key/value pairs in the argument in this {@code 30357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}. 30457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param attrib 30657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * the associations to store (must be of type {@code 30757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}). 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void putAll(Map<?, ?> attrib) { 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (attrib == null || !(attrib instanceof Attributes)) { 311415c7497ec02890a73eb293f98f69c1f6983389bElliott Hughes throw new ClassCastException(attrib.getClass().getName() + " not an Attributes"); 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.map.putAll(attrib); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Deletes the key/value pair with key {@code key} from this {@code 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 31957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to remove. 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the values associated with the removed key, {@code null} if not 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * present. 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object remove(Object key) { 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.remove(key); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the number of key/value pairs associated with this {@code 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 33257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the size of this {@code Attributes}. 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size() { 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.size(); 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 34057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Returns a collection of all the values present in this {@code 34157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}. 34257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a collection of all values present. 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Collection<Object> values() { 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.values(); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Attributes clone; 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone = (Attributes) super.clone(); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 356fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.map = (Map<Object, Object>) ((HashMap) map).clone(); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the hash code of this {@code Attributes}. 36457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code of this object. 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.hashCode(); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines if this {@code Attributes} and the parameter {@code 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes} are equal. Two {@code Attributes} instances are equal if they 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contain the same keys and values. 37657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param obj 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object with which this {@code Attributes} is compared. 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the {@code Attributes} are equal, {@code false} 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object obj) { 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == obj) { 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (obj instanceof Attributes) { 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.equals(((Attributes) obj).map); 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value associated with the parameter {@code Attributes.Name} 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key. 39657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to obtain the value for. 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} associated with name, or {@code null} if name 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is not a valid key. 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(Attributes.Name name) { 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (String) map.get(name); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the string associated with the parameter name. 40857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to obtain the value for. 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string associated with name, or {@code null} if name is not a 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * valid key. 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(String name) { 41559675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes return getValue(new Attributes.Name(name)); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 41959675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes * Stores the value {@code value} associated with the key {@code name} in this 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Attributes}. 42157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value being stored. 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 42459675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes public String putValue(String name, String value) { 42559675dbb837c2a92352032e2ef0c8fc3305da9c8Elliott Hughes return (String) map.put(new Attributes.Name(name), value); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 428