1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.uruma.component.base;
17
18 import org.seasar.uruma.annotation.ComponentAttribute;
19 import org.seasar.uruma.component.UIComponent;
20 import org.seasar.uruma.component.UIComponentContainer;
21 import org.seasar.uruma.context.PartContext;
22 import org.seasar.uruma.context.WidgetHandle;
23 import org.seasar.uruma.context.WindowContext;
24 import org.seasar.uruma.core.UrumaConstants;
25 import org.seasar.uruma.core.UrumaMessageCodes;
26 import org.seasar.uruma.log.UrumaLogger;
27 import org.seasar.uruma.renderer.Renderer;
28 import org.seasar.uruma.renderer.RendererExtender;
29 import org.seasar.uruma.util.AssertionUtil;
30
31
32
33
34
35
36 public abstract class AbstractUIComponent extends AbstractUIElement implements
37 UIComponent {
38 private UrumaLogger logger = UrumaLogger.getLogger(getClass());
39
40 private UIComponentContainer parent;
41
42 @ComponentAttribute
43 private String id;
44
45 @ComponentAttribute
46 private String style;
47
48 private Renderer renderer;
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 protected void doPreRender(final WidgetHandle parent,
68 final WindowContext context) {
69 }
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 protected void doRender(final WidgetHandle parent, final PartContext context) {
91 }
92
93
94
95
96
97 public void preRender(final WidgetHandle parent, final WindowContext context) {
98 if (logger.isDebugEnabled()) {
99 logger.log(UrumaMessageCodes.PRE_RENDER_START, this);
100 }
101
102 setupId();
103
104 WidgetHandle handle = getRenderer().preRender(this, parent, context);
105 if (handle != null) {
106 context.putWidgetHandle(handle);
107 }
108
109 doPreRender(parent, context);
110
111 if (logger.isDebugEnabled()) {
112 logger.log(UrumaMessageCodes.PRE_RENDER_END, this);
113 }
114 }
115
116
117
118
119
120 public void render(final WidgetHandle parent, final PartContext context) {
121 if (logger.isDebugEnabled()) {
122 logger.log(UrumaMessageCodes.RENDER_START, this);
123 }
124
125 setupId();
126
127 WidgetHandle handle = getRenderer().render(this, parent, context);
128 if (handle != null) {
129 context.putWidgetHandle(handle);
130 }
131
132 doRender(parent, context);
133
134 RendererExtender.doExtRender(this, handle, context);
135
136 getRenderer().renderAfter(handle, this, parent, context);
137
138 if (logger.isDebugEnabled()) {
139 logger.log(UrumaMessageCodes.RENDER_END, this);
140 }
141 }
142
143
144
145
146 public String getId() {
147 return this.id;
148 }
149
150
151
152
153 public UIComponentContainer getParent() {
154 return parent;
155 }
156
157
158
159
160 public Renderer getRenderer() {
161 return this.renderer;
162 }
163
164
165
166
167 public String getStyle() {
168 return this.style;
169 }
170
171
172
173
174 public void setId(final String id) {
175 this.id = id;
176 }
177
178
179
180
181 public void setParent(final UIComponentContainer parent) {
182 this.parent = parent;
183 }
184
185
186
187
188 public void setRenderer(final Renderer renderer) {
189 AssertionUtil.assertNotNull("renderer", renderer);
190 this.renderer = renderer;
191 }
192
193
194
195
196 public void setStyle(final String style) {
197 this.style = style;
198 }
199
200 private void setupId() {
201 if (this.id == null) {
202 setId(getClass().getName() + UrumaConstants.AT_MARK
203 + Integer.toHexString(hashCode()));
204 }
205 }
206
207
208
209
210 @Override
211 public String toString() {
212 return getPath() + " id:" + getId();
213 }
214 }