package br.com.cafebinario.file.implementation;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSetMetaData;
import java.util.Enumeration;
import org.apache.log4j.Logger;
import br.com.cafebinario.exception.IntegrationArchiveException;
import br.com.cafebinario.file.interfaces.IIntegrationArchive;
import br.com.cafebinario.integration.IIntegracao;
import br.com.cafebinario.properties.AppProperties;
import br.com.cafebinario.transport.GenericTO;
import br.com.cafebinario.transport.GenericVO;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class PdfIntegrationArchive implements IIntegrationArchive {
private static Logger LOG = Logger.getLogger(PdfIntegrationArchive.class);
private Document document = null;
private PdfPTable pdfTable = null;
private String fileName = "";
private PdfWriter pdfWriter;
private IIntegracao integracao = null;
protected AppProperties properties = AppProperties.instanceOf();
public void finalize() {
System.out.println("Close PDF Document");
document.close();
}
@Override
public void discharge() throws IntegrationArchiveException {
// TODO Auto-generated method stub
}
@Override
public String getFileName() {
return fileName;
}
@Override
public String initialize(IIntegracao integracao) throws IOException {
this.integracao = integracao;
this.fileName = integracao.getFileName();
LOG.debug("OUTPUT_FILE=" + fileName);
try {
document = new Document();
pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(
this.fileName));
document.open();
createTable(getCollumn(integracao.getData()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
return fileName;
}
@Override
public String initializeOrder(IIntegracao integracao) throws IOException {
return this.initialize(integracao);
}
@Override
public String write() throws IntegrationArchiveException {
GenericTO to = this.integracao.getData();
try {
int i = 1;
for (GenericVO genericVO : to) {
write(genericVO, i++);
}
document.add(pdfTable);
} catch (IOException e) {
throw new IntegrationArchiveException(
"erro ao tentar criar documento PDF. ", e);
} catch (DocumentException e) {
throw new IntegrationArchiveException(
"erro ao tentar criar documento PDF. ", e);
}
return this.fileName;
}
private String[] getCollumn(GenericTO to) {
return properties.getProperty("COLUMNS_HEADER").split(",");
}
private PdfPTable createTable(String[] collumns) throws DocumentException {
PdfPTable table = new PdfPTable(collumns.length);
for (String collumn : collumns) {
PdfPCell cell = new PdfPCell(new Phrase(collumn));
cell.setColspan(3);
table.addCell(cell);
}
this.pdfTable = table;
return table;
}
@Override
public void write(GenericVO vo, int collNumber)
throws IntegrationArchiveException, IOException {
Enumeration<Integer> keys = vo.keys();
while (keys.hasMoreElements()) {
Integer key = keys.nextElement();
String value = vo.get(key);
pdfTable.addCell(value);
}
//pdfTable.completeRow();
}
@Override
public String writeRecord(GenericVO vo, int collNumber, ResultSetMetaData mt)
throws IntegrationArchiveException {
return null;
}
}