XmlExport.java
package sk.iway.displaytag;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.jsp.JspException;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.displaytag.export.ExportView;
import org.displaytag.export.TextExportView;
import org.displaytag.model.Column;
import org.displaytag.model.ColumnIterator;
import org.displaytag.model.HeaderCell;
import org.displaytag.model.Row;
import org.displaytag.model.RowIterator;
import org.displaytag.model.TableModel;
import sk.iway.iwcm.DB;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.DocTools;
import sk.iway.iwcm.common.SearchTools;
/**
* XmlExport.java
*
*@Title webjet4
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2006
*@author $Author: jeeff $
*@version $Revision: 1.7 $
*@created Date: 30.6.2006 11:49:45
*@modified $Date: 2008/12/11 08:40:28 $
*/
/**
* spravne nazvy atributy podla hlavicky tabulky a odstrani anchory z exportu
*
*
*/
public class XmlExport implements TextExportView {
/**
* TableModel to render.
*/
private TableModel model;
/**
* export full list?
*/
private boolean exportFull;
/**
* decorate export?
*/
private boolean decorated;
private List<String> headerTitles = new ArrayList<String>();
/**
* @see ExportView#setParameters(org.displaytag.model.TableModel, boolean, boolean, boolean)
*/
@Override
public void setParameters(TableModel tableModel, boolean exportFullList, boolean includeHeader,
boolean decorateValues) {
this.model = tableModel;
this.exportFull = exportFullList;
this.decorated = decorateValues;
}
/**
* @see org.displaytag.export.BaseExportView#getRowStart()
*/
protected String getRowStart() {
return "<row>\n"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getRowEnd()
*/
protected String getRowEnd() {
return "</row>\n"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getCellStart()
*/
protected String getCellStart(String columnName) {
if (Tools.isEmpty(columnName)) columnName="column";
columnName = DocTools.removeChars(columnName, false);
return "<" + columnName.replace('\n', '-') + ">"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getCellEnd()
*/
protected String getCellEnd(String columnName) {
if (Tools.isEmpty(columnName)) columnName="column";
columnName = DocTools.removeChars(columnName, false);
return "</" + columnName.replace('\n', '-') + ">\n"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getDocumentStart()
*/
protected String getDocumentStart() {
return "<?xml version=\"1.0\" encoding=\"windows-1250\"?>\n<table>\n"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getDocumentEnd()
*/
protected String getDocumentEnd() {
return "</table>\n"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#getAlwaysAppendCellEnd()
*/
protected boolean getAlwaysAppendCellEnd() {
return true;
}
/**
* @see org.displaytag.export.BaseExportView#getAlwaysAppendRowEnd()
*/
protected boolean getAlwaysAppendRowEnd() {
return true;
}
/**
* @see org.displaytag.export.ExportView#getMimeType()
*/
@Override
public String getMimeType() {
return "text/xml"; //$NON-NLS-1$
}
/**
* @see org.displaytag.export.BaseExportView#escapeColumnValue(java.lang.Object)
*/
protected String escapeColumnValue(Object value) {
String text="";
if(value != null) {
text=value.toString().trim();
if(text.endsWith(" "))
text=text.substring(0,text.length()-6);
text = SearchTools.htmlToPlain(text);
}
return StringEscapeUtils.escapeXml(text.trim());
}
/**
* @see TextExportView#doExport(java.io.Writer)
*/
@Override
public void doExport(Writer out) throws IOException, JspException {
final String DOCUMENT_START = getDocumentStart();
final String DOCUMENT_END = getDocumentEnd();
final String ROW_START = getRowStart();
final String ROW_END = getRowEnd();
final boolean ALWAYS_APPEND_CELL_END = getAlwaysAppendCellEnd();
final boolean ALWAYS_APPEND_ROW_END = getAlwaysAppendRowEnd();
buildHeaders();
// document start
write(out, DOCUMENT_START);
// get the correct iterator (full or partial list according to the exportFull field)
RowIterator rowIterator = this.model.getRowIterator(this.exportFull);
// iterator on rows
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
if (this.model.getTableDecorator() != null) {
String stringStartRow = this.model.getTableDecorator().startRow();
write(out, stringStartRow);
}
// iterator on columns
ColumnIterator columnIterator = row.getColumnIterator(this.model.getHeaderCellList());
write(out, ROW_START);
int columnNumber = 0;
while (columnIterator.hasNext()) {
Column column = columnIterator.nextColumn();
String columnHeader = DB.internationalToEnglish(headerTitles.get(columnNumber));
String cellStart = getCellStart(columnHeader);
String cellEnd = getCellEnd(columnHeader);
// Get the value to be displayed for the column
String value = escapeColumnValue(column.getValue(this.decorated));
write(out, cellStart);
write(out, value);
if (ALWAYS_APPEND_CELL_END || columnIterator.hasNext()) {
write(out, cellEnd);
}
columnNumber++;
}
if (ALWAYS_APPEND_ROW_END || rowIterator.hasNext()) {
write(out, ROW_END);
}
}
// document end
write(out, DOCUMENT_END);
}
/**
* Write a String, checking for nulls value.
*
* @param out output writer
* @param string String to be written
* @throws java.io.IOException thrown by out.write
*/
private void write(Writer out, String string) throws IOException {
if (string != null) {
out.write(string);
}
}
/**
* @see TextExportView#outputPage()
*/
@Override
public boolean outputPage() {
return false;
}
/**
* iterates through the headers once, placing the titles in an ArrayList for
* quick'n'easy access as we iterate through each row
*/
private void buildHeaders()
{
headerTitles.clear();
@SuppressWarnings("unchecked")
Iterator<HeaderCell> iterator = this.model.getHeaderCellList().iterator();
while (iterator.hasNext())
{
HeaderCell headerCell = iterator.next();
String columnHeader = DB.internationalToEnglish(headerCell.getTitle());
if (columnHeader == null)
{
columnHeader = headerCell.getBeanPropertyName();
}
if (columnHeader != null)
{
columnHeader = StringUtils.deleteWhitespace(WordUtils.capitalizeFully(columnHeader));
columnHeader = escapeColumnValue(columnHeader);
}
headerTitles.add(columnHeader);
}
}
}