Nested Records
Overview
A @Record-annotated class can contain nested @Record-annotated member objects that will be processed by the FixedFormatManager.
When the FixedFormatManager encounters a @Field-annotated getter method whose return type is itself annotated with @Record, it formats the field as a record and does not use any configured formatter.
Example
The following shows how nested records work. First, the inner record (BasicRecord):
@Record
public class BasicRecord {
private String stringData;
private Integer integerData;
private Date dateData;
@Field(offset = 1, length = 10)
public String getStringData() {
return stringData;
}
public void setStringData(String stringData) {
this.stringData = stringData;
}
@Field(offset = 11, length = 5, align = Align.RIGHT, paddingChar = '0')
public Integer getIntegerData() {
return integerData;
}
public void setIntegerData(Integer integerData) {
this.integerData = integerData;
}
@Field(offset = 16, length = 10)
@FixedFormatPattern("yyyy-MM-dd")
public Date getDateData() {
return dateData;
}
public void setDateData(Date dateData) {
this.dateData = dateData;
}
}
Now the outer record that embeds BasicRecord:
@Record
public class NestedRecord {
private String stringData;
private BasicRecord record; //this instance is @Record annotated
@Field(offset = 1, length = 5)
public String getStringData() {
return stringData;
}
public void setStringData(String stringData) {
this.stringData = stringData;
}
@Field(offset = 6, length = 25)
public BasicRecord getRecord() {
return record;
}
public void setRecord(BasicRecord record) {
this.record = record;
}
}
A simple program showing how to access nested record data:
FixedFormatManager manager = new FixedFormatManagerImpl();
// load the string into an object representation
String text = "foo bar 001232008-10-21";
System.out.println(text);
NestedRecord record = manager.load(NestedRecord.class, text);
// print the output
System.out.println(record.getStringData());
BasicRecord nestedRecord = record.getRecord();
System.out.println(nestedRecord.getStringData());
System.out.println(nestedRecord.getIntegerData());
System.out.println(nestedRecord.getDateData());
// modify the nested record and export
nestedRecord.setStringData("fubar");
nestedRecord.setIntegerData(9876);
String exportedString = manager.export(record);
System.out.println(exportedString);
The output looks like this:
foo bar 001232008-10-21
foo
bar
123
Tue Oct 21 00:00:00 CEST 2008
foo fubar 098762008-10-21
| Home | Usage | Annotations | Examples |