001/* 002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * <a href="mailto:grenard@nuxeo.com">Guillaume</a> 016 */ 017package org.nuxeo.ecm.platform.ui.web.renderer; 018 019import java.io.IOException; 020import java.util.Iterator; 021 022import javax.faces.component.UIComponent; 023import javax.faces.context.FacesContext; 024import javax.faces.context.ResponseWriter; 025import javax.faces.model.SelectItem; 026 027import org.apache.commons.lang.StringUtils; 028import org.nuxeo.ecm.platform.ui.web.util.ComponentUtils; 029 030import com.sun.faces.renderkit.RenderKitUtils; 031import com.sun.faces.renderkit.html_basic.SelectManyCheckboxListRenderer; 032 033/** 034 * @since 6.0 035 */ 036public class NxSelectManyCheckboxListRenderer extends SelectManyCheckboxListRenderer { 037 038 final String MORE_LESS_LIMIT_PROPERTY = "moreLessLimit"; 039 040 final String EMPTY_CHOICE_PROPERTY = "emptyChoiceMessage"; 041 042 public static final String RENDERER_TYPE = "org.nuxeo.NxSelectManyCheckboxList"; 043 044 @Override 045 public void encodeEnd(FacesContext context, UIComponent component) throws IOException { 046 047 super.encodeEnd(context, component); 048 049 final String moreLessLimit = (String) component.getAttributes().get(MORE_LESS_LIMIT_PROPERTY); 050 if (moreLessLimit != null) { 051 ResponseWriter writer = context.getResponseWriter(); 052 final int moreLessLimitInt = Integer.parseInt(moreLessLimit); 053 writer.startElement("a", component); 054 writer.writeAttribute("href", "#", null); 055 writer.writeAttribute("onclick", "nuxeo.utils.moreLessTableRows('" + component.getClientId() + "', true, " 056 + moreLessLimitInt + ");return false;", null); 057 writer.writeAttribute("class", "nx-less-more-ctrl nx-more", null); 058 writer.write(ComponentUtils.translate(context, "label.vocabulary.more")); 059 writer.endElement("a"); 060 061 writer.startElement("a", component); 062 writer.writeAttribute("href", "#", null); 063 writer.writeAttribute("onclick", "nuxeo.utils.moreLessTableRows('" + component.getClientId() + "', false, " 064 + moreLessLimitInt + ");return false;", null); 065 writer.writeAttribute("class", "nx-less-more-ctrl nx-less", null); 066 writer.write(ComponentUtils.translate(context, "label.vocabulary.less")); 067 writer.endElement("a"); 068 069 writer.startElement("script", component); 070 writer.write("jQuery(document).ready(function(){nuxeo.utils.moreLessTableRows('" + component.getClientId() 071 + "', false, " + moreLessLimitInt + ");});"); 072 writer.endElement("script"); 073 } 074 075 Iterator<SelectItem> items = RenderKitUtils.getSelectItems(context, component); 076 if (!items.hasNext()) { 077 final String emptyChoiceMessage = (String) component.getAttributes().get(EMPTY_CHOICE_PROPERTY); 078 if (StringUtils.isNotBlank(emptyChoiceMessage)) { 079 ResponseWriter writer = context.getResponseWriter(); 080 writer.startElement("div", component); 081 writer.writeAttribute("class", "emptyResult", null); 082 writer.write(ComponentUtils.translate(context, emptyChoiceMessage)); 083 writer.endElement("div"); 084 } 085 } 086 } 087 088}