package org.jboss.seam.ui.renderkit; import java.io.IOException; import javax.faces.component.UIComponent; import javax.faces.component.UIParameter; import javax.faces.context.FacesContext; import org.jboss.seam.ui.component.UIDownload; import org.jboss.seam.ui.component.UIResource; import org.jboss.seam.ui.util.HTML; import org.jboss.seam.ui.util.ViewUrlBuilder; import org.jboss.seam.ui.util.cdk.RendererBase; public class DownloadRendererBase extends RendererBase { @Override protected Class getComponentClass() { return UIDownload.class; } @Override protected void doEncodeBegin(javax.faces.context.ResponseWriter writer, FacesContext ctx, UIComponent component) throws IOException { UIDownload download = (UIDownload) component; if (!download.isRendered()) return; if (download.getSrc() != null) { ViewUrlBuilder builder = new ViewUrlBuilder(download.getSrc(), null); for (Object child : download.getChildren()) { if (child instanceof UIParameter) { builder.addParameter((UIParameter) child); } } writeStartTag(writer, download, builder.getEncodedUrl()); renderNonResourceChildren(ctx, download); writer.endElement(HTML.ANCHOR_ELEM); } } private void renderNonResourceChildren(FacesContext ctx, UIComponent component) throws IOException { for (Object child : component.getChildren()) { if (!(child instanceof UIParameter) && !(child instanceof UIResource) && (child instanceof UIComponent)) { renderChild(ctx, (UIComponent) child); } } } private void writeStartTag(javax.faces.context.ResponseWriter writer, UIDownload download, String url) throws IOException { writer.startElement(HTML.ANCHOR_ELEM, null); writer.writeAttribute(HTML.HREF_ATTR, url, null); if (download.getStyle() != null) writer.writeAttribute(HTML.STYLE_ATTR, download.getStyle(), null); if (download.getStyleClass() != null) writer.writeAttribute(HTML.STYLE_CLASS_ATTR, download.getStyleClass(), null); } @Override public boolean getRendersChildren() { return true; } }