View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.custom.ppr;
20  
21  import javax.faces.FacesException;
22  import javax.faces.component.UIViewRoot;
23  import javax.faces.context.FacesContext;
24  import javax.faces.event.PhaseListener;
25  import javax.faces.lifecycle.Lifecycle;
26  
27  /**
28   * A lifecycle wrapper which just decorates the lifecycle passed in to the constructor.
29   * On any ppr request this wrapper will wrap the UIViewRoot of the current view to
30   * make it possible to process just those components in question (affected components).
31   */
32  public class PPRLifecycleWrapper extends Lifecycle
33  {
34      private final Lifecycle delegate;
35  
36      public PPRLifecycleWrapper(Lifecycle delegate)
37      {
38          this.delegate = delegate;
39      }
40  
41      public void addPhaseListener(PhaseListener listener)
42      {
43          this.delegate.addPhaseListener(listener);
44      }
45  
46      public void execute(final FacesContext context) throws FacesException
47      {
48          if (PPRSupport.isPartialRequest(context))
49          {
50              FacesContext wrappedContext = new PPRFacesContextWrapper(context)
51              {
52                  public UIViewRoot getViewRoot()
53                  {
54                      UIViewRoot viewRoot = context.getViewRoot();
55                      if (viewRoot == null)
56                      {
57                          return null;
58                      }
59  
60                      return new PPRViewRootWrapper(viewRoot);
61                  }
62              };
63  
64              this.delegate.execute(wrappedContext);
65          }
66          else
67          {
68              this.delegate.execute(context);
69          }
70      }
71  
72      public PhaseListener[] getPhaseListeners()
73      {
74          return this.delegate.getPhaseListeners();
75      }
76  
77      public void removePhaseListener(PhaseListener listener)
78      {
79          this.delegate.removePhaseListener(listener);
80      }
81  
82      public void render(FacesContext context) throws FacesException
83      {
84          this.delegate.render(context);
85      }
86  }