001 package org.apache.myfaces.tobago.renderkit; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.commons.logging.Log; 021 import org.apache.commons.logging.LogFactory; 022 import org.apache.myfaces.tobago.renderkit.html.HtmlConstants; 023 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes; 024 025 import javax.faces.render.ResponseStateManager; 026 import javax.faces.context.FacesContext; 027 import javax.faces.context.ResponseWriter; 028 import javax.faces.application.StateManager; 029 import java.util.Map; 030 import java.io.IOException; 031 032 /* 033 * Date: 21.05.2006 034 * Time: 10:59:19 035 */ 036 public class TobagoResponseStateManager extends ResponseStateManager { 037 private static final Log LOG = LogFactory.getLog(TobagoResponseStateManager.class); 038 039 private static final String TREE_PARAM = "jsf_tree"; 040 private static final String STATE_PARAM = "jsf_state"; 041 private static final String VIEWID_PARAM = "jsf_viewid"; 042 043 public Object getTreeStructureToRestore(FacesContext facescontext, String viewId) { 044 Map requestMap = facescontext.getExternalContext().getRequestParameterMap(); 045 Object requestViewId = requestMap.get(VIEWID_PARAM); 046 if (requestViewId == null || !requestViewId.equals(viewId)) { 047 //no saved state or state of different viewId 048 return null; 049 } 050 051 return requestMap.get(TREE_PARAM); 052 053 } 054 055 public Object getComponentStateToRestore(FacesContext facesContext) { 056 Map requestMap = facesContext.getExternalContext().getRequestParameterMap(); 057 return requestMap.get(STATE_PARAM); 058 } 059 060 public void writeState(FacesContext facescontext, 061 StateManager.SerializedView serializedview) throws IOException { 062 ResponseWriter responseWriter = facescontext.getResponseWriter(); 063 Object treeStruct = serializedview.getStructure(); 064 Object compStates = serializedview.getState(); 065 066 if (treeStruct != null) { 067 if (treeStruct instanceof String) { 068 responseWriter.startElement(HtmlConstants.INPUT, null); 069 responseWriter.writeAttribute(HtmlAttributes.TYPE, "hidden", null); 070 responseWriter.writeAttribute(HtmlAttributes.NAME, TREE_PARAM, null); 071 responseWriter.writeAttribute(HtmlAttributes.ID, TREE_PARAM, null); 072 responseWriter.writeAttribute(HtmlAttributes.VALUE, treeStruct, null); 073 responseWriter.endElement(HtmlConstants.INPUT); 074 } 075 } else { 076 if (LOG.isDebugEnabled()) { 077 LOG.debug("No tree structure to be saved in client response!"); 078 } 079 } 080 081 if (compStates != null) { 082 if (compStates instanceof String) { 083 responseWriter.startElement(HtmlConstants.INPUT, null); 084 responseWriter.writeAttribute(HtmlAttributes.TYPE, "hidden", null); 085 responseWriter.writeAttribute(HtmlAttributes.NAME, STATE_PARAM, null); 086 responseWriter.writeAttribute(HtmlAttributes.ID, STATE_PARAM, null); 087 responseWriter.writeAttribute(HtmlAttributes.VALUE, compStates, null); 088 responseWriter.endElement(HtmlConstants.INPUT); 089 } 090 } else { 091 if (LOG.isDebugEnabled()) { 092 LOG.debug("No component states to be saved in client response!"); 093 } 094 } 095 096 responseWriter.startElement(HtmlConstants.INPUT, null); 097 responseWriter.writeAttribute(HtmlAttributes.TYPE, "hidden", null); 098 responseWriter.writeAttribute(HtmlAttributes.NAME, VIEWID_PARAM, null); 099 responseWriter.writeAttribute(HtmlAttributes.ID, VIEWID_PARAM, null); 100 responseWriter.writeAttribute(HtmlAttributes.VALUE, facescontext.getViewRoot().getViewId(), null); 101 responseWriter.endElement(HtmlConstants.INPUT); 102 } 103 104 }