package com.cfinkel.reports.displaytag;
import com.cfinkel.reports.Format;
import com.cfinkel.reports.ObjectsByColumn;
import com.cfinkel.reports.generatedbeans.DrillDownElement;
import com.cfinkel.reports.generatedbeans.InputParamElement;
import com.cfinkel.reports.web.AppData;
import com.cfinkel.reports.web.ParameterNames;
import com.cfinkel.reports.web.WebContext;
import com.cfinkel.reports.wrappers.Output;
import org.apache.log4j.Logger;
import org.displaytag.decorator.XQTableDecorator;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
/**
* $Author:charles $
* $Revision:10429 $
* $Date:2006-07-26 18:00:43 -0400 (Wed, 26 Jul 2006) $
* <p/>
* created:
* User: charles
* Date: Apr 10, 2006
* Time: 3:07:15 AM
*
*/
public class CFTableDecoratorImpl extends XQTableDecorator {
private static final Logger log = Logger.getLogger(CFTableDecoratorImpl.class);
Output output;
ObjectsByColumn<DrillDownElement> drillDowns;
String reportPrefix;
private ObjectsByColumn<Format> formats;
{
HttpServletRequest request = WebContext.get().getRequest();
output = (Output)request.getAttribute("output");
drillDowns = output.getDrillDowns();
formats = output.getFormats();
reportPrefix = request.getContextPath() + AppData.getReportsURL();
}
/**
* Retrieves value
* proper formatting for drill-downs
* @param columnName
* @return value
*/
public String retrieveValue(String columnName) {
Map currentRowObject = (Map)this.getCurrentRowObject();
Object valueObject = currentRowObject.get(columnName);
// should not happen:
if (valueObject == null) return "";
Format format = formats.get(columnName);
String value;
if (format != null) {
value = format.getDecimalFormat().format(valueObject);
} else {
value = valueObject.toString();
}
DrillDownElement drillDownElement = drillDowns.get(columnName);
if (drillDownElement != null) {
StringBuilder sb = new StringBuilder();
sb.append("<a href=\"");
sb.append(getDrillDownHyperLink(drillDownElement,currentRowObject));
sb.append("\">");
sb.append(value);
sb.append("</a>");
return sb.toString();
} else {
return value;
}
}
private String getDrillDownHyperLink(DrillDownElement drillDownElement, Map row) {
StringBuilder link = new StringBuilder();
link.append(reportPrefix).append("/")
.append(drillDownElement.getReport()).append("?");
// add inputs now:
try {
for (InputParamElement inputParamElement : drillDownElement.getInputParam()) {
Object value;
value = row.get(inputParamElement.getColumn());
String name = inputParamElement.getName();
String urlValue = URLEncoder.encode(value.toString(),"UTF-8");
link.append(name);
link.append("=").append(urlValue).append("&");
}
} catch (UnsupportedEncodingException e) {
log.error(e); //this shouldn't happen
}
link.append(ParameterNames.run);
return link.toString();
}
}