1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.uif.lifecycle;
17
18 import java.util.LinkedHashSet;
19 import java.util.Queue;
20 import java.util.Set;
21
22 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
23 import org.kuali.rice.krad.uif.UifConstants;
24 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle.LifecycleEvent;
25 import org.kuali.rice.krad.uif.util.RecycleUtils;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class FinalizeComponentPhase extends ViewLifecyclePhaseBase {
43
44
45
46
47
48
49
50 private RenderComponentPhase renderPhase;
51
52
53
54
55 @Override
56 public void recycle() {
57 super.recycle();
58 renderPhase = null;
59 }
60
61
62
63
64
65
66 @Override
67 public String getViewPhase() {
68 return UifConstants.ViewPhases.FINALIZE;
69 }
70
71
72
73
74
75
76 @Override
77 public String getStartViewStatus() {
78 return UifConstants.ViewStatus.MODEL_APPLIED;
79 }
80
81
82
83
84
85
86 @Override
87 public String getEndViewStatus() {
88 return UifConstants.ViewStatus.FINAL;
89 }
90
91
92
93
94
95
96 @Override
97 public LifecycleEvent getEventToNotify() {
98 return LifecycleEvent.LIFECYCLE_COMPLETE;
99 }
100
101
102
103
104 @Override
105 protected void verifyCompleted() {
106 super.verifyCompleted();
107
108 if (renderPhase != null) {
109 renderPhase.verifyCompleted();
110 }
111 }
112
113
114
115
116 @Override
117 protected void initializeSuccessors(Queue<ViewLifecyclePhase> successors) {
118 super.initializeSuccessors(successors);
119
120 if (ViewLifecycle.isRenderInLifecycle()) {
121 RenderComponentPhase parentRenderPhase = null;
122
123 ViewLifecyclePhase predecessor = getPredecessor();
124 if (predecessor instanceof FinalizeComponentPhase) {
125 parentRenderPhase = ((FinalizeComponentPhase) predecessor).renderPhase;
126 }
127
128 @SuppressWarnings("unchecked") Set<String> pendingChildren = RecycleUtils.getInstance(LinkedHashSet.class);
129 for (ViewLifecyclePhase successor : successors) {
130 boolean skipSuccessor;
131 if (successor instanceof ViewLifecyclePhaseBase) {
132 skipSuccessor = ((ViewLifecyclePhaseBase) successor).shouldSkipLifecycle();
133 } else {
134
135 skipSuccessor = successor.getElement().skipLifecycle();
136 }
137
138
139
140 if (skipSuccessor) {
141 continue;
142 }
143
144
145 if (!pendingChildren.add(successor.getParentPath())) {
146 ViewLifecycle.reportIllegalState(
147 "Successor is already pending " + pendingChildren + "\n" + successor + "\n" + this);
148 }
149 }
150
151 renderPhase = (RenderComponentPhase) KRADServiceLocatorWeb.getViewLifecyclePhaseBuilder().buildPhase(
152 UifConstants.ViewPhases.RENDER, getElement(), getParent(), getParentPath(), getRefreshPaths());
153 renderPhase.prepareRenderPhase(parentRenderPhase, pendingChildren);
154
155 trace("create-render " + getElement().getId() + " " + pendingChildren);
156 }
157
158 if (successors.isEmpty() && renderPhase != null) {
159 successors.add(renderPhase);
160 }
161 }
162
163 }