A transformer of headers used in
Nested attributes. Used to reassign header names/indexes of
attributes of a
Nested class which is useful when multiple
Nested attributes of the same type are
used within a class. For example, consider the
Wheel class defined as:
public class Wheel {
@Parsed
String brand;
@Parsed
int miles;
}
And a
Car which has four
Wheels:
public static class Car {
@Nested
Wheel frontLeft;
@Nested
Wheel frontRight;
@Nested
Wheel rearLeft;
@Nested
Wheel rearRight;
}
The
HeaderTransformer allows us to "rename" the attributes of each different
Wheel of the
Car
so that input columns can be assigned to the appropriate places.
Assuming an input with headers
frontLeftWheelBrand,frontLeftWheelMiles,frontRightWheelBrand,frontRightWheelMiles,rearLeftWheelBrand,rearLeftWheelMiles,rearRightWheelBrand,rearRightWheelMiles,
a
HeaderTransformer can be created like this to assign a prefix in front of the header names derived from
Wheel (originally just "brand" and "miles"):
public static class PrefixTransformer extends HeaderTransformer {
private String prefix;
public PrefixTransformer(String... args) {
prefix = args[0];
}
@Override
public String transformName(Field field, String name) {
return prefix + Character.toUpperCase(name.charAt(0)) + name.substring(1);
}
}
This allows us to to define the
Car class as:
public static class Car {
@Nested(headerTransformer = PrefixTransformer.class, args = "frontLeftWheel")
Wheel frontLeft;
@Nested(headerTransformer = PrefixTransformer.class, args = "frontRightWheel")
Wheel frontRight;
@Nested(headerTransformer = PrefixTransformer.class, args = "rearLeftWheel")
Wheel rearLeft;
@Nested(headerTransformer = PrefixTransformer.class, args = "rearRightWheel")
Wheel rearRight;
}
The above annotation will prefix the
frontLeft fields ("brand" and "miles") with "frontLeftWheel", effectively
forming the header "frontLeftWheelBrand" and "frontLeftWheelMiles", which will match the input headers and assign the
correct values to the correct
Wheel instance.
IMPORTANT It is mandatory to define a constructor that takes
String[] as a parameter. The actual
parameter values come from
Nested.args() to allow custom configuration of the concrete
HeaderTransformer instance.