package com.fcpb.integration.batch.advice.dao;
import com.fcpb.integration.batch.model.Order;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.item.AbstractItemWriter;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.DisposableBean;
public class OrderWriter extends AbstractItemWriter implements DisposableBean {
private static Log log = LogFactory.getLog(OrderWriter.class);
private ItemWriter itemWriter;
private String separator = "\t";
private volatile boolean opened = false;
public void write(Object data) throws Exception {
log.debug("Order Writer is getting invoked");
log.debug("Item Writer is"+itemWriter);
Order order = (Order)data;
log.debug("Order Id is"+order.getOrderId());
log.debug("Order date is"+order.getOrderDate());
if (!opened) {
open(new ExecutionContext());
}
String line = "" + order.getOrderId() + separator
+ order.getOrderDate();
log.debug("This line is"+line);
itemWriter.clear();
itemWriter.write(line);
itemWriter.flush();
}
public void setSeparator(String separator) {
this.separator = separator;
}
public void setItemWriter(ItemWriter itemWriter) {
this.itemWriter = itemWriter;
}
public void open(ExecutionContext executionContext) throws Exception {
if (itemWriter instanceof ItemStream) {
log.debug("Calling execution context");
((ItemStream) itemWriter).open(executionContext);
}
opened = true;
}
public void close() throws Exception {
if (itemWriter instanceof ItemStream) {
((ItemStream) itemWriter).close(null);
}
}
public void destroy() throws Exception {
close();
}
}