/**
* Licensed under the Artistic License; you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://displaytag.sourceforge.net/license.html
*
* THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.displaytag.sample.decorators;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chunk;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Table;
/**
* Same idea implemented in ItextTableWriter applied to decorators.
*
* @see org.displaytag.render.ItextTableWriter
* @author Jorge L. Barroso
* @version $Revision$ ($Author$)
*/
public class ItextTotalWrapper extends TotalWrapperTemplate implements
org.displaytag.render.ItextTableWriter.ItextDecorator {
/**
* The iText table in which the totals are rendered.
*/
private Table table;
/**
* The iText font used to render the totals.
*/
private Font font;
/**
* Set the table required to render the totals line.
*
* @param table
* The table required to render the totals line.
* @see org.displaytag.decorator.itext.DecoratesItext#setTable(com.lowagie.text.Table)
*/
public void setTable(Table table) {
this.table = table;
}
/**
* Set the font required to render the totals line.
*
* @param font
* The font required to render the totals line.
* @see org.displaytag.decorator.itext.DecoratesItext#setFont(com.lowagie.text.Font)
*/
public void setFont(Font font) {
this.font = font;
}
/**
* Writes cell border at bottom of cell.
*/
public String startRow() {
this.table.getDefaultCell().setBorder(Rectangle.BOTTOM);
return null;
}
/**
* Writes the city total line.
*
* @param city
* City name.
* @param total
* City total.
*/
protected void writeCityTotal(String city, double total) {
this.writeTotal(city, total);
}
/**
* Writes the table grand total
*
* @param total
* Table grand total
*/
protected void writeGrandTotal(double total) {
this.writeTotal("Grand", total);
}
/**
* Writes a total line.
*
* @param value
* Total message.
* @param total
* Total number.
*/
private void writeTotal(String value, double total) {
if (assertRequiredState()) {
try {
this.font = FontFactory.getFont(this.font.getFamilyname(), this.font.getSize(), Font.BOLD,
this.font.getColor());
table.addCell(this.getCell(""));
table.addCell(this.getCell(""));
table.addCell(this.getCell("-------------"));
table.addCell(this.getCell(""));
// new row
table.addCell(this.getCell(""));
table.addCell(this.getCell(value + " Total:"));
table.addCell(this.getCell(total + ""));
table.addCell(this.getCell(""));
} catch (BadElementException e) {
}
}
}
/**
* Obtain a cell with the given value.
*
* @param value
* Value to display in the cell.
* @return A cell with the given value.
* @throws BadElementException
* if an error occurs while generating the cell.
*/
private Cell getCell(String value) throws BadElementException {
Cell cell = new Cell(new Chunk(value, this.font));
cell.setLeading(8);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
return cell;
}
/**
* Asserts that the table and font properties needed have been set by the
* client.
*
* @return true if the required properties are not null; false otherwise.
*/
private boolean assertRequiredState() {
return this.table != null && this.font != null;
}
}