package com.idega.block.reports.business;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.idega.block.reports.data.Report;
import com.idega.block.reports.data.ReportColumnInfo;
import com.idega.block.reports.data.ReportInfo;
import com.idega.io.MemoryFileBuffer;
import com.idega.io.MemoryOutputStream;
import com.idega.util.database.ConnectionBroker;
import com.lowagie.text.Chunk;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author <br><a href="mailto:aron@idega.is">Aron Birkir</a><br>
* @version 1.0
*/
public class StickerReport {
public StickerReport(Report report) {
}
public static MemoryFileBuffer writeStickerList(Report report,ReportInfo info){
Connection Conn = null;
Statement stmt = null;
ResultSet RS = null;
MemoryFileBuffer buffer = new MemoryFileBuffer();
MemoryOutputStream mos = new MemoryOutputStream(buffer);
try {
String[] Headers = report.getHeaders();
int Hlen = Headers.length;
String sql = report.getSQL();
//String file = realpath;
List cinfos = ReportFinder.listOfReportColumnInfo(report.getID());
ReportColumnInfo rinfo;
String[] endstrings = new String[Hlen];
Font[] fonts = new Font[Hlen];
int[] spans = new int[Hlen];
int listsize = cinfos!=null?cinfos.size():0;
for (int i = 0; i < Hlen; i++) {
if(i < listsize){
rinfo = (ReportColumnInfo)cinfos.get(i);
fonts[i] = getFont(rinfo);
/** @todo endstring fix */
endstrings[i] = "\n";
spans[i] = rinfo.getColumnSpan();
}
else{
fonts[i] = getFont(null);
endstrings[i] = "\n";
spans[i] = 1;
}
}
Conn = com.idega.util.database.ConnectionBroker.getConnection();
stmt = Conn.createStatement();
RS = stmt.executeQuery(sql);
StickerList list = new StickerList();
list.setStickerHeight(info.getHeight());
list.setStickerWidth(info.getWidth());
list.setBorder(info.getBorder());
list.setRotation(info.getLandscape());
list.setPageSize(ReportFinder.getPageSize(info.getPagesize()));
Paragraph parag;
while(RS.next()){
parag = new Paragraph();
for(int i = 1; i <= Hlen; i++){
String s = RS.getString(i);
//if(!RS.wasNull())
if(s!=null) {
parag.add(new Chunk(s,fonts[i-1]));
}
//parag.add(new Chunk(RS.getString(i),fonts[i-1]));
parag.add(endstrings[i-1]);
}
list.add(parag);
}
StickerWriter.print(mos,list);
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
// do not hide an existing exception
try {
if (RS != null) {
RS.close();
}
}
catch (SQLException resultCloseEx) {
System.err.println("[StickerReport] result set could not be closed");
resultCloseEx.printStackTrace(System.err);
}
// do not hide an existing exception
try {
if (stmt != null) {
stmt.close();
ConnectionBroker.freeConnection(Conn);
}
}
catch (SQLException statementCloseEx) {
System.err.println("[StickerReport] statement could not be closed");
statementCloseEx.printStackTrace(System.err);
}
}
buffer.setMimeType("application/pdf");
return buffer;
}
public static Paragraph getParagraph(Report report,boolean withHeaders){
return null;
}
public static Font[] getFonts(List listOfInfos,int size){
Font[] fonts = new Font[size];
int listsize = listOfInfos.size();
for (int i = 0; i < size; i++) {
if(i < listsize) {
fonts[i] = getFont((ReportColumnInfo)listOfInfos.get(i));
}
else {
fonts[i] = getFont(null);
}
}
return fonts;
}
public static Font getFont(ReportColumnInfo info){
if(info!=null){
return new Font(info.getFontFamily(),info.getFontSize(),info.getFontStyle());
}
else {
return new Font();
}
}
}