@Override
protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
// Initialize the primary (body) model factory ignoring header and footer model classes
PackageScanFilter defaultRecordScanFilter = new PackageScanFilter() {
@Override
public boolean matches(Class<?> type) {
FixedLengthRecord record = type.getAnnotation(FixedLengthRecord.class);
return record != null && !record.isFooter() && !record.isHeader();
}
};
BindyFixedLengthFactory factory;
if (getClassType() != null) {
factory = new BindyFixedLengthFactory(resolver, defaultRecordScanFilter, getClassType());
} else {
factory = new BindyFixedLengthFactory(resolver, defaultRecordScanFilter, getPackages());
}
// Optionally initialize the header factory... using header model classes
if (factory.hasHeader()) {
PackageScanFilter headerScanFilter = new PackageScanFilter() {
@Override
public boolean matches(Class<?> type) {
FixedLengthRecord record = type.getAnnotation(FixedLengthRecord.class);
return record != null && record.isHeader();
}
};
if (getClassType() != null) {
this.headerFactory = new BindyFixedLengthFactory(resolver, headerScanFilter, getClassType());
} else {
this.headerFactory = new BindyFixedLengthFactory(resolver, headerScanFilter, getPackages());
}
}
// Optionally initialize the footer factory... using footer model classes
if (factory.hasFooter()) {
PackageScanFilter footerScanFilter = new PackageScanFilter() {
@Override
public boolean matches(Class<?> type) {
FixedLengthRecord record = type.getAnnotation(FixedLengthRecord.class);
return record != null && record.isFooter();
}