Coverage Report - org.seasar.teeda.core.portlet.FacesPortlet
 
Classes in this File Line Coverage Branch Coverage Complexity
FacesPortlet
0%
0/263
0%
0/104
3.154
 
 1  
 /*
 2  
  * Copyright 2004-2011 the Seasar Foundation and the Others.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 13  
  * either express or implied. See the License for the specific language
 14  
  * governing permissions and limitations under the License.
 15  
  */
 16  
 package org.seasar.teeda.core.portlet;
 17  
 
 18  
 import java.io.IOException;
 19  
 import java.util.ArrayList;
 20  
 import java.util.Enumeration;
 21  
 import java.util.HashMap;
 22  
 import java.util.Iterator;
 23  
 import java.util.List;
 24  
 import java.util.Map;
 25  
 
 26  
 import javax.faces.FactoryFinder;
 27  
 import javax.faces.application.FacesMessage;
 28  
 import javax.faces.application.StateManager;
 29  
 import javax.faces.context.ExternalContext;
 30  
 import javax.faces.context.FacesContext;
 31  
 import javax.faces.context.FacesContextFactory;
 32  
 import javax.faces.internal.WebAppUtil;
 33  
 import javax.faces.internal.WindowIdUtil;
 34  
 import javax.faces.internal.scope.PageScope;
 35  
 import javax.faces.internal.scope.RedirectScope;
 36  
 import javax.faces.lifecycle.Lifecycle;
 37  
 import javax.faces.lifecycle.LifecycleFactory;
 38  
 import javax.faces.webapp.FacesServlet;
 39  
 import javax.portlet.ActionRequest;
 40  
 import javax.portlet.ActionResponse;
 41  
 import javax.portlet.GenericPortlet;
 42  
 import javax.portlet.PortletContext;
 43  
 import javax.portlet.PortletException;
 44  
 import javax.portlet.PortletRequest;
 45  
 import javax.portlet.PortletSession;
 46  
 import javax.portlet.RenderRequest;
 47  
 import javax.portlet.RenderResponse;
 48  
 import javax.servlet.ServletException;
 49  
 
 50  
 import org.seasar.framework.log.Logger;
 51  
 import org.seasar.teeda.core.JsfConstants;
 52  
 import org.seasar.teeda.core.util.DIContainerUtil;
 53  
 import org.seasar.teeda.core.util.ErrorPageManager;
 54  
 import org.seasar.teeda.core.util.NullErrorPageManagerImpl;
 55  
 import org.seasar.teeda.core.util.PortletUtil;
 56  
 
 57  
 /**
 58  
  * @author shinsuke
 59  
  *
 60  
  */
 61  0
 public class FacesPortlet extends GenericPortlet {
 62  
     /**
 63  
      * Logger for this class
 64  
      */
 65  0
     private static final Logger logger = Logger.getLogger(FacesPortlet.class);
 66  
 
 67  
     public static final String PORTLET_CONFIG = "javax.portlet.PortletConfig";
 68  
 
 69  0
     public static final String VIEW_ID = FacesPortlet.class.getName() +
 70  
             ".VIEW_ID";
 71  
 
 72  0
     public static final String DEFAULT_PAGE = FacesPortlet.class.getName() +
 73  
             ".DEFAULT_PAGE";
 74  
 
 75  
     public static final String DEFAULT_VIEW_PAGE = "view-page";
 76  
 
 77  
     public static final String DEFAULT_EDIT_PAGE = "edit-page";
 78  
 
 79  
     public static final String DEFAULT_HELP_PAGE = "help-page";
 80  
 
 81  0
     public static final String FACES_PORTLET_STATE_PREFIX = FacesPortlet.class
 82  
             .getName() +
 83  
             ".FACES_PORTLET_STATE" + "-";
 84  
 
 85  0
     public static final String PREVIOUS_PORTLET_MODE = FacesPortlet.class
 86  
             .getName() +
 87  
             ".PREVIOUS_PORTLET_MODE";
 88  
 
 89  0
     public static final String CURRENT_PORTLET_MODE = FacesPortlet.class
 90  
             .getName() +
 91  
             ".CURRENT_PORTLET_MODE";
 92  
 
 93  0
     public static final String EXCLUDED_ATTRIBUTE_LIST = FacesPortlet.class
 94  
             .getName() +
 95  
             ".EXCLUDED_ATTRIBUTE_LIST";
 96  
 
 97  0
     public static final String REDEPLOYED_PORTLET = FacesPortlet.class
 98  
             .getName() +
 99  
             ".REDEPLOYED_PORTLET";
 100  
 
 101  0
     public static final String RENDER_PARAMETER = FacesPortlet.class.getName() +
 102  
             ".RENDER_PARAMETER";
 103  
 
 104  
     protected FacesContextFactory facesContextFactory;
 105  
 
 106  
     protected Lifecycle lifecycle;
 107  
 
 108  0
     private String defaultViewPage = null;
 109  
 
 110  0
     private String defaultEditPage = null;
 111  
 
 112  0
     private String defaultHelpPage = null;
 113  
 
 114  
     public void init() throws PortletException {
 115  0
         super.init();
 116  
 
 117  
         // Load default pages
 118  0
         defaultViewPage = getPortletConfig()
 119  
                 .getInitParameter(DEFAULT_VIEW_PAGE);
 120  0
         defaultEditPage = getPortletConfig()
 121  
                 .getInitParameter(DEFAULT_EDIT_PAGE);
 122  0
         defaultHelpPage = getPortletConfig()
 123  
                 .getInitParameter(DEFAULT_HELP_PAGE);
 124  0
         if (null == defaultViewPage) {
 125  
             // A Faces Portlet is required to have at least the default page
 126  0
             throw new PortletException("Portlet " +
 127  
                     getPortletConfig().getPortletName() +
 128  
                     " is incorrectly configured. No default View page is defined.");
 129  
         }
 130  0
         if (null == defaultEditPage) {
 131  0
             defaultEditPage = defaultViewPage;
 132  
         }
 133  0
         if (null == defaultHelpPage) {
 134  0
             defaultHelpPage = defaultViewPage;
 135  
         }
 136  
 
 137  
         // Intialize Faces(from FacesServlet)
 138  
         LifecycleFactory lifecycleFactory;
 139  
         try {
 140  0
             facesContextFactory = (FacesContextFactory) WebAppUtil
 141  
                     .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
 142  0
             lifecycleFactory = (LifecycleFactory) WebAppUtil
 143  
                     .getFactory(FactoryFinder.LIFECYCLE_FACTORY);
 144  0
             String lifecycleId = getLifecycleId(getPortletContext());
 145  0
             lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
 146  0
         } catch (ServletException e) {
 147  0
             throw new PortletException(e);
 148  0
         }
 149  0
     }
 150  
 
 151  
     protected String getLifecycleId(PortletContext portletContext) {
 152  0
         String lifecycleId = portletContext
 153  
                 .getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
 154  0
         if (lifecycleId == null) {
 155  0
             lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
 156  
         }
 157  0
         return lifecycleId;
 158  
     }
 159  
 
 160  
     public void destroy() {
 161  0
         super.destroy();
 162  0
         FactoryFinder.releaseFactories();
 163  0
         facesContextFactory = null;
 164  0
         lifecycle = null;
 165  0
         defaultViewPage = null;
 166  0
         defaultEditPage = null;
 167  0
         defaultHelpPage = null;
 168  0
     }
 169  
 
 170  
     //
 171  
     // Render Methods
 172  
     //
 173  
 
 174  
     protected void doEdit(RenderRequest request, RenderResponse response)
 175  
             throws PortletException, IOException {
 176  0
         setContentType(request, response);
 177  0
         setDefaultPage(request, defaultEditPage);
 178  0
         renderFaces(request, response);
 179  0
     }
 180  
 
 181  
     protected void doHelp(RenderRequest request, RenderResponse response)
 182  
             throws PortletException, IOException {
 183  0
         setContentType(request, response);
 184  0
         setDefaultPage(request, defaultHelpPage);
 185  0
         renderFaces(request, response);
 186  0
     }
 187  
 
 188  
     protected void doView(RenderRequest request, RenderResponse response)
 189  
             throws PortletException, IOException {
 190  0
         setContentType(request, response);
 191  0
         setDefaultPage(request, defaultViewPage);
 192  0
         renderFaces(request, response);
 193  0
     }
 194  
 
 195  
     protected void setContentType(RenderRequest request, RenderResponse response) {
 196  
 
 197  0
         if (response.getContentType() == null) {
 198  0
             String portalPreferredContentType = request
 199  
                     .getResponseContentType();
 200  0
             if (portalPreferredContentType != null) {
 201  0
                 response.setContentType(portalPreferredContentType);
 202  
             } else {
 203  0
                 response.setContentType("text/html");
 204  
             }
 205  
         }
 206  0
     }
 207  
 
 208  
     protected void setDefaultPage(PortletRequest request, String page) {
 209  0
         if (request.getAttribute(DEFAULT_PAGE) == null) {
 210  0
             request.setAttribute(DEFAULT_PAGE, page);
 211  
         }
 212  0
     }
 213  
 
 214  
     private void storePortletConfig(PortletRequest request) {
 215  0
         request.setAttribute(PORTLET_CONFIG, getPortletConfig());
 216  0
     }
 217  
 
 218  
     private void setCurrentPortletMode(PortletRequest request) {
 219  0
         request.setAttribute(CURRENT_PORTLET_MODE, request.getPortletMode()
 220  
                 .toString());
 221  0
     }
 222  
 
 223  
     protected void renderFaces(RenderRequest request, RenderResponse response)
 224  
             throws PortletException, java.io.IOException {
 225  0
         if (logger.isDebugEnabled()) {
 226  0
             logger.debug("called renderFaces..");
 227  
         }
 228  
 
 229  
         // create excluded list
 230  0
         createExcludedAttributeList(request);
 231  
 
 232  
         // restore error info
 233  0
         restoreErrorInfo(request);
 234  
 
 235  0
         storePortletConfig(request);
 236  0
         setCurrentPortletMode(request);
 237  
 
 238  0
         FacesContext facesContext = facesContextFactory.getFacesContext(
 239  
                 getPortletContext(), request, response, lifecycle);
 240  0
         request.setAttribute(JsfConstants.FACES_CONTEXT, facesContext);
 241  
 
 242  0
         String redirectPath = null;
 243  
         try {
 244  0
             WindowIdUtil.setupWindowId(facesContext.getExternalContext());
 245  0
             final Map pageScope = PageScope.getOrCreateContext(facesContext);
 246  0
             synchronized (pageScope) {
 247  0
                 restoreFacesState(facesContext);
 248  0
                 lifecycle.render(facesContext);
 249  0
             }
 250  0
             saveFacesState(facesContext);
 251  0
         } catch (Throwable e) {
 252  0
             handleException(facesContext, e);
 253  0
         } finally {
 254  0
             redirectPath = RedirectScope.getRedirectingPath(facesContext);
 255  0
             if (redirectPath != null) {
 256  
                 //remove redirect scope
 257  0
                 RedirectScope.removeContext(facesContext);
 258  
             }
 259  0
             facesContext.release();
 260  0
             request.getPortletSession().setAttribute(PREVIOUS_PORTLET_MODE,
 261  
                     request.getPortletMode().toString());
 262  0
             request.getPortletSession().setAttribute(REDEPLOYED_PORTLET,
 263  
                     Boolean.FALSE);
 264  0
         }
 265  
 
 266  
         // redirect
 267  0
         if (redirectPath != null) {
 268  0
             redirectRenderFaces(request, response, redirectPath);
 269  
         }
 270  
 
 271  
         // clear error info
 272  0
         clearErrorInfo(request);
 273  0
     }
 274  
 
 275  
     protected void redirectRenderFaces(RenderRequest request,
 276  
             RenderResponse response, String viewId) throws PortletException,
 277  
             java.io.IOException {
 278  0
         if (logger.isDebugEnabled()) {
 279  0
             logger.debug("called redirectRenderFaces.. viewId is " + viewId);
 280  
         }
 281  
 
 282  0
         List excludedNameList = (List) request
 283  
                 .getAttribute(EXCLUDED_ATTRIBUTE_LIST);
 284  
         // clear attribute
 285  0
         for (Enumeration e = request.getAttributeNames(); e.hasMoreElements();) {
 286  0
             String key = (String) e.nextElement();
 287  0
             if (!excludedNameList.contains(key)) {
 288  0
                 request.removeAttribute(key);
 289  
             }
 290  
         }
 291  
         // call renderFaces again
 292  0
         request.getPortletSession().removeAttribute(
 293  
                 FacesPortlet.PREVIOUS_PORTLET_MODE);
 294  0
         request.setAttribute(FacesPortlet.DEFAULT_PAGE, viewId);
 295  0
         renderFaces(request, response);
 296  
 
 297  0
     }
 298  
 
 299  
     protected void restoreFacesState(FacesContext facesContext) {
 300  
 
 301  0
         Map sessionMap = facesContext.getExternalContext().getSessionMap();
 302  0
         Map requestMap = facesContext.getExternalContext().getRequestMap();
 303  
 
 304  0
         String currentPortletMode = (String) requestMap
 305  
                 .get(CURRENT_PORTLET_MODE);
 306  0
         String previousPortletMode = (String) sessionMap
 307  
                 .get(PREVIOUS_PORTLET_MODE);
 308  
 
 309  0
         FacesPortletState state = null;
 310  0
         if (previousPortletMode != null &&
 311  
                 previousPortletMode.equals(currentPortletMode)) {
 312  0
             state = (FacesPortletState) sessionMap
 313  
                     .get(FACES_PORTLET_STATE_PREFIX + currentPortletMode);
 314  0
             if (state == null) {
 315  
                 // from request parameter
 316  0
                 Map requestParameterMap = facesContext.getExternalContext()
 317  
                         .getRequestParameterMap();
 318  0
                 String viewId = (String) requestParameterMap.get(VIEW_ID);
 319  0
                 if (viewId != null && !checkSessionState(facesContext)) {
 320  0
                     requestMap.put(VIEW_ID, viewId);
 321  
                 }
 322  
 
 323  0
                 restoreView(facesContext);
 324  0
                 return;
 325  
             } else {
 326  
                 // get viewId
 327  0
                 String viewId = state.getViewId();
 328  0
                 requestMap.put(VIEW_ID, viewId);
 329  
 
 330  
                 // restore view
 331  0
                 restoreView(facesContext);
 332  
 
 333  
                 // restore message information
 334  0
                 Iterator clientIds = state.getClientIds();
 335  0
                 while (clientIds.hasNext()) {
 336  0
                     String clientId = (String) clientIds.next();
 337  0
                     Iterator msgs = state.getMessages(clientId);
 338  0
                     while (msgs.hasNext()) {
 339  0
                         facesContext.addMessage(clientId, (FacesMessage) msgs
 340  
                                 .next());
 341  
                     }
 342  
                 }
 343  
 
 344  
                 // restore request attributes
 345  0
                 copyMap(state.getRequestMap(), facesContext
 346  
                         .getExternalContext().getRequestMap(), new ArrayList());
 347  
 
 348  
                 // restore state to UIViewRoot
 349  0
                 Object s = state.getState();
 350  0
                 if (s != null) {
 351  0
                     facesContext.getViewRoot().processRestoreState(
 352  
                             facesContext, s);
 353  
                 }
 354  
 
 355  
             }
 356  
         } else {
 357  
             // display new page
 358  0
             restoreDefaultFacesState(facesContext);
 359  
         }
 360  
 
 361  0
     }
 362  
 
 363  
     protected void restoreDefaultFacesState(FacesContext facesContext) {
 364  0
         ExternalContext externalContext = facesContext.getExternalContext();
 365  0
         Map requestMap = externalContext.getRequestMap();
 366  
         // get default page
 367  0
         String viewId = (String) externalContext.getRequestMap().get(
 368  
                 DEFAULT_PAGE);
 369  0
         requestMap.put(VIEW_ID, viewId);
 370  
 
 371  
         // remove all states in session
 372  0
         for (Iterator i = externalContext.getSessionMap().entrySet().iterator(); i
 373  0
                 .hasNext();) {
 374  0
             Map.Entry e = (Map.Entry) i.next();
 375  0
             if (e.getKey() instanceof String) {
 376  0
                 String key = (String) e.getKey();
 377  0
                 if (key.startsWith(FACES_PORTLET_STATE_PREFIX)) {
 378  0
                     externalContext.getSessionMap().remove(key);
 379  
                 }
 380  
             }
 381  
         }
 382  
 
 383  
         // remove redirect scope
 384  0
         if (RedirectScope.isRedirecting(facesContext)) {
 385  0
             RedirectScope.removeContext(facesContext);
 386  
         }
 387  
 
 388  0
         restoreView(facesContext);
 389  0
     }
 390  
 
 391  
     private void restoreView(FacesContext facesContext) {
 392  0
         facesContext.renderResponse();
 393  
         // call restore phase only
 394  0
         lifecycle.execute(facesContext);
 395  0
     }
 396  
 
 397  
     //
 398  
     // Action Methods
 399  
     //
 400  
 
 401  
     public void processAction(ActionRequest request, ActionResponse response)
 402  
             throws PortletException, IOException {
 403  0
         if (logger.isDebugEnabled()) {
 404  0
             logger.debug("called processAction..");
 405  
         }
 406  
 
 407  
         // check session timeout
 408  0
         if (checkSessionState(request)) {
 409  0
             return;
 410  
         }
 411  
 
 412  0
         String viewId = request.getParameter(VIEW_ID);
 413  0
         if (viewId != null) {
 414  0
             request.setAttribute(VIEW_ID, viewId);
 415  0
             executeFaces(request, response);
 416  
         } else {
 417  0
             if (logger.isDebugEnabled()) {
 418  0
                 logger.debug("skip processAction because viewId is null.");
 419  
             }
 420  
         }
 421  0
     }
 422  
 
 423  
     protected void executeFaces(ActionRequest request, ActionResponse response)
 424  
             throws PortletException, IOException {
 425  
 
 426  0
         storePortletConfig(request);
 427  0
         setCurrentPortletMode(request);
 428  
 
 429  
         // create excluded list
 430  0
         createExcludedAttributeList(request);
 431  
 
 432  0
         FacesContext facesContext = facesContextFactory.getFacesContext(
 433  
                 getPortletContext(), request, response, lifecycle);
 434  
 
 435  
         try {
 436  0
             WindowIdUtil.setupWindowId(facesContext.getExternalContext());
 437  0
             final Map pageScope = PageScope.getOrCreateContext(facesContext);
 438  0
             synchronized (pageScope) {
 439  0
                 lifecycle.execute(facesContext);
 440  0
             }
 441  0
         } catch (Throwable e) {
 442  0
             handleException(facesContext, e);
 443  0
         } finally {
 444  0
             if (!facesContext.getResponseComplete()) {
 445  0
                 request.setAttribute(VIEW_ID, facesContext.getViewRoot()
 446  
                         .getViewId());
 447  0
                 saveFacesState(facesContext);
 448  0
                 if (request.getParameter(RENDER_PARAMETER) != null) {
 449  0
                     setRenderParameters(request, response);
 450  
                 }
 451  0
             } else if (RedirectScope.isRedirecting(facesContext)) {
 452  0
                 saveFacesState(facesContext);
 453  
             }
 454  
             // release the FacesContext instance for this request
 455  0
             facesContext.release();
 456  0
         }
 457  0
     }
 458  
 
 459  
     protected void saveFacesState(FacesContext facesContext) {
 460  0
         Map sessionMap = facesContext.getExternalContext().getSessionMap();
 461  0
         Map requestMap = facesContext.getExternalContext().getRequestMap();
 462  
 
 463  
         // save portlet mode
 464  0
         String currentPortletMode = (String) requestMap
 465  
                 .get(CURRENT_PORTLET_MODE);
 466  0
         sessionMap.put(PREVIOUS_PORTLET_MODE, currentPortletMode);
 467  
 
 468  0
         FacesPortletState state = new FacesPortletState();
 469  
 
 470  0
         if (!PortletUtil.isRender(facesContext)) {
 471  
             // save message information from this FacesContext
 472  0
             Iterator clientIds = facesContext.getClientIdsWithMessages();
 473  0
             while (clientIds.hasNext()) {
 474  0
                 String clientId = (String) clientIds.next();
 475  0
                 Iterator msgs = facesContext.getMessages(clientId);
 476  0
                 while (msgs.hasNext()) {
 477  0
                     state.addMessage(clientId, (FacesMessage) msgs.next());
 478  
                 }
 479  
             }
 480  
         }
 481  
 
 482  0
         String redirectPath = RedirectScope.getRedirectingPath(facesContext);
 483  0
         if (redirectPath == null) {
 484  0
             state.setViewId(facesContext.getViewRoot().getViewId());
 485  
 
 486  0
             List excludedNameList = (List) requestMap
 487  
                     .get(EXCLUDED_ATTRIBUTE_LIST);
 488  
             // save request attributes
 489  0
             Map map = new HashMap();
 490  0
             copyMap(requestMap, map, excludedNameList);
 491  0
             state.setRequestMap(map);
 492  
 
 493  
             // save state
 494  0
             StateManager stateManager = facesContext.getApplication()
 495  
                     .getStateManager();
 496  0
             stateManager.saveSerializedView(facesContext);
 497  
 
 498  
             // store state to FacesPortletState
 499  0
             state.setState(facesContext.getViewRoot().processSaveState(
 500  
                     facesContext));
 501  
         } else {
 502  
             // replace viewId
 503  0
             state.setViewId(redirectPath);
 504  
 
 505  
             // save request attributes
 506  0
             Map map = new HashMap();
 507  0
             state.setRequestMap(map);
 508  
 
 509  
             // set state to null
 510  0
             state.setState(null);
 511  
         }
 512  
 
 513  
         // store state to session
 514  0
         sessionMap.put(FACES_PORTLET_STATE_PREFIX + currentPortletMode, state);
 515  
 
 516  0
     }
 517  
 
 518  
     //
 519  
     // Others
 520  
     //
 521  
 
 522  
     protected void handleException(FacesContext context, Throwable e)
 523  
             throws PortletException, IOException {
 524  0
         ErrorPageManager errorPageManager = null;
 525  
         try {
 526  0
             errorPageManager = (ErrorPageManager) DIContainerUtil
 527  
                     .getComponent(ErrorPageManager.class);
 528  0
         } catch (Exception e1) {
 529  0
         }
 530  0
         if (errorPageManager == null) {
 531  0
             errorPageManager = new NullErrorPageManagerImpl();
 532  
         }
 533  
 
 534  0
         ExternalContext extContext = context.getExternalContext();
 535  0
         if (errorPageManager.handleException(e, context, extContext)) {
 536  0
             context.responseComplete();
 537  
         } else {
 538  0
             if (e instanceof IOException) {
 539  0
                 throw (IOException) e;
 540  0
             } else if (e instanceof PortletException) {
 541  0
                 throw (PortletException) e;
 542  0
             } else if (e.getMessage() != null) {
 543  0
                 throw new PortletException(e.getMessage(), e);
 544  
             }
 545  0
             throw new PortletException(e);
 546  
         }
 547  0
     }
 548  
 
 549  
     protected boolean checkSessionState(PortletRequest request) {
 550  0
         return request.getPortletSession(false) == null ||
 551  
                 (request.getPortletSession().getAttribute(REDEPLOYED_PORTLET) == null);
 552  
     }
 553  
 
 554  
     protected boolean checkSessionState(FacesContext context) {
 555  0
         return context.getExternalContext().getSession(false) == null ||
 556  
                 (context.getExternalContext().getSessionMap().get(
 557  
                         REDEPLOYED_PORTLET) == null);
 558  
     }
 559  
 
 560  
     protected void createExcludedAttributeList(PortletRequest request) {
 561  
         // create excluded list
 562  0
         ArrayList excludedNameList = new ArrayList();
 563  0
         Enumeration enu = request.getAttributeNames();
 564  0
         while (enu.hasMoreElements()) {
 565  0
             excludedNameList.add(enu.nextElement());
 566  
         }
 567  
         // reserved names
 568  0
         excludedNameList.add(EXCLUDED_ATTRIBUTE_LIST);
 569  0
         excludedNameList.add(JsfConstants.FACES_CONTEXT);
 570  0
         request.setAttribute(EXCLUDED_ATTRIBUTE_LIST, excludedNameList);
 571  0
     }
 572  
 
 573  
     private void copyMap(Map fromMap, Map toMap, List excludedNameList) {
 574  0
         for (Iterator i = fromMap.entrySet().iterator(); i.hasNext();) {
 575  0
             Map.Entry e = (Map.Entry) i.next();
 576  0
             if (!toMap.containsKey((String) e.getKey()) &&
 577  
                     !excludedNameList.contains((String) e.getKey())) {
 578  0
                 toMap.put(e.getKey(), e.getValue());
 579  
             }
 580  
         }
 581  0
     }
 582  
 
 583  
     protected void setRenderParameters(ActionRequest request,
 584  
             ActionResponse response) {
 585  0
         Enumeration enu = request.getParameterNames();
 586  0
         while (enu.hasMoreElements()) {
 587  0
             String key = (String) enu.nextElement();
 588  0
             response.setRenderParameter(key, request.getParameter(key));
 589  
         }
 590  0
     }
 591  
 
 592  
     protected void restoreErrorInfo(PortletRequest request) {
 593  0
         PortletSession portletSession = request.getPortletSession();
 594  0
         Throwable exception = (Throwable) portletSession
 595  
                 .getAttribute(JsfConstants.ERROR_EXCEPTION);
 596  0
         if (exception != null) {
 597  0
             request.setAttribute(JsfConstants.ERROR_EXCEPTION, exception);
 598  0
             request.setAttribute(JsfConstants.ERROR_EXCEPTION_TYPE, exception
 599  
                     .getClass());
 600  0
             request.setAttribute(JsfConstants.ERROR_MESSAGE, exception
 601  
                     .getMessage());
 602  
         }
 603  0
     }
 604  
 
 605  
     protected void clearErrorInfo(PortletRequest request) {
 606  0
         request.getPortletSession().removeAttribute(
 607  
                 JsfConstants.ERROR_EXCEPTION);
 608  0
     }
 609  
 }