blob: 5860ea37a0a91b281bbdf6d4c18f783ab34b68d3 [file] [log] [blame]
/*
* 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");
}
}