blob: 353076ed1acb5e3f2a9f8da1d84942bfa58c8a78 [file] [log] [blame]
/*
* Copyright (c) 2004, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package components.renderkit;
import components.components.MapComponent;
import jakarta.faces.component.UIComponent;
import jakarta.faces.context.FacesContext;
import jakarta.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");
}
/**
* <p>Return the context-relative path for the current page.</p>
*
* @param context Context for the current request
*/
private String getURI(FacesContext context) {
StringBuffer sb = new StringBuffer();
sb.append(context.getExternalContext().getRequestContextPath());
// PENDING(craigmcc) - will need to change if this is generalized
sb.append("/faces");
sb.append(context.getViewRoot().getViewId());
return (sb.toString());
}
}