View Javadoc

1   /*
2    * Copyright 2004-2006 The Apache Software Foundation.
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, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.apache.myfaces.lifecycle;
18  
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import javax.faces.event.PhaseEvent;
23  import javax.faces.event.PhaseId;
24  import javax.faces.event.PhaseListener;
25  
26  public class InstrumentingPhaseListener implements PhaseListener
27  {
28      private static final long serialVersionUID = -3222250142846233648L;
29      private PhaseId listenPhaseId = null;
30      private PhaseId eventPhaseId = null;
31      private boolean before = true;
32      private boolean after = true;
33      private boolean render = false;
34      private boolean complete = false;
35      private List<PhaseId> afterPhases = new ArrayList<PhaseId>();
36      private List<PhaseId> beforePhases = new ArrayList<PhaseId>();
37  
38      public InstrumentingPhaseListener()
39      {
40      }
41  
42      public InstrumentingPhaseListener(PhaseId interestingPhaseId)
43      {
44          this.listenPhaseId = interestingPhaseId;
45      }
46  
47      public void afterPhase(PhaseEvent event)
48      {
49          afterPhases.add(event.getPhaseId());
50          if (null != eventPhaseId && event.getPhaseId().equals(eventPhaseId))
51          {
52              if (after && render)
53              {
54                  event.getFacesContext().renderResponse();
55              }
56              else if (after && complete)
57              {
58                  event.getFacesContext().responseComplete();
59              }
60          }
61      }
62  
63      public void beforePhase(PhaseEvent event)
64      {
65          beforePhases.add(event.getPhaseId());
66          if (null != eventPhaseId && event.getPhaseId().equals(eventPhaseId))
67          {
68              if (before && render)
69              {
70                  event.getFacesContext().renderResponse();
71              }
72              else if (before && complete)
73              {
74                  event.getFacesContext().responseComplete();
75              }
76          }
77      }
78  
79      public boolean isBefore()
80      {
81          return before;
82      }
83  
84      public void setBefore(boolean before)
85      {
86          this.before = before;
87      }
88  
89      public boolean isAfter()
90      {
91          return after;
92      }
93  
94      public void setAfter(boolean after)
95      {
96          this.after = after;
97      }
98  
99      public boolean isComplete()
100     {
101         return complete;
102     }
103 
104     public void setComplete(boolean complete)
105     {
106         this.complete = complete;
107     }
108 
109     public boolean isRender()
110     {
111         return render;
112     }
113 
114     public void setRender(boolean render)
115     {
116         this.render = render;
117     }
118 
119     public PhaseId getPhaseId()
120     {
121         if (null == listenPhaseId)
122         {
123             return PhaseId.ANY_PHASE;
124         }
125         return listenPhaseId;
126     }
127 
128     public void setEventPhaseId(PhaseId phaseId)
129     {
130         this.eventPhaseId = phaseId;
131     }
132 
133     public List<PhaseId> getAfterPhases()
134     {
135         return afterPhases;
136     }
137 
138     public List<PhaseId> getBeforePhases()
139     {
140         return beforePhases;
141     }
142 
143 }