/**
* License Agreement.
*
* JBoss RichFaces - Ajax4jsf Component Library
*
* Copyright (C) 2008 CompuGROUP Holding AG
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* 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.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.richfaces.renderkit.html;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.faces.context.ResponseWriter;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.resource.InternetResource;
import org.ajax4jsf.resource.InternetResourceBuilder;
import org.richfaces.component.UIColumn;
/**
* @author pawelgo
*
*/
public class SimpleTableMenuRenderer extends TableMenuRenderer {
private static final long serialVersionUID = -3907452284006250197L;
private int visibleColumnsCount;
private ResponseWriter writer;
/*
* (non-Javadoc)
*
* @see org.richfaces.renderkit.html.TableMenuRenderer#render()
*/
public String render() throws IOException {
String menuId = table.getClientId(context) + ":tm";
Iterator<UIColumn> columns = table.getSortedColumns();
visibleColumnsCount = table.getVisibleColumnsCount();
writer = context.getResponseWriter();
// print main menu DIV element
writer.startElement(HTML.DIV_ELEM, table);
writer.writeAttribute(HTML.id_ATTRIBUTE, menuId, null);
writer.writeAttribute(HTML.class_ATTRIBUTE, "dt-menu", null);
writer.writeAttribute(HTML.style_ATTRIBUTE,
"z-index: 15005; visibility: visible; left: 0px; top: 0px;",
null);
// writer.writeAttribute(HTML.style_ATTRIBUTE, "position: absolute;
// z-index: 15005; visibility: visible; left: 0px; top: 0px;", null);
writer.startElement("ul", table);
writer.writeAttribute(HTML.class_ATTRIBUTE, "dt-menu-list", null);
for (; columns.hasNext();) {
renderMenuItem(columns.next());
}// for
writer.endElement("ul");
writer.endElement(HTML.DIV_ELEM);
return menuId;
}// render
protected void renderMenuItem(UIColumn column) throws IOException {
if (column instanceof UIColumn) {
UIColumn dataColumn = (UIColumn) column;
Boolean v = dataColumn.isVisible();
boolean columnVisible = (v == null ? Boolean.TRUE : v);
String actionScript = null;
if ((!columnVisible) || (visibleColumnsCount > 1)) {
boolean ajaxSingle = true;
Map<String, Object> requestOpts = AjaxRendererUtils
.buildEventOptions(context, dataColumn);
if (onAjaxCompleteFunction != null)
requestOpts.put(AjaxRendererUtils.ONCOMPLETE_ATTR_NAME,
onAjaxCompleteFunction);
@SuppressWarnings("unchecked")
Map<String, Object> parameters = (Map<String, Object>) requestOpts
.get("parameters");
if (parameters == null) {
parameters = new HashMap<String, Object>();
requestOpts.put("parameters", parameters);
}
if (ajaxSingle) {
if (!parameters
.containsKey(AjaxRendererUtils.AJAX_SINGLE_PARAMETER_NAME))
parameters.put(
AjaxRendererUtils.AJAX_SINGLE_PARAMETER_NAME,
dataColumn.getParent().getClientId(context));
if (!requestOpts.containsKey("control"))
requestOpts.put("control", JSReference.THIS);
}
parameters.put(dataColumn.getParent().getClientId(context)
+ ":" + CHANGE_COL_VISIBILITY, dataColumn.getId());
JSFunction dropFunction = AjaxRendererUtils.buildAjaxFunction(
dataColumn, context);
dropFunction.addParameter(requestOpts);
actionScript = dropFunction.toScript();
}// if
writer.startElement("li", dataColumn);
writer.writeAttribute(HTML.class_ATTRIBUTE, "dt-menu-list-item"
+ (columnVisible ? " dt-menu-item-checked" : ""), null);
writer.startElement(HTML.a_ELEMENT, dataColumn);
writer.writeAttribute(HTML.HREF_ATTR, "#", null);
writer.writeAttribute(HTML.class_ATTRIBUTE,
"dt-menu-item dt-menu-check-item", null);
actionScript = (actionScript == null ? "return false;"
: actionScript + ";return false;");
writer.writeAttribute(HTML.onclick_ATTRIBUTE, actionScript, null);
writer.startElement(HTML.IMG_ELEMENT, dataColumn);
writer.writeAttribute(HTML.class_ATTRIBUTE, "dt-menu-item-icon",
null);
InternetResource res = InternetResourceBuilder.getInstance().getResource("/org/richfaces/renderkit/html/images/s.gif");
writer.writeAttribute(HTML.src_ATTRIBUTE, InternetResourceBuilder
.getInstance().getUri(res, context, null), null);
writer.endElement(HTML.IMG_ELEMENT);
String label = (String)dataColumn.getAttributes().get("label");
writer.writeText(label == null ? "" : label, null);
writer.endElement(HTML.a_ELEMENT);
writer.endElement("li");
}
}// encodeMenuItem
public JSFunctionDefinition createShowMenuEventFunction() {
return new JSFunctionDefinition();
}
}