package net.java.cargotracker.interfaces.handling.file;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.batch.api.chunk.listener.SkipReadListener;
import javax.batch.runtime.context.JobContext;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.inject.Named;
@Dependent
@Named("LineParseExceptionListener")
public class LineParseExceptionListener implements SkipReadListener {
private static final String FAILED_DIRECTORY = "failed_directory";
private static final Logger logger = Logger.getLogger(
LineParseExceptionListener.class.getName());
@Inject
private JobContext jobContext;
@Override
public void onSkipReadItem(Exception e) throws Exception {
File failedDirectory = new File(jobContext.getProperties().getProperty(
FAILED_DIRECTORY));
if (!failedDirectory.exists()) {
failedDirectory.mkdirs();
}
EventLineParseException parseException = (EventLineParseException) e;
logger.log(Level.WARNING, "Problem parsing event file line",
parseException);
try (PrintWriter failed = new PrintWriter(new BufferedWriter(new FileWriter(
new File(failedDirectory,
"failed_" + jobContext.getJobName()
+ "_" + jobContext.getInstanceId()
+ ".csv"), true)))) {
failed.println(parseException.getLine());
}
}
}