1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package org.seasar.uruma.renderer.impl; |
17 | |
|
18 | |
import java.util.Stack; |
19 | |
|
20 | |
import org.eclipse.jface.viewers.Viewer; |
21 | |
import org.eclipse.swt.widgets.Widget; |
22 | |
import org.seasar.uruma.annotation.RenderingPolicy.SetTiming; |
23 | |
import org.seasar.uruma.component.EnablesDependable; |
24 | |
import org.seasar.uruma.component.UIComponent; |
25 | |
import org.seasar.uruma.context.PartContext; |
26 | |
import org.seasar.uruma.context.WidgetHandle; |
27 | |
import org.seasar.uruma.core.UrumaMessageCodes; |
28 | |
import org.seasar.uruma.exception.RenderException; |
29 | |
import org.seasar.uruma.log.UrumaLogger; |
30 | |
import org.seasar.uruma.renderer.RendererSupportUtil; |
31 | |
import org.seasar.uruma.util.AssertionUtil; |
32 | |
import org.seasar.uruma.util.ClassUtil; |
33 | |
|
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
|
41 | |
|
42 | |
|
43 | 116 | public abstract class AbstractWidgetRenderer<COMPONENT_TYPE extends UIComponent, WIDGET_TYPE extends Widget> |
44 | |
extends AbstractRenderer { |
45 | 116 | private UrumaLogger logger = UrumaLogger.getLogger(getClass()); |
46 | |
|
47 | 116 | private Stack<Object> renderingContext = new Stack<Object>(); |
48 | |
|
49 | |
|
50 | |
|
51 | |
|
52 | |
|
53 | |
|
54 | |
@SuppressWarnings("unchecked") |
55 | |
public WidgetHandle render(final UIComponent uiComponent, |
56 | |
final WidgetHandle parent, final PartContext context) { |
57 | 1584 | setContext(context); |
58 | |
|
59 | 1584 | inherit((COMPONENT_TYPE) uiComponent); |
60 | |
|
61 | 1584 | Object parentObject = parent.getWidget(); |
62 | 1584 | Widget parentWidget = null; |
63 | |
|
64 | 1584 | if (parentObject instanceof Widget) { |
65 | 1560 | parentWidget = Widget.class.cast(parentObject); |
66 | 24 | } else if (parentObject instanceof Viewer) { |
67 | 24 | parentWidget = Viewer.class.cast(parentObject).getControl(); |
68 | |
} else { |
69 | 0 | throw new RenderException(UrumaMessageCodes.UNSUPPORTED_TYPE_ERROR, |
70 | |
parentObject, Widget.class.getName()); |
71 | |
} |
72 | |
|
73 | 1584 | WIDGET_TYPE widget = createWidget(parentWidget, getStyle(uiComponent)); |
74 | |
|
75 | 1584 | renderWidget((COMPONENT_TYPE) uiComponent, widget); |
76 | |
|
77 | 1584 | WidgetHandle handle = createWidgetHandle(uiComponent, widget); |
78 | |
|
79 | 1584 | if (uiComponent instanceof EnablesDependable) { |
80 | 1368 | setupEnablesDependingDef(handle, (EnablesDependable) uiComponent); |
81 | |
} |
82 | |
|
83 | 1584 | return handle; |
84 | |
} |
85 | |
|
86 | |
|
87 | |
|
88 | |
|
89 | |
|
90 | |
|
91 | |
|
92 | |
|
93 | |
|
94 | |
protected void renderWidget(final COMPONENT_TYPE uiComponent, |
95 | |
final WIDGET_TYPE widget) { |
96 | |
try { |
97 | 1624 | RendererSupportUtil.setAttributes(uiComponent, widget, |
98 | |
SetTiming.RENDER); |
99 | |
|
100 | 1624 | doRender(uiComponent, getWidgetType().cast(widget)); |
101 | |
|
102 | 0 | } catch (Exception ex) { |
103 | 0 | throw new RenderException( |
104 | |
UrumaMessageCodes.EXCEPTION_OCCURED_WITH_REASON, ex, ex |
105 | |
.getMessage()); |
106 | 1624 | } |
107 | 1624 | } |
108 | |
|
109 | |
|
110 | |
|
111 | |
|
112 | |
|
113 | |
|
114 | |
|
115 | |
@SuppressWarnings("unchecked") |
116 | |
public void renderAfter(final WidgetHandle handle, |
117 | |
final UIComponent uiComponent, final WidgetHandle parent, |
118 | |
final PartContext context) { |
119 | 1624 | Object widget = handle.getWidget(); |
120 | 1624 | RendererSupportUtil.setAttributes(uiComponent, widget, |
121 | |
SetTiming.RENDER_AFTER); |
122 | 1624 | doRenderAfter(getWidgetType().cast(widget), |
123 | |
(COMPONENT_TYPE) uiComponent, parent, context); |
124 | 1624 | } |
125 | |
|
126 | |
|
127 | |
|
128 | |
|
129 | |
@SuppressWarnings("unchecked") |
130 | |
public void reRender(final WidgetHandle handle) { |
131 | 0 | AssertionUtil.assertNotNull("handle", handle); |
132 | 0 | UIComponent uiComponent = handle.getUiComponent(); |
133 | 0 | Object widget = handle.getWidget(); |
134 | 0 | AssertionUtil.assertNotNull("uiComponent", uiComponent); |
135 | 0 | AssertionUtil.assertNotNull("widget", widget); |
136 | |
|
137 | |
try { |
138 | 0 | RendererSupportUtil.setAttributes(uiComponent, widget, |
139 | |
SetTiming.RENDER); |
140 | |
|
141 | 0 | doRender((COMPONENT_TYPE) uiComponent, getWidgetType().cast(widget)); |
142 | 0 | } catch (Exception ex) { |
143 | 0 | throw new RenderException( |
144 | |
UrumaMessageCodes.EXCEPTION_OCCURED_WITH_REASON, ex, ex |
145 | |
.getMessage()); |
146 | 0 | } |
147 | 0 | } |
148 | |
|
149 | |
|
150 | |
|
151 | |
|
152 | |
|
153 | |
|
154 | |
|
155 | |
|
156 | |
|
157 | |
protected void inherit(final COMPONENT_TYPE uiComponent) { |
158 | |
|
159 | 324 | } |
160 | |
|
161 | |
|
162 | |
|
163 | |
|
164 | |
|
165 | |
|
166 | |
|
167 | |
|
168 | |
|
169 | |
|
170 | |
|
171 | |
protected WIDGET_TYPE createWidget(final Widget parent, final int style) { |
172 | 1584 | Class<WIDGET_TYPE> widgetClass = getWidgetType(); |
173 | 1584 | WIDGET_TYPE widget = ClassUtil.<WIDGET_TYPE> newInstance(widgetClass, |
174 | |
parent, style); |
175 | |
|
176 | 1584 | if (logger.isTraceEnabled()) { |
177 | 0 | logger.log(UrumaMessageCodes.WIDGET_CREATED, UrumaLogger |
178 | |
.getObjectDescription(widget)); |
179 | |
} |
180 | |
|
181 | 1584 | return widget; |
182 | |
} |
183 | |
|
184 | |
|
185 | |
|
186 | |
|
187 | |
|
188 | |
|
189 | |
|
190 | |
protected abstract Class<WIDGET_TYPE> getWidgetType(); |
191 | |
|
192 | |
|
193 | |
|
194 | |
|
195 | |
|
196 | |
|
197 | |
|
198 | |
|
199 | |
|
200 | |
|
201 | |
|
202 | |
protected abstract void doRender(COMPONENT_TYPE uiComponent, |
203 | |
WIDGET_TYPE widget); |
204 | |
|
205 | |
|
206 | |
|
207 | |
|
208 | |
|
209 | |
|
210 | |
|
211 | |
|
212 | |
|
213 | |
|
214 | |
|
215 | |
|
216 | |
|
217 | |
|
218 | |
|
219 | |
protected void doRenderAfter(final WIDGET_TYPE widget, |
220 | |
final COMPONENT_TYPE uiComponent, final WidgetHandle parent, |
221 | |
final PartContext context) { |
222 | |
|
223 | 1364 | } |
224 | |
|
225 | |
protected void pushRenderingContext(final Object object) { |
226 | 0 | renderingContext.push(object); |
227 | 0 | } |
228 | |
|
229 | |
protected Object popRenderingContext() { |
230 | 0 | return renderingContext.pop(); |
231 | |
} |
232 | |
|
233 | |
protected Object peekRenderingContext() { |
234 | 0 | return renderingContext.peek(); |
235 | |
} |
236 | |
} |