Package com.cfinkel.reports.displaytag

Source Code of com.cfinkel.reports.displaytag.CFTableDecoratorImpl

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();
    }

}
TOP

Related Classes of com.cfinkel.reports.displaytag.CFTableDecoratorImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.