/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.calendar.taglib; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.jsp.JspException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.infoglue.calendar.entities.BaseEntity; import org.infoglue.common.security.beans.InfoGluePrincipalBean; /** * */ public class CheckBoxFieldTag extends AbstractCalendarTag { private static Log log = LogFactory.getLog(CheckBoxFieldTag.class); private static final long serialVersionUID = 3617579309963752240L; private String name; private String labelCssClass = ""; private String cssClass = ""; private String size = ""; private String multiple = "false"; private String[] selectedValues; private List selectedValueList; private Set selectedValueSet; private Map values; private String label; private List fieldErrors; private Object errorAction = null; private boolean mandatory = false; private Boolean skipRowDiv = false; private String rowDivHTMLStart = "<div class=\"fieldrow\">"; private String rowDivHTMLEnd = "</div>"; private String requiredLabelClass = "redstar"; private String requiredText = "*"; public void setRequiredText(String requiredText) { this.requiredText = requiredText; } public void setRequiredLabelClass(String requiredLabelClass) { this.requiredLabelClass = requiredLabelClass; } public void setSkipRowDiv(String skipRowDiv) throws JspException { String evaluatedString = evaluateString("AbstractInputCalendarTag", "skipRowDiv", skipRowDiv); if(evaluatedString != null && !evaluatedString.equals(skipRowDiv)) skipRowDiv = evaluatedString; if(skipRowDiv.equalsIgnoreCase("true")) this.skipRowDiv = true; else this.skipRowDiv = false; } public void setRowDivHTMLStart(String rowDivHTMLStart) { this.rowDivHTMLStart = rowDivHTMLStart; } public void setRowDivHTMLEnd(String rowDivHTMLEnd) { this.rowDivHTMLEnd = rowDivHTMLEnd; } /** * */ public CheckBoxFieldTag() { super(); } public int doEndTag() throws JspException { String errorName = name; if(errorName.indexOf("attribute_") > -1) errorName = errorName.substring(errorName.indexOf("attribute_") + 10); fieldErrors = (List)findOnValueStack("#fieldErrors." + errorName); errorAction = findOnValueStack("#errorAction"); if(errorAction != null) { Object obj = findOnValueStack("#errorAction." + errorName); if(obj instanceof String) selectedValues = new String[]{(String)obj}; else if(obj instanceof String[]) selectedValues = (String[])obj; } String errorMessage = ""; if(fieldErrors != null && fieldErrors.size() > 0) { Iterator i = fieldErrors.iterator(); while(i.hasNext()) { String fieldError = (String)i.next(); String translatedError = this.getLabel(fieldError); if(translatedError != null && translatedError.length() > 0) fieldError = translatedError; errorMessage = "<span class=\"errorMessage\">" + fieldError + "</span>"; } } StringBuffer sb = new StringBuffer(); if(!skipRowDiv) sb.append(rowDivHTMLStart); if(this.label != null) { sb.append("<label>" + this.label + "</label>" + (getMandatory() ? "<span class=\"" + requiredLabelClass + "\">" + requiredText + "</span>" : "") + " " + errorMessage + "<br/>"); } else sb.append("<label>" + this.name + "</label>" + (getMandatory() ? "<span class=\"" + requiredLabelClass + "\">" + requiredText + "</span>" : "") + " " + errorMessage + "<br/>"); if(values != null) { Iterator valuesIterator = values.keySet().iterator(); while(valuesIterator.hasNext()) { String id = (String)valuesIterator.next(); String optionText = (String)values.get(id); log.info("Id:" + id); log.info("optionText:" + optionText); log.info("selectedValue:" + selectedValues); String checked = ""; if(selectedValues != null) { log.info("selectedValues.length:" + selectedValues.length); for(int i=0; i<selectedValues.length; i++) { log.info("selectedValues[i]:" + selectedValues[i]); if(id.equalsIgnoreCase(selectedValues[i])) checked = " checked=\"1\""; } } else if(selectedValueList != null) { Iterator selectedValueListIterator = selectedValueList.iterator(); while(selectedValueListIterator.hasNext()) { String selId; Object selObj = selectedValueListIterator.next(); if(selObj instanceof InfoGluePrincipalBean) { InfoGluePrincipalBean selValue = (InfoGluePrincipalBean)selObj; selId = selValue.getName().toString(); } else { BaseEntity selValue = (BaseEntity)selObj; selId = selValue.getId().toString(); } if(id.equalsIgnoreCase(selId)) checked = " checked=\"1\""; } } else if(selectedValueSet != null) { Iterator selectedValueSetIterator = selectedValueSet.iterator(); while(selectedValueSetIterator.hasNext()) { String selId; Object selObj = selectedValueSetIterator.next(); if(selObj instanceof InfoGluePrincipalBean) { InfoGluePrincipalBean selValue = (InfoGluePrincipalBean)selObj; selId = selValue.getName().toString(); } else { BaseEntity selValue = (BaseEntity)selObj; selId = selValue.getId().toString(); } if(id.equalsIgnoreCase(selId)) checked = " checked=\"1\""; } } sb.append("<input name=\"" + name + "\" value=\"" + id + "\" class=\"\" type=\"checkbox\" id=\"" + name + "\"" + checked + "><label for=\"" + name + "\"/> " + this.getLabel(optionText) + "</label><br/>"); } } if(!skipRowDiv) sb.append(rowDivHTMLEnd); write(sb.toString()); this.rowDivHTMLStart = "<div class=\"fieldrow\">"; this.rowDivHTMLEnd = "</div>"; this.skipRowDiv = false; this.requiredLabelClass = "redstar"; this.requiredText = "*"; return EVAL_PAGE; } public void setCssClass(String cssClass) { this.cssClass = cssClass; } public void setName(String name) { Object o = findOnValueStack(name); if(o != null) this.name = o.toString(); else this.name = name; } public void setLabel(String rawLabel) throws JspException { Object o = findOnValueStack(rawLabel); String evaluatedString = evaluateString("SelectFieldTag", "label", rawLabel); log.info("o:" + o); log.info("evaluatedString:" + evaluatedString); if(o != null) this.label = (String)o; else if(evaluatedString != null && !evaluatedString.equals(rawLabel)) this.label = evaluatedString; else { String translatedLabel = this.getLabel(rawLabel); if(translatedLabel != null && translatedLabel.length() > 0) this.label = translatedLabel; } } public void setMultiple(String multiple) { this.multiple = multiple; } public void setSelectedValues(String selectedValues) throws JspException { Object o = findOnValueStack(selectedValues); if(o != null) { if(o instanceof String[]) this.selectedValues = (String[])o; else this.selectedValues = new String[] {o.toString()}; } else this.selectedValues = null; //this.selectedValues = evaluateStringArray("SelectTag", "selectedValues", selectedValues); } public void setSelectedValue(String selectedValue) throws JspException { Object o = findOnValueStack(selectedValue); if(o != null) this.selectedValues = new String[] {o.toString()}; else this.selectedValues = null; //this.selectedValues = new String[] {evaluateString("SelectTag", "selectedValue", selectedValue)}; } public void setSelectedValueList(String value) throws JspException { Object o = findOnValueStack(value); if(o != null) { this.selectedValueList = (List)o; } else { this.selectedValueList = null; } //this.values = evaluateList("SelectTag", "values", values); } public void setSelectedValueSet(String value) throws JspException { Object o = findOnValueStack(value); if(o != null) { this.selectedValueSet = (Set)o; } else { this.selectedValueSet = null; } //this.values = evaluateList("SelectTag", "values", values); } public void setValueMap(String valueMap) throws JspException { Object o = findOnValueStack(valueMap); if(o != null) { this.values = (Map)o; } else { this.values = null; } } public void setSize(String size) { this.size = size; } public void setLabelCssClass(String labelCssClass) { this.labelCssClass = labelCssClass; } public void setRequired(String required) throws JspException { String evaluatedString = evaluateString("AbstractInputCalendarTag", "required", required); if(evaluatedString != null && !evaluatedString.equals(required)) required = evaluatedString; if(required.equalsIgnoreCase("true")) this.mandatory = true; else this.mandatory = false; } public void setMandatory(String mandatory) { log.debug("APA1:" + mandatory); } public boolean getMandatory() { return this.mandatory; } }