1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }