/*
* xulfaces : bring XUL power to Java
*
* Copyright (C) 2005 Olivier SCHMITT
* 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.
*
* 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 St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.xulfaces.renderer.tree;
import java.io.IOException;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.xulfaces.IconProvider;
import org.xulfaces.LabelProvider;
import org.xulfaces.annotation.faces.RENDERER;
import org.xulfaces.component.tree.TreeCellComponent;
import org.xulfaces.component.tree.TreeRowComponent;
import org.xulfaces.renderer.XULRenderer;
/**
* <p>Defines a renderer for treecell component.</p>
*
* @author kito31
* @version $Id: TreeCellRenderer.java,v 1.18 2007/04/09 13:25:49 kito31 Exp $
*/
@RENDERER(kit = "XUL_RENDERKIT", family = "xul.component.family", type = "xul.renderer.TreeCell")
public class TreeCellRenderer extends XULRenderer {
public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
ResponseWriter responseWriter = facesContext.getResponseWriter();
TreeCellComponent treeCellComponent = (TreeCellComponent) component;
IconProvider iconProvider = treeCellComponent.getIconProvider();
LabelProvider labelProvider = treeCellComponent.getLabelProvider();
responseWriter.startElement("treecell", component);
treeCellComponent.setNodeId(computeId(treeCellComponent));
responseWriter.writeAttribute("id", treeCellComponent.getNodeId(), "id");
String var = treeCellComponent.getVar();
Object userObject = facesContext.getExternalContext().getSessionMap().get(var);
if ( (treeCellComponent.getAttributes().get("label") != null) || (labelProvider != null)){
// Deal with label
String label = null;
if (labelProvider != null) {
label = labelProvider.getText(userObject, TreeRowComponent.CLOSED);
treeCellComponent.setLabel(label);
} else {
Object value = convertAsString(facesContext, component, getProperty(facesContext, "label", component));
if (value != null) {
label = value.toString();
}
}
if (label != null) {
responseWriter.writeAttribute("label", label, "label");
}
}
if ( (treeCellComponent.getAttributes().get("src") != null) || (iconProvider != null)){
// Deal with src
String src = null;
if (iconProvider != null) {
src = iconProvider.getIcon(userObject, TreeRowComponent.CLOSED);
} else {
src = (String) convertAsString(facesContext, component, getProperty(facesContext, "src", component));
}
if (src != null) {
if (!src.equals("")) {
responseWriter.writeAttribute("src", src, "src");
}
}
}
renderAttributes(facesContext, component, (List) component
.getAttributes().get("annotatedAttributes"));
responseWriter.endElement("treecell");
}
private String computeId(TreeCellComponent treeCellComponent){
TreeRowComponent treeRowComponent = (TreeRowComponent) treeCellComponent.getParent();
StringBuffer stringBuffer = new StringBuffer(treeRowComponent.getNodeId());
stringBuffer.append(":tc:");
stringBuffer.append(treeCellComponent.getId());
return stringBuffer.toString();
}
}