1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 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 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 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.io; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An EmulatedFields is an object that represents a set of emulated fields for 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an object being dumped or loaded. It allows objects to be dumped with a shape 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * different than the fields they were declared to have. 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see ObjectInputStream.GetField 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see ObjectOutputStream.PutField 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see EmulatedFieldsForLoading 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see EmulatedFieldsForDumping 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass EmulatedFields { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // A slot is a field plus its value 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class ObjectSlot { 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Field descriptor 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectStreamField field; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Actual value this emulated field holds 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object fieldValue; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // If this field has a default value (true) or something has been 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // assigned (false) 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean defaulted = true; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the descriptor for this emulated field. 47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field descriptor 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ObjectStreamField getField() { 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return field; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the value held by this emulated field. 56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the field value 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getFieldValue() { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return fieldValue; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The collection of slots the receiver represents 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private ObjectSlot[] slotsToSerialize; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private ObjectStreamField[] declaredFields; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of EmulatedFields. 71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fields 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an array of ObjectStreamFields, which describe the fields to 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be emulated (names, types, etc). 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param declared 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an array of ObjectStreamFields, which describe the declared 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fields. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 7928eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes public EmulatedFields(ObjectStreamField[] fields, ObjectStreamField[] declared) { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // We assume the slots are already sorted in the right shape for dumping 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buildSlots(fields); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project declaredFields = declared; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Build emulated slots that correspond to emulated fields. A slot is a 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field descriptor (ObjectStreamField) plus the actual value it holds. 88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fields 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an array of ObjectStreamField, which describe the fields to be 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * emulated (names, types, etc). 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void buildSlots(ObjectStreamField[] fields) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slotsToSerialize = new ObjectSlot[fields.length]; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < fields.length; i++) { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectSlot s = new ObjectSlot(); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slotsToSerialize[i] = s; 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.field = fields[i]; 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // We assume the slots are already sorted in the right shape for dumping 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Returns {@code true} indicating the field called {@code name} has not had 105f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * a value explicitly assigned and that it still holds a default value for 106f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * its type, or {@code false} indicating that the field named has been 107f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * assigned a value explicitly. 108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 110f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to test. 111f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @return {@code true} if {@code name} still holds its default value, 112f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code false} otherwise 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 115f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if {@code name} is {@code null} 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean defaulted(String name) throws IllegalArgumentException { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectSlot slot = findSlot(name, null); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (slot == null) { 120f8ba29b25f7fc2ef93ab39a8ac436c94d55b3984Elliott Hughes throw new IllegalArgumentException("no field '" + name + "'"); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot.defaulted; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 126f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns an ObjectSlot that corresponds to a field named {@code 127f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * fieldName} and type {@code fieldType}. If the field type {@code 128f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * fieldType} corresponds to a primitive type, the field type has to match 129f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * exactly or {@code null} is returned. If the field type {@code fieldType} 130f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * corresponds to an object type, the field type has to be compatible in 131f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * terms of assignment, or null is returned. If {@code fieldType} is {@code 132f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * null}, no such compatibility checking is performed and the slot is 133f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * returned. 134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fieldName 136f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fieldType 138f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the type of the field. This will be used to test 139f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * compatibility. If {@code null}, no testing is done, the 140f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * corresponding slot is returned. 141f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @return the object slot, or {@code null} if there is no field with that 142f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * name, or no compatible field (relative to {@code fieldType}) 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private ObjectSlot findSlot(String fieldName, Class<?> fieldType) { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean isPrimitive = fieldType != null && fieldType.isPrimitive(); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < slotsToSerialize.length; i++) { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectSlot slot = slotsToSerialize[i]; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (slot.field.getName().equals(fieldName)) { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isPrimitive) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Looking for a primitive type field. Types must match 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // *exactly* 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (slot.field.getType() == fieldType) { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Looking for a non-primitive type field. 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (fieldType == null) { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot; // Null means we take anything 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Types must be compatible (assignment) 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (slot.field.getType().isAssignableFrom(fieldType)) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (declaredFields != null) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < declaredFields.length; i++) { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectStreamField field = declaredFields[i]; 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field.getName().equals(fieldName)) { 17228eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes if (isPrimitive ? fieldType == field.getType() : fieldType == null || 17328eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes field.getType().isAssignableFrom(fieldType)) { 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectSlot slot = new ObjectSlot(); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.field = field; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = true; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 185e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes private ObjectSlot findMandatorySlot(String name, Class<?> type) { 186e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findSlot(name, type); 187e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes if (slot == null || (type == null && slot.field.getType().isPrimitive())) { 188e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes throw new IllegalArgumentException("no field '" + name + "' of type " + type); 189e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes } 190e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot; 191e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes } 192e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 194f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the byte value of a given field named {@code name} 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the receiver. If the field has not been assigned any value yet, the 196f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 197f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 199f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 201f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 203f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 204f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 206f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 208e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public byte get(String name, byte defaultValue) throws IllegalArgumentException { 209e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, byte.class); 210e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Byte) slot.fieldValue).byteValue(); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 214f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the char value of a given field named {@code name} in the 215f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 216f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value {@code defaultValue} is returned instead. 217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 219f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 221f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 223f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 226f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 228e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public char get(String name, char defaultValue) throws IllegalArgumentException { 229e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, char.class); 230e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Character) slot.fieldValue).charValue(); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 234f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the double value of a given field named {@code name} 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the receiver. If the field has not been assigned any value yet, the 236f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 239f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 241f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 243f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 246f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 248e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public double get(String name, double defaultValue) throws IllegalArgumentException { 249e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, double.class); 250e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Double) slot.fieldValue).doubleValue(); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 254f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the float value of a given field named {@code name} in 255f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 256f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 257f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 259f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 261f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 263f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 266f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 268e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public float get(String name, float defaultValue) throws IllegalArgumentException { 269e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, float.class); 270e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Float) slot.fieldValue).floatValue(); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 274f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the int value of a given field named {@code name} in the 275f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 276f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value {@code defaultValue} is returned instead. 277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 279f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 281f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 283f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 286f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 288e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public int get(String name, int defaultValue) throws IllegalArgumentException { 289e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, int.class); 290e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Integer) slot.fieldValue).intValue(); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 294f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the long value of a given field named {@code name} in the 295f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. If the field has not been assigned any value yet, the default 296f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value {@code defaultValue} is returned instead. 297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 299f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 301f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 303f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 306f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 308e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public long get(String name, long defaultValue) throws IllegalArgumentException { 309e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, long.class); 310e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Long) slot.fieldValue).longValue(); 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 314f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the Object value of a given field named {@code name} in 315f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 316f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 317f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 319f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 321f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 323f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 326f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 328e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public Object get(String name, Object defaultValue) throws IllegalArgumentException { 329e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, null); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slot.defaulted ? defaultValue : slot.fieldValue; 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 334f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the short value of a given field named {@code name} in 335f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 336f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 339f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 341f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 343f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 344f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 346f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 348e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public short get(String name, short defaultValue) throws IllegalArgumentException { 349e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, short.class); 350e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Short) slot.fieldValue).shortValue(); 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 354f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Finds and returns the boolean value of a given field named {@code name} in 355f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the receiver. If the field has not been assigned any value yet, the 356f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * default value {@code defaultValue} is returned instead. 357f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 359f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to find. 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param defaultValue 361f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * return value in case the field has not been assigned to yet. 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the value of the given field if it has been assigned, the default 363f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * value otherwise. 364f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 366f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 368e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes public boolean get(String name, boolean defaultValue) throws IllegalArgumentException { 369e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, boolean.class); 370e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes return slot.defaulted ? defaultValue : ((Boolean) slot.fieldValue).booleanValue(); 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 374f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the byte value of a given field named {@code name} in the 375f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 376f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 378f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 380f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 383f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, byte value) throws IllegalArgumentException { 386e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, byte.class); 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Byte.valueOf(value); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 392f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the char value of a given field named {@code name} in the 393f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 396f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 398f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 401f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, char value) throws IllegalArgumentException { 404e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, char.class); 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Character.valueOf(value); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 410f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the double value of a given field named {@code name} in the 411f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 414f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 416f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 419f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, double value) throws IllegalArgumentException { 422e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, double.class); 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Double.valueOf(value); 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 428f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the float value of a given field named {@code name} in the 429f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 430f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 432f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 434f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 435f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 437f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, float value) throws IllegalArgumentException { 440e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, float.class); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Float.valueOf(value); 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 446f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the int value of a given field named {@code name} in the 447f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 448f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 450f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 452f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 453f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 455f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, int value) throws IllegalArgumentException { 458e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, int.class); 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Integer.valueOf(value); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 464f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the long value of a given field named {@code name} in the 465f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 466f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 468f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 470f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 471f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 473f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, long value) throws IllegalArgumentException { 476e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, long.class); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Long.valueOf(value); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 482f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the Object value of a given field named {@code name} in the 483f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 484f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 486f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 488f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 489f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 491f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, Object value) throws IllegalArgumentException { 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> valueClass = null; 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (value != null) { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project valueClass = value.getClass(); 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 498e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, valueClass); 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = value; 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 504f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the short value of a given field named {@code name} in the 505f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 506f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 508f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 510f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 511f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 513f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, short value) throws IllegalArgumentException { 516e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, short.class); 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Short.valueOf(value); 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 522f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * Find and set the boolean value of a given field named {@code name} in the 523f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * receiver. 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 526f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * the name of the field to set. 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 528f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * new value for the field. 529f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 531f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the corresponding field can not be found. 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void put(String name, boolean value) throws IllegalArgumentException { 534e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes ObjectSlot slot = findMandatorySlot(name, boolean.class); 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.fieldValue = Boolean.valueOf(value); 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project slot.defaulted = false; // No longer default value 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Return the array of ObjectSlot the receiver represents. 541f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return array of ObjectSlot the receiver represents. 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ObjectSlot[] slots() { 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return slotsToSerialize; 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 548