/*
* 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;
}
}