|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
interface Accessor
Field binding operations implemented via reflection (ReflectionAccessor) or bytecode enhancement (EnhancedAccessor).
Normally we read the set of all secondary key fields first and then the set of all non-key fields, reading each set in order of field name. But when reading an old format record we must account for the following class evolution conversions:
To support these operations, the methods for reading fields allow reading specific ranges of fields as well as all fields. For example, all fields up to a deleted field could be read, and then all fields from the following field onward.
Field Summary | |
---|---|
static int |
MAX_FIELD_NUM
A large field value to use instead of Integer.MAX_VALUE, to work around Java JIT compiler bug when doing an (X <= Integer.MAX_VALUE) as would be done in readXxxKeyFields methods. |
Method Summary | |
---|---|
Object |
getField(Object o,
int field,
int superLevel,
boolean isSecField)
Returns the value of a given field, representing primitives as primitive wrapper objects. |
boolean |
isPriKeyFieldNullOrZero(Object o)
Returns whether the primary key field is null (for a reference type) or zero (for a primitive integer type). |
Object |
newArray(int len)
Creates a new one dimensional array of the given length, having the target class as its component type. |
Object |
newInstance()
Creates a new instance of the target class using its default constructor. |
void |
readNonKeyFields(Object o,
EntityInput input,
int startField,
int endField,
int superLevel)
Reads a range of non-key field values from the given EntityInput, reading fields in super classes first and in name order within class. |
void |
readPriKeyField(Object o,
EntityInput input)
Reads the primary key field value from the given EntityInput. |
void |
readSecKeyFields(Object o,
EntityInput input,
int startField,
int endField,
int superLevel)
Reads a range of secondary key field values from the given EntityInput, reading fields in super classes first and in name order within class. |
void |
setField(Object o,
int field,
int superLevel,
boolean isSecField,
Object value)
Changes the value of a given field, representing primitives as primitive wrapper objects. |
void |
writeNonKeyFields(Object o,
EntityOutput output)
Writes all non-key field values to the given EntityOutput, writing fields in super classes first and in name order within class. |
void |
writePriKeyField(Object o,
EntityOutput output)
Writes the primary key field value to the given EntityOutput. |
void |
writeSecKeyFields(Object o,
EntityOutput output)
Writes all secondary key field values to the given EntityOutput, writing fields in super classes first and in name order within class. |
Field Detail |
---|
static final int MAX_FIELD_NUM
Method Detail |
---|
Object newInstance()
Object newArray(int len)
Using a special method for a one dimensional array, which can be implemented by bytecode generation, is a compromise. We use reflection to create multidimensional arrays. We could in the future generate code to create arrays as they are encountered, if there is a need to avoid reflection for multidimensional arrays.
boolean isPriKeyFieldNullOrZero(Object o)
void writePriKeyField(Object o, EntityOutput output)
To write a primary key with a reference type, this method must call EntityOutput.writeKeyObject.
o
- is the object whose primary key field is to be written.output
- the output data to write to.void readPriKeyField(Object o, EntityInput input)
To read a primary key with a reference type, this method must call EntityInput.readKeyObject.
o
- is the object whose primary key field is to be read.input
- the input data to read from.void writeSecKeyFields(Object o, EntityOutput output)
o
- is the object whose secondary key fields are to be written.
If the primary key has a reference type, this method must call EntityOutput.registerPriKeyObject before writing any other fields.
output
- the output data to write to.void readSecKeyFields(Object o, EntityInput input, int startField, int endField, int superLevel)
If the primary key has a reference type, this method must call EntityInput.registerPriKeyObject before reading any other fields.
To read all fields, pass -1 for superLevel, zero for startField and MAX_FIELD_NUM for endField. Fields from super classes are read first.
To read a specific range of fields, pass a non-negative number for superLevel and the specific indices of the field range to be read in the class at that level.
o
- is the object whose secondary key fields are to be read.input
- the input data to read from.startField
- the starting field index in the range of fields to
read. To read all fields, the startField should be zero.endField
- the ending field index in the range of fields to read.
To read all fields, the endField should be MAX_FIELD_NUM.superLevel
- is a non-negative number to read the fields of the
class that is the Nth super instance; or a negative number to read
fields in all classes.void writeNonKeyFields(Object o, EntityOutput output)
o
- is the object whose non-key fields are to be written.output
- the output data to write to.void readNonKeyFields(Object o, EntityInput input, int startField, int endField, int superLevel)
To read all fields, pass -1 for superLevel, zero for startField and MAX_FIELD_NUM for endField. Fields from super classes are read first.
To read a specific range of fields, pass a non-negative number for superLevel and the specific indices of the field range to be read in the class at that level.
o
- is the object whose non-key fields are to be read.input
- the input data to read from.startField
- the starting field index in the range of fields to
read. To read all fields, the startField should be zero.endField
- the ending field index in the range of fields to read.
To read all fields, the endField should be MAX_FIELD_NUM.superLevel
- is a non-negative number to read the fields of the
class that is the Nth super instance; or a negative number to read
fields in all classes.Object getField(Object o, int field, int superLevel, boolean isSecField)
o
- is the object containing the key field.field
- is the field index.superLevel
- is a positive number to identify the field of the
class that is the Nth super instance; or zero to identify the field in
this class.isSecField
- is true for a secondary key field or false for a
non-key field.
void setField(Object o, int field, int superLevel, boolean isSecField, Object value)
o
- is the object containing the key field.field
- is the field index.superLevel
- is a positive number to identify the field of the
class that is the Nth super instance; or zero to identify the field in
this class.isSecField
- is true for a secondary key field or false for a
non-key field.value
- is the new value of the field, or null to set a reference
type field to null.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |