while ((line = br.readLine()) != null) {
String[] records = unpackLine(line);
boolean isMatch = false;
for (CaseHolder caseHolder : cases.values()) {
CSVCase csvCase = caseHolder.getCsvCase();
isMatch = false;
Pattern p = Pattern.compile(csvCase.regexp());
Matcher match;
switch (csvCase.matchType()) {
case LINE:
match = p.matcher(line);
break;
case FIELD:
match = p.matcher(records[csvCase.fieldToMatch()]);
break;
default:
LOGGER.fatal("Match type not found: " + csvCase.matchType());
throw new RuntimeException("Match time not found: " + csvCase.matchType());
}
Method method = caseHolder.getMethod();
LOGGER.info(method.getName() + ": " + csvCase.description());
if (match.matches()) {
isMatch = true;
LOGGER.info(" -> match!");
LOGGER.info(" -> LINE: " + line);
LOGGER.trace(" -> IN: " + Arrays.toString(records));
LineHolder lh = new LineHolder(line, records);
String[] outFields = (String[]) method.invoke(processor, lh);
LOGGER.trace(" -> OUT: " + Arrays.toString(records));
String outLine = packLine(outFields) + "\n";
switch (csvCase.type()) {
case FILE:
streams.get(csvCase.caseNum()).write(outLine.getBytes());
break;
case SYSTEM_ERR:
System.err.println(outLine);
break;
case SYSTEM_OUT:
System.out.println(outLine);
break;
default:
LOGGER.fatal("File output not valid: " + csvCase.type());
}
} else {
LOGGER.info(" -> NOT match!");
}
}
if (!isMatch) {
Method method = defaultMethod.getMethod();
CSVCase csvCase = defaultMethod.getCsvCase();
LOGGER.info(" -> default match!");
LOGGER.info(" -> LINE: " + line);
LOGGER.trace(" -> IN: " + Arrays.toString(records));
LineHolder lh = new LineHolder(line, records);
String[] outFields = (String[]) method.invoke(processor, lh);
LOGGER.trace(" -> OUT: " + Arrays.toString(records));
String outLine = packLine(outFields) + "\n";
switch (csvCase.type()) {
case FILE:
streams.get(csvCase.caseNum()).write(outLine.getBytes());
break;
case SYSTEM_ERR:
System.err.println(outLine);
break;
case SYSTEM_OUT:
System.out.println(outLine);
break;
default:
LOGGER.fatal("File output not valid: " + csvCase.type());
}
}
}
br.close();