| /* |
| * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. |
| * |
| * Redistribution and use in source and binary forms, with or |
| * without modification, are permitted provided that the following |
| * conditions are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistribution in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials |
| * provided with the distribution. |
| * |
| * Neither the name of Sun Microsystems, Inc. or the names of |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * This software is provided "AS IS," without a warranty of any |
| * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND |
| * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY |
| * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY |
| * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR |
| * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR |
| * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE |
| * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, |
| * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER |
| * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF |
| * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS |
| * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
| * |
| * You acknowledge that this software is not designed, licensed or |
| * intended for use in the design, construction, operation or |
| * maintenance of any nuclear facility. |
| */ |
| |
| package org.apache.cocoon.faces.samples.components.renderkit; |
| |
| |
| import org.apache.cocoon.faces.samples.components.components.MapComponent; |
| |
| import javax.faces.component.UIComponent; |
| import javax.faces.context.FacesContext; |
| import javax.faces.context.ResponseWriter; |
| |
| import java.io.IOException; |
| |
| |
| /** |
| * <p>Renderer for {@link MapComponent} in an HTML environment.</p> |
| */ |
| |
| public class MapRenderer extends BaseRenderer { |
| |
| |
| // -------------------------------------------------------- Renderer Methods |
| |
| |
| /** |
| * <p>Decode the incoming request parameters to determine which |
| * hotspot (if any) has been selected.</p> |
| * |
| * @param context <code>FacesContext</code>for the current request |
| * @param component <code>UIComponent</code> to be decoded |
| */ |
| public void decode(FacesContext context, UIComponent component) { |
| |
| if ((context == null) || (component == null)) { |
| throw new NullPointerException(); |
| } |
| MapComponent map = (MapComponent) component; |
| |
| String key = getName(context, map); |
| String value = (String) |
| context.getExternalContext().getRequestParameterMap().get(key); |
| if (value != null) { |
| map.setCurrent(value); |
| } |
| |
| } |
| |
| |
| /** |
| * <p>Encode the beginning of this component.</p> |
| * |
| * @param context <code>FacesContext</code>for the current request |
| * @param component <code>UIComponent</code> to be decoded |
| */ |
| public void encodeBegin(FacesContext context, UIComponent component) |
| throws IOException { |
| |
| if ((context == null) || (component == null)) { |
| throw new NullPointerException(); |
| } |
| MapComponent map = (MapComponent) component; |
| ResponseWriter writer = context.getResponseWriter(); |
| |
| writer.startElement("map", map); |
| writer.writeAttribute("name", map.getId(), "id"); |
| |
| } |
| |
| |
| /** |
| * <p>Encode the children of this component.</p> |
| * |
| * @param context <code>FacesContext</code>for the current request |
| * @param component <code>UIComponent</code> to be decoded |
| */ |
| public void encodeChildren(FacesContext context, UIComponent component) |
| throws IOException { |
| |
| if ((context == null) || (component == null)) { |
| throw new NullPointerException(); |
| } |
| |
| } |
| |
| |
| /** |
| * <p>Encode the ending of this component.</p> |
| * |
| * @param context <code>FacesContext</code>for the current request |
| * @param component <code>UIComponent</code> to be decoded |
| */ |
| public void encodeEnd(FacesContext context, UIComponent component) |
| throws IOException { |
| |
| if ((context == null) || (component == null)) { |
| throw new NullPointerException(); |
| } |
| MapComponent map = (MapComponent) component; |
| ResponseWriter writer = context.getResponseWriter(); |
| |
| writer.startElement("input", map); |
| writer.writeAttribute("type", "hidden", null); |
| writer.writeAttribute("name", getName(context, map), "clientId"); |
| writer.endElement("input"); |
| writer.endElement("map"); |
| |
| } |
| |
| // --------------------------------------------------------- Private Methods |
| |
| /** |
| * <p>Return the calculated name for the hidden input field.</p> |
| * |
| * @param context Context for the current request |
| * @param component Component we are rendering |
| */ |
| private String getName(FacesContext context, UIComponent component) { |
| return (component.getId() + "_current"); |
| } |
| } |