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.io.Serializable; import java.util.List; import javax.batch.api.chunk.AbstractItemWriter; import javax.batch.runtime.context.JobContext; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.inject.Named; import javax.transaction.Transactional; import net.java.cargotracker.application.ApplicationEvents; import net.java.cargotracker.interfaces.handling.HandlingEventRegistrationAttempt; @Dependent @Named("EventItemWriter") public class EventItemWriter extends AbstractItemWriter { private static final String ARCHIVE_DIRECTORY = "archive_directory"; @Inject private JobContext jobContext; @Inject private ApplicationEvents applicationEvents; @Override public void open(Serializable checkpoint) throws Exception { File archiveDirectory = new File(jobContext.getProperties().getProperty(ARCHIVE_DIRECTORY)); if (!archiveDirectory.exists()) { archiveDirectory.mkdirs(); } } @Override @Transactional public void writeItems(List<Object> items) throws Exception { try (PrintWriter archive = new PrintWriter(new BufferedWriter(new FileWriter( new File(jobContext.getProperties().getProperty(ARCHIVE_DIRECTORY) + "/archive_" + jobContext.getJobName() + "_" + jobContext.getInstanceId() + ".csv"), true)))) { for (Object item : items) { HandlingEventRegistrationAttempt attempt = (HandlingEventRegistrationAttempt) item; applicationEvents.receivedHandlingEventRegistrationAttempt(attempt); archive.println(attempt.getRegistrationTime() + "," + attempt.getCompletionTime() + "," + attempt.getTrackingId() + "," + attempt.getVoyageNumber() + "," + attempt.getUnLocode() + "," + attempt.getType()); } } } }