/*
* (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl.html
*
* 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*
* $Id$
*/
package org.nuxeo.ecm.platform.ui.web.directory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuxeo.common.utils.i18n.I18NUtils;
import org.nuxeo.ecm.platform.ui.web.util.BaseURL;
/**
* Renders many listboxes for the MultiListbox component
*
* @deprecated : renderer is useless (not declared correctly in
* deployment-fragment.xml and bugg) should be refactored instead
*/
@Deprecated
public class ChainSelectMultiListboxRenderer extends Renderer {
@SuppressWarnings("unused")
private static final Log log = LogFactory.getLog(ChainSelectMultiListboxRenderer.class);
@Override
public void decode(FacesContext facesContext, UIComponent component) {
}
@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
ChainSelectMultiListboxComponent comp = (ChainSelectMultiListboxComponent) component;
ResponseWriter writer = context.getResponseWriter();
Boolean displayValueOnly = comp.getChain().getBooleanProperty(
"displayValueOnly", false);
if (displayValueOnly) {
return;
}
encodeInput(context, writer, comp);
}
private void encodeInput(FacesContext context, ResponseWriter writer,
ChainSelectMultiListboxComponent mcomp) throws IOException {
ChainSelectListboxComponent[] sComps = mcomp.createSingleComponents();
for (ChainSelectListboxComponent component : sComps) {
encodeInput(context, writer, component);
// mcomp.getChildren()
// mcomp.encodeChildren(context);
}
}
private static void encodeInput(FacesContext context,
ResponseWriter writer, ChainSelectListboxComponent comp)
throws IOException {
String id = comp.getClientId(context);
ChainSelect chain = comp.getChain();
String cssStyleClass = comp.getStringProperty("cssStyleClass", null);
String cssStyle = comp.getStringProperty("cssStyle", null);
String onchange = comp.getStringProperty("onchange", null);
String id1 = comp.getClientId(context).split(":")[0];
String id2 = comp.getClientId(context);
onchange = "A4J.AJAX.Submit('_viewRoot','"
+ id1
+ "',event,{'parameters':{'"
+ id2
+ "':'"
+ id2
+ "'},'actionUrl':'" + BaseURL.getContextPath() + "/documents/tabs/document_externe_edit.faces'})";
boolean multiSelect = comp.getBooleanProperty("multiSelect", false);
String size = comp.getStringProperty("size", null);
boolean displayIdAndLabel = comp.getBooleanProperty(
"displayIdAndLabel", false);
String displayIdAndLabelSeparator = comp.getStringProperty(
"displayIdAndLabelSeparator", " ");
boolean localize = comp.getBooleanProperty("localize", false);
String display = comp.getStringProperty("display", "");
if (chain.getBooleanProperty("displayValueOnly", false)) {
return;
}
writer.startElement("select", comp);
writer.writeAttribute("id", id, "id");
writer.writeAttribute("name", id, "name");
if (onchange != null) {
writer.writeAttribute("onchange", onchange, "onchange");
}
if (cssStyleClass != null) {
writer.writeAttribute("class", cssStyleClass, "class");
}
if (cssStyle != null) {
writer.writeAttribute("style", cssStyle, "style");
}
if (multiSelect) {
writer.writeAttribute("multiple", "true", "multiple");
}
if (size != null && Integer.valueOf(size) > 0) {
writer.writeAttribute("size", size, "size");
}
// <select id="j_id202:theme7" name="j_id202:theme7"
// onchange="A4J.AJAX.Submit('_viewRoot','j_id202',event,{'parameters':{'j_id202:j_id286':'j_id202:j_id286'},'actionUrl':'/nuxeo/documents/tabs/document_externe_edit.faces'})"
// multiple="true" size="4"><option value="">Select a value</option>
// writer.writeAttribute("onchange","onchange");
List<String> valueList = new ArrayList<String>();
int index = comp.getIndex();
Selection[] selections = chain.getSelections();
if (selections != null) {
for (Selection selection : selections) {
valueList.add(selection.getColumnValue(index));
}
}
String optionsLabel = translate(context, "label.vocabulary.selectValue");
writer.startElement("option", comp);
writer.writeAttribute("value", "", "value");
writer.writeText(optionsLabel, null);
writer.endElement("option");
writer.write("\n");
Map<String, DirectorySelectItem> options = comp.getOptions();
if (options != null) {
for (DirectorySelectItem item : options.values()) {
String optionId = (String) item.getValue();
String optionLabel = item.getLabel();
writer.startElement("option", comp);
writer.writeAttribute("value", optionId, "value");
if (valueList.contains(optionId)) {
writer.writeAttribute("selected", "true", "selected");
}
if (localize) {
optionLabel = translate(context, optionLabel);
}
writer.writeText(DirectoryHelper.getOptionValue(optionId,
optionLabel, display, displayIdAndLabel,
displayIdAndLabelSeparator), null);
writer.endElement("option");
}
}
writer.endElement("select");
writer.write("\n");
}
protected static String translate(FacesContext context, String label) {
String bundleName = context.getApplication().getMessageBundle();
Locale locale = context.getViewRoot().getLocale();
label = I18NUtils.getMessageString(bundleName, label, null, locale);
return label;
}
}