com.alkacon.opencms.survey.CmsFormReportingBean.java Source code

Java tutorial

Introduction

Here is the source code for com.alkacon.opencms.survey.CmsFormReportingBean.java

Source

/*
 * File   : $Source: /alkacon/cvs/alkacon/com.alkacon.opencms.survey/src/com/alkacon/opencms/survey/CmsFormReportingBean.java,v $
 * Date   : $Date: 2010/03/19 15:31:15 $
 * Version: $Revision: 1.8 $
 *
 * This library is part of OpenCms -
 * the Open Source Content Mananagement System
 *
 * Copyright (C) 2010 Alkacon Software GmbH (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package com.alkacon.opencms.survey;

import com.alkacon.opencms.formgenerator.CmsCheckboxField;
import com.alkacon.opencms.formgenerator.CmsFieldFactory;
import com.alkacon.opencms.formgenerator.CmsRadioButtonField;
import com.alkacon.opencms.formgenerator.CmsSelectionField;
import com.alkacon.opencms.formgenerator.I_CmsField;

import org.opencms.file.CmsGroup;
import org.opencms.file.CmsUser;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.CmsLog;
import org.opencms.util.CmsStringUtil;

import java.awt.Color;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;

import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.map.LazyMap;
import org.apache.commons.logging.Log;

/**
 * Contains functions to show the reporting of the webform.<p>
 * 
 * @author Anja Roettgers
 * 
 * @version $Revision: 1.8 $
 * 
 * @since 7.0.4
 */
public class CmsFormReportingBean extends CmsJspActionElement {

    /** the separator between the parameters.*/
    public static final String PARAM_SEPARATOR = "?_?";

    /** the separator between light and dark colors.**/
    public static final int SEP_DARK_LIGHT = (3 * 255) / 2;

    /** The log object for this class. */
    private static final Log LOG = CmsLog.getLog(CmsFormReportingBean.class);

    /** 
     * Till now, only special types can be reported.<p>
     * 
     * Types:<p>
     * <ul>
     *  <li> {@link CmsCheckboxField} </li>
     *  <li> {@link CmsRadioButtonField} </li>
     * </ul>
     * 
     * @param fieldType the type to check
     * 
     * @return <code>true</code> is from the correct type or otherwise <code>false</code> 
     */
    public static boolean isFieldTypeCorrect(String fieldType) {

        boolean result = false;
        I_CmsField field = CmsFieldFactory.getSharedInstance().getField(fieldType);
        if ((field instanceof CmsCheckboxField) || (field instanceof CmsRadioButtonField)
                || (field instanceof CmsSelectionField)) {
            result = true;
        }
        return result;
    }

    /** Lazy map which checks if the type can be reported or not. */
    private Map m_checktype;

    /** Lazy map with the color of the text if white or black.*/
    private Map m_color;

    /** Lazy map with the groups.*/
    private Map m_group;

    /** Lazy map with label of the fields.*/
    private Map m_label;

    /** Lazy map with the reporting bean.*/
    private Map m_reporting;

    /**
     * Constructor, creates the necessary form configuration objects.<p>
     * 
     * @param context the JSP page context object
     * @param req the JSP request 
     * @param res the JSP response 
     */
    public CmsFormReportingBean(PageContext context, HttpServletRequest req, HttpServletResponse res) {

        super(context, req, res);

    }

    /**
     * Checks if the given type is from the correct type to display in the report.<p>
     * 
     * @return <code>true</code> is from the correct type or otherwise <code>false</code> 
     */
    public Map getFieldTypeCorrect() {

        if (m_checktype == null) {
            m_checktype = LazyMap.decorate(new HashMap(), new Transformer() {

                /**
                 * @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
                 */
                public Object transform(Object input) {

                    String value = String.valueOf(input);
                    return Boolean.valueOf(isFieldTypeCorrect(value));
                }
            });
        }
        return m_checktype;
    }

    /**
     * Returns a lazy initialized map that provides the label and database label for each value used as a key in the Map.<p> 
     *  
     * @return a lazy initialized map
     */
    public Map getLabeling() {

        if (m_label == null) {
            m_label = LazyMap.decorate(new HashMap(), new Transformer() {

                /**
                 * @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
                 */
                public Object transform(Object input) {

                    String value = String.valueOf(input);
                    String[] result = new String[] { value, value };
                    if (!CmsStringUtil.isEmpty(value)) {
                        String[] array = CmsStringUtil.splitAsArray(value, '|');
                        if (array.length > 1) {
                            result = array;
                        }
                    }
                    return result;
                }
            });
        }
        return m_label;
    }

    /**
     * Returns the PARAM_SEPARATOR.<p>
     *
     * @return the PARAM_SEPARATOR
     */
    public String getSeparator() {

        return PARAM_SEPARATOR;
    }

    /**
     * Returns a lazy initialized map that provides if the user can see the detail page or not 
     * for each group used as a key in the Map.<p> 
     * 
     * @return a lazy initialized map
     */
    public Map getShowDetail() {

        if (m_group == null) {
            m_group = LazyMap.decorate(new HashMap(), new Transformer() {

                /**
                 * @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
                 */
                public Object transform(Object input) {

                    String value = String.valueOf(input);
                    if (CmsStringUtil.isEmptyOrWhitespaceOnly(value)) {
                        return new Boolean(true);
                    }
                    try {
                        CmsUser user = getCmsObject().getRequestContext().currentUser();
                        List list = getCmsObject().getGroupsOfUser(user.getName(), false);
                        CmsGroup group;
                        for (int i = 0; i < list.size(); i++) {
                            group = (CmsGroup) list.get(i);
                            if (group.getName().equals(value)) {
                                return new Boolean(true);
                            }
                        }
                    } catch (Exception e) {
                        // NOOP
                    }

                    return new Boolean(false);
                }
            });
        }
        return m_group;
    }

    /**
     * Returns a lazy initialized map that provides the color of the label for each background color used as a key in the Map.<p> 
     * 
     * Dark background color returns white.<p>
     * Light background color returns black.<p>
     * 
     * @return a lazy initialized map
     */
    public Map getTextColor() {

        if (m_color == null) {
            m_color = LazyMap.decorate(new HashMap(), new Transformer() {

                /**
                 * @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
                 */
                public Object transform(Object input) {

                    try {
                        // get the color from the given value
                        String value = String.valueOf(input);
                        Color color = Color.decode(value);

                        // look if its a dark color or a light
                        int dezColor = color.getBlue() + color.getGreen() + color.getRed();
                        if (dezColor < SEP_DARK_LIGHT) {
                            return "#FFF";
                        }

                    } catch (Exception e) {
                        // NOOP
                    }
                    return "#000";
                }
            });
        }
        return m_color;
    }

    /**
     * Returns the needed {@link CmsFormWorkBean} with the given parameters.<p>
     * 
     * @param formid the form id
     * 
     * @param formPath the path of the form
     * 
     * @return the work bean
     */
    public CmsFormWorkBean getReporting(String formid, String formPath) {

        CmsFormWorkBean result = new CmsFormWorkBean();
        String[] parameters = CmsStringUtil.splitAsArray(formid, PARAM_SEPARATOR);

        if (parameters.length > 0) {
            String formId = parameters[0];
            String resId = null;
            if (parameters.length > 1) {
                resId = parameters[1];
            }
            result.init(formId, resId, formPath, this);
        }
        return result;

    }
}