Attributes.java revision 678e3d534e57c24e3a75a5153cc24714ebdaad8f
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; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Attributes} class is used to store values for manifest entries. 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attribute keys are generally instances of {@code Attributes.Name}. Values 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * associated with attribute keys are of type {@code String}. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Attributes implements Cloneable, Map<Object, Object> { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Attributes} as name/value pairs. Maps the attribute names (as 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Attributes.Name}) of a JAR file manifest to arbitrary values. The 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * attribute names thus are obtained from the {@link Manifest} for 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * convenience. 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Map<Object, Object> map; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name part of the name/value pairs constituting an attribute as 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by the specification of the JAR manifest. May be composed of the 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * following ASCII signs as defined in the EBNF below: 4457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * name = alphanum *headerchar 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * headerchar = alphanum | - | _ 4857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * alphanum = {A-Z} | {a-z} | {0-9} 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class Name { 52678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson private final String name; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The class path (a main attribute). */ 55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name CLASS_PATH = new Name("Class-Path"); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The version of the manifest file (a main attribute). */ 58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name MANIFEST_VERSION = new Name("Manifest-Version"); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The main class's name (for stand-alone applications). */ 61f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name MAIN_CLASS = new Name("Main-Class"); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** Defines the signature version of the JAR file. */ 64678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SIGNATURE_VERSION = new Name("Signature-Version"); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson /** The {@code Content-Type} manifest attribute. */ 67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name CONTENT_TYPE = new Name("Content-Type"); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Sealed} manifest attribute which may have the value 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} for sealed archives. 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name SEALED = new Name("Sealed"); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Title} attribute whose value is a string 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that defines the title of the extension implementation. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_TITLE = new Name("Implementation-Title"); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Version} attribute defining the version of 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension implementation. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 85678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VERSION = new Name("Implementation-Version"); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Vendor} attribute defining the organization 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that maintains the extension implementation. 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 91678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VENDOR = new Name("Implementation-Vendor"); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Title} attribute defining the title of the 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extension specification. 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 97678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_TITLE = new Name("Specification-Title"); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Version} attribute defining the version of 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension specification. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 103678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_VERSION = new Name("Specification-Version"); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Specification-Vendor} attribute defining the organization 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that maintains the extension specification. 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 109678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name SPECIFICATION_VENDOR = new Name("Specification-Vendor"); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-List} attribute defining the extensions that are 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * needed by the applet. 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name EXTENSION_LIST = new Name("Extension-List"); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-Name} attribute which defines the unique name of 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the extension. 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final Name EXTENSION_NAME = new Name("Extension-Name"); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Extension-Installation} attribute. 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 126678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name EXTENSION_INSTALLATION = new Name("Extension-Installation"); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-Vendor-Id} attribute specifies the vendor 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of an extension implementation if the applet requires an 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation from a specific vendor. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 133678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_VENDOR_ID = new Name("Implementation-Vendor-Id"); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code Implementation-URL} attribute specifying a URL that can be 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used to obtain the most recent version of the extension if the 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * required version is not already installed. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public static final Name IMPLEMENTATION_URL = new Name("Implementation-URL"); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes static final Name NAME = new Name("Name"); 14357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 144678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson public Name(String name) { 145678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson // encoded name + "\r\n" must be <= 72 bytes; ASCII-only so byte count equals char count 146678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson if (name.isEmpty() || name.length() > Manifest.LINE_LENGTH_LIMIT - 2) { 147678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson throw new IllegalArgumentException(name); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 14957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 150678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson for (int i = 0; i < name.length(); i++) { 151678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson char ch = name.charAt(i); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || ch == '_' || ch == '-' || (ch >= '0' && ch <= '9'))) { 154678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson throw new IllegalArgumentException(name); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 15757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 158678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson this.name = name; 15957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson } 16057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson 161678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson String getName() { 16257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson return name; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public boolean equals(Object object) { 166678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson return object instanceof Name 167678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson && ((Name) object).name.equals(name); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public int hashCode() { 171678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson return name.hashCode(); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson @Override public String toString() { 175678e3d534e57c24e3a75a5153cc24714ebdaad8fJesse Wilson return name; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance. 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes() { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map = new HashMap<Object, Object>(); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance obtaining keys and values from 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter {@code attrib}. 18957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param attrib 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The attributes to obtain entries from. 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes(Attributes attrib) { 19557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson map = (Map<Object, Object>) ((HashMap) attrib.map).clone(); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs an {@code Attributes} instance with initial capacity of size 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code size}. 20157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param size 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initial size of this {@code Attributes} instance. 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Attributes(int size) { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map = new HashMap<Object, Object>(size); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes all key/value pairs from this {@code Attributes}. 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void clear() { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project map.clear(); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains the specified key. 21857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The key to search for. 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the key is found, {@code false} otherwise. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean containsKey(Object key) { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.containsKey(key); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains the specified value. 22957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value to search for. 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the value is found, {@code false} otherwise. 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean containsValue(Object value) { 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.containsValue(value); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a set containing map entries for each of the key/value pair 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contained in this {@code Attributes}. 24157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a set of Map.Entry's 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<Map.Entry<Object, Object>> entrySet() { 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.entrySet(); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value associated with the parameter key. 25057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to search for. 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return Object associated with key, or {@code null} if key does not 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exist. 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object get(Object key) { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.get(key); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this {@code Attributes} contains any keys. 26257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if one or more keys exist, {@code false} otherwise. 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isEmpty() { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.isEmpty(); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code Set} containing all the keys found in this {@code 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 27257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code Set} of all keys. 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<Object> keySet() { 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.keySet(); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Stores key/value pairs in this {@code Attributes}. 28157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to associate with value. 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value to store in this {@code Attributes}. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value being stored. 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception ClassCastException 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when key is not an {@code Attributes.Name} or value is not 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a {@code String}. 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 29157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson @SuppressWarnings("cast") 29257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson // Require cast to force ClassCastException 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object put(Object key, Object value) { 29457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson return map.put((Name) key, (String) value); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 29857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Stores all the key/value pairs in the argument in this {@code 29957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}. 30057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param attrib 30257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * the associations to store (must be of type {@code 30357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}). 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void putAll(Map<?, ?> attrib) { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (attrib == null || !(attrib instanceof Attributes)) { 307415c7497ec02890a73eb293f98f69c1f6983389bElliott Hughes throw new ClassCastException(attrib.getClass().getName() + " not an Attributes"); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.map.putAll(attrib); 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Deletes the key/value pair with key {@code key} from this {@code 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 31557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to remove. 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the values associated with the removed key, {@code null} if not 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * present. 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object remove(Object key) { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.remove(key); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the number of key/value pairs associated with this {@code 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes}. 32857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the size of this {@code Attributes}. 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size() { 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.size(); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 33657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Returns a collection of all the values present in this {@code 33757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * Attributes}. 33857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a collection of all values present. 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Collection<Object> values() { 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.values(); 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Attributes clone; 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone = (Attributes) super.clone(); 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 352fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.map = (Map<Object, Object>) ((HashMap) map).clone(); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the hash code of this {@code Attributes}. 36057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code of this object. 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.hashCode(); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines if this {@code Attributes} and the parameter {@code 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Attributes} are equal. Two {@code Attributes} instances are equal if they 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contain the same keys and values. 37257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param obj 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object with which this {@code Attributes} is compared. 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the {@code Attributes} are equal, {@code false} 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object obj) { 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == obj) { 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (obj instanceof Attributes) { 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return map.equals(((Attributes) obj).map); 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value associated with the parameter {@code Attributes.Name} 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key. 39257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to obtain the value for. 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} associated with name, or {@code null} if name 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is not a valid key. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(Attributes.Name name) { 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (String) map.get(name); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the string associated with the parameter name. 40457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to obtain the value for. 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string associated with name, or {@code null} if name is not a 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * valid key. 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValue(String name) { 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (String) map.get(new Attributes.Name(name)); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Stores the value {@code val} associated with the key {@code name} in this 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Attributes}. 41757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson * 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key to store. 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param val 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the value to store in this {@code Attributes}. 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value being stored. 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String putValue(String name, String val) { 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (String) map.put(new Attributes.Name(name), val); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 428