| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package java.io; |
| |
| /** |
| * An EmulatedFieldsForLoading is an object that represents a set of emulated |
| * fields for an object being loaded. It is a concrete implementation for |
| * ObjectInputStream.GetField |
| * |
| * @see ObjectInputStream.GetField |
| * @see EmulatedFieldsForDumping |
| */ |
| class EmulatedFieldsForLoading extends ObjectInputStream.GetField { |
| |
| // The class descriptor with the declared fields the receiver emulates |
| private ObjectStreamClass streamClass; |
| |
| // The actual representation, with a more powerful API (set&get) |
| private EmulatedFields emulatedFields; |
| |
| /** |
| * Constructs a new instance of EmulatedFieldsForDumping. |
| * |
| * @param streamClass |
| * an ObjectStreamClass, defining the class for which to emulate |
| * fields. |
| */ |
| EmulatedFieldsForLoading(ObjectStreamClass streamClass) { |
| this.streamClass = streamClass; |
| emulatedFields = new EmulatedFields(streamClass.getLoadFields(), streamClass.fields()); |
| } |
| |
| /** |
| * Return a boolean indicating if the field named <code>name</code> has |
| * been assigned a value explicitly (false) or if it still holds a default |
| * value for the type (true) because it hasn't been assigned to yet. |
| * |
| * @param name |
| * A String, the name of the field to test |
| * @return <code>true</code> if the field holds it default value, |
| * <code>false</code> otherwise. |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public boolean defaulted(String name) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.defaulted(name); |
| } |
| |
| /** |
| * Return the actual EmulatedFields instance used by the receiver. We have |
| * the actual work in a separate class so that the code can be shared. The |
| * receiver has to be of a subclass of GetField. |
| * |
| * @return array of ObjectSlot the receiver represents. |
| */ |
| EmulatedFields emulatedFields() { |
| return emulatedFields; |
| } |
| |
| /** |
| * Find and return the byte value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public byte get(String name, byte defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the char value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public char get(String name, char defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the double value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public double get(String name, double defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the float value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public float get(String name, float defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the int value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public int get(String name, int defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the long value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public long get(String name, long defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the Object value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public Object get(String name, Object defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the short value of a given field named <code>name</code> |
| * in the receiver. If the field has not been assigned any value yet, the |
| * default value <code>defaultValue</code> is returned instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public short get(String name, short defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Find and return the boolean value of a given field named |
| * <code>name</code> in the receiver. If the field has not been assigned |
| * any value yet, the default value <code>defaultValue</code> is returned |
| * instead. |
| * |
| * @param name |
| * A String, the name of the field to find |
| * @param defaultValue |
| * Return value in case the field has not been assigned to yet. |
| * @return the value of the given field if it has been assigned, or the |
| * default value otherwise |
| * |
| * @throws IOException |
| * If an IO error occurs |
| * @throws IllegalArgumentException |
| * If the corresponding field can not be found. |
| */ |
| @Override |
| public boolean get(String name, boolean defaultValue) throws IOException, |
| IllegalArgumentException { |
| return emulatedFields.get(name, defaultValue); |
| } |
| |
| /** |
| * Return the class descriptor for which the emulated fields are defined. |
| * |
| * @return ObjectStreamClass The class descriptor for which the emulated |
| * fields are defined. |
| */ |
| @Override |
| public ObjectStreamClass getObjectStreamClass() { |
| return streamClass; |
| } |
| } |