/** * Copyright (c) 2000-2017 Liferay, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.liferay.faces.util.render; import java.io.IOException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.convert.ConverterException; import javax.faces.render.RenderKit; import javax.faces.render.Renderer; /** * @author Neil Griffin */ public abstract class DelegatingClientComponentRendererBase extends ClientComponentRendererBase implements DelegatingClientComponentRenderer { /** * @see {@link DelegatingRenderer#getDelegateComponentFamily()} */ @Override public abstract String getDelegateComponentFamily(); /** * @see {@link DelegatingRenderer#getDelegateRendererType()} */ @Override public abstract String getDelegateRendererType(); @Override public String convertClientId(FacesContext facesContext, String clientId) { Renderer delegateRenderer = getDelegateRenderer(facesContext); return delegateRenderer.convertClientId(facesContext, clientId); } @Override public void decode(FacesContext facesContext, UIComponent uiComponent) { Renderer delegateRenderer = getDelegateRenderer(facesContext); decodeClientState(facesContext, uiComponent); delegateRenderer.decode(facesContext, uiComponent); } /** * @see {@link DelegatingRenderer#encodeAll(javax.faces.context.FacesContext, javax.faces.component.UIComponent)} */ @Override public void encodeAll(FacesContext facesContext, UIComponent uiComponent) throws IOException { Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeBegin(facesContext, uiComponent); delegateRenderer.encodeChildren(facesContext, uiComponent); delegateRenderer.encodeEnd(facesContext, uiComponent); } /** * @see {@link DelegatingRenderer#encodeAll(javax.faces.context.FacesContext, javax.faces.component.UIComponent, * javax.faces.context.ResponseWriter)} */ @Override public void encodeAll(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeBegin(facesContext, uiComponent); delegateRenderer.encodeChildren(facesContext, uiComponent); delegateRenderer.encodeEnd(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } @Override public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException { // Must not delegate to the delegate renderer since the ClientComponentRendererBase.encodeEnd(FacesContext, // UIComponent) method needs to start driving the rendering process. super.encodeBegin(facesContext, uiComponent); } /** * @see {@link DelegatingRenderer#encodeBegin(javax.faces.context.FacesContext, javax.faces.component.UIComponent, * javax.faces.context.ResponseWriter)} */ @Override public void encodeBegin(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); // Must not delegate to the delegate renderer since the ClientComponentRendererBase.encodeEnd(FacesContext, // UIComponent) method needs to start driving the rendering process. super.encodeBegin(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } @Override public void encodeChildren(FacesContext facesContext, UIComponent uiComponent) throws IOException { Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeChildren(facesContext, uiComponent); } /** * @see {@link DelegatingRenderer#encodeChildren(javax.faces.context.FacesContext, * javax.faces.component.UIComponent, javax.faces.context.ResponseWriter)} */ @Override public void encodeChildren(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeChildren(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } @Override public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException { // Must not delegate to the delegate renderer since the ClientComponentRendererBase.encodeEnd(FacesContext, // UIComponent) method needs to finish driving the rendering process. super.encodeEnd(facesContext, uiComponent); } /** * @see {@link DelegatingRenderer#encodeEnd(javax.faces.context.FacesContext, javax.faces.component.UIComponent, * javax.faces.context.ResponseWriter)} */ @Override public void encodeEnd(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); // Must not delegate to the delegate renderer since the ClientComponentRendererBase.encodeEnd(FacesContext, // UIComponent) method needs to finish driving the rendering process. super.encodeEnd(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } /** * @see {@link ClientComponentRenderer#encodeMarkupBegin(javax.faces.context.FacesContext, * javax.faces.component.UIComponent)} */ @Override public void encodeMarkupBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException { Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeBegin(facesContext, uiComponent); } /** * @see {@link DelegatingClientComponentRenderer#encodeMarkupBegin(javax.faces.context.FacesContext, * javax.faces.component.UIComponent, javax.faces.context.ResponseWriter)} */ @Override public void encodeMarkupBegin(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeBegin(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } /** * @see {@link ClientComponentRenderer#encodeMarkupEnd(javax.faces.context.FacesContext, * javax.faces.component.UIComponent)} */ @Override public void encodeMarkupEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException { Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeEnd(facesContext, uiComponent); } /** * @see {@link DelegatingClientComponentRenderer#encodeMarkupEnd(javax.faces.context.FacesContext, * javax.faces.component.UIComponent, javax.faces.context.ResponseWriter)} */ @Override public void encodeMarkupEnd(FacesContext facesContext, UIComponent uiComponent, ResponseWriter delegationResponseWriter) throws IOException { ResponseWriter originalResponseWriter = facesContext.getResponseWriter(); facesContext.setResponseWriter(delegationResponseWriter); Renderer delegateRenderer = getDelegateRenderer(facesContext); delegateRenderer.encodeEnd(facesContext, uiComponent); facesContext.setResponseWriter(originalResponseWriter); } @Override public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object submittedValue) throws ConverterException { Renderer delegateRenderer = getDelegateRenderer(facesContext); Object convertedValue = delegateRenderer.getConvertedValue(facesContext, uiComponent, submittedValue); return convertedValue; } /** * @see {@link DelegatingRenderer#getDelegateRenderer(javax.faces.context.FacesContext)} */ @Override public Renderer getDelegateRenderer(FacesContext facesContext) { RenderKit renderKit = facesContext.getRenderKit(); Renderer delegateRenderer = renderKit.getRenderer(getDelegateComponentFamily(), getDelegateRendererType()); return delegateRenderer; } @Override public boolean getRendersChildren() { FacesContext facesContext = FacesContext.getCurrentInstance(); Renderer delegateRenderer = getDelegateRenderer(facesContext); return delegateRenderer.getRendersChildren(); } }