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 org.eclipse.jface.viewers.ContentViewer;
19 import org.eclipse.jface.viewers.IBaseLabelProvider;
20 import org.eclipse.jface.viewers.IContentProvider;
21 import org.eclipse.jface.viewers.StructuredViewer;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.jface.viewers.ViewerComparator;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Control;
26 import org.seasar.framework.util.StringUtil;
27 import org.seasar.uruma.component.UIComponent;
28 import org.seasar.uruma.component.UICompositeComponent;
29 import org.seasar.uruma.component.jface.CompositeComponent;
30 import org.seasar.uruma.context.PartContext;
31 import org.seasar.uruma.context.WidgetHandle;
32 import org.seasar.uruma.core.ComponentUtil;
33 import org.seasar.uruma.core.UrumaMessageCodes;
34 import org.seasar.uruma.log.UrumaLogger;
35 import org.seasar.uruma.util.ClassUtil;
36 import org.seasar.uruma.viewer.GenericContentProvider;
37 import org.seasar.uruma.viewer.PojoLabelProvider;
38
39
40
41
42
43
44
45
46
47
48
49
50 public abstract class AbstractViewerRenderer<COMPONENT_TYPE extends CompositeComponent, VIEWER_TYPE extends Viewer, CONTROL_TYPE extends Control>
51 extends AbstractControlRenderer<COMPONENT_TYPE, CONTROL_TYPE> {
52 private UrumaLogger logger = UrumaLogger.getLogger(getClass());
53
54
55
56
57
58
59 @Override
60 @SuppressWarnings("unchecked")
61 public WidgetHandle render(final UIComponent uiComponent,
62 final WidgetHandle parent, final PartContext context) {
63 if (!canCreateViewer(UICompositeComponent.class.cast(uiComponent))) {
64
65 return super.render(uiComponent, parent, context);
66 }
67
68 setContext(context);
69
70 inherit((COMPONENT_TYPE) uiComponent);
71
72 VIEWER_TYPE viewer = createViewer(parent.<Composite> getCastWidget(),
73 getStyle(uiComponent));
74
75
76 renderWidget((COMPONENT_TYPE) uiComponent, (CONTROL_TYPE) viewer
77 .getControl());
78
79 String id = uiComponent.getId();
80 if (viewer instanceof ContentViewer) {
81 ComponentUtil.setupContentProvider((ContentViewer) viewer, id,
82 getDefaultContentProvider());
83 }
84
85 if (viewer instanceof StructuredViewer) {
86 ComponentUtil.setupLabelProvider((StructuredViewer) viewer, id,
87 getDefaultLabelProvider(), getLabelProviderClass(),
88 getPojoLabelProviderClass());
89 }
90
91 doRenderViewer((COMPONENT_TYPE) uiComponent, viewer);
92
93 WidgetHandle viewerHandle = createWidgetHandle(uiComponent, viewer);
94 if (!StringUtil.isEmpty(id)) {
95 viewerHandle.setId(id);
96 }
97
98 return viewerHandle;
99 }
100
101
102
103
104
105
106
107 @Override
108 @SuppressWarnings("unchecked")
109 public void renderAfter(final WidgetHandle handle,
110 final UIComponent uiComponent, final WidgetHandle parent,
111 final PartContext context) {
112
113 if (handle.instanceOf(Viewer.class)) {
114 VIEWER_TYPE viewer = getViewerType().cast(handle.getWidget());
115 WidgetHandle controlHandle = createWidgetHandle(uiComponent, viewer
116 .getControl());
117
118 super.renderAfter(controlHandle, uiComponent, parent, context);
119
120 doRenderAfter(viewer, (COMPONENT_TYPE) uiComponent, parent, context);
121
122 if (viewer instanceof StructuredViewer) {
123 ComponentUtil.setupComparator((StructuredViewer) viewer,
124 uiComponent.getId(), getDefaultComparator());
125 }
126 } else {
127 super.renderAfter(handle, uiComponent, parent, context);
128 }
129 }
130
131
132
133
134
135 @Override
136 protected void doRenderControl(final COMPONENT_TYPE controlComponent,
137 final CONTROL_TYPE control) {
138
139 }
140
141
142
143
144
145
146
147
148
149
150
151 protected VIEWER_TYPE createViewer(final Composite parent, final int style) {
152 VIEWER_TYPE viewer = ClassUtil.<VIEWER_TYPE> newInstance(
153 getViewerType(), parent, style);
154
155 if (logger.isTraceEnabled()) {
156 logger.log(UrumaMessageCodes.WIDGET_CREATED, UrumaLogger
157 .getObjectDescription(viewer));
158 }
159
160 return viewer;
161 }
162
163
164
165
166
167
168
169
170
171
172 protected IContentProvider getDefaultContentProvider() {
173 return new GenericContentProvider();
174 }
175
176
177
178
179
180
181
182
183
184
185 protected IBaseLabelProvider getDefaultLabelProvider() {
186 return null;
187 }
188
189
190
191
192
193
194
195
196
197 protected Class<? extends IBaseLabelProvider> getLabelProviderClass() {
198 return IBaseLabelProvider.class;
199 }
200
201
202
203
204
205
206
207
208 protected Class<? extends PojoLabelProvider> getPojoLabelProviderClass() {
209 return null;
210 }
211
212
213
214
215
216
217
218
219
220
221 protected ViewerComparator getDefaultComparator() {
222 return null;
223 }
224
225
226
227
228
229
230
231 protected abstract Class<VIEWER_TYPE> getViewerType();
232
233
234
235
236
237
238
239
240
241
242 protected boolean canCreateViewer(final UICompositeComponent component) {
243 return true;
244 }
245
246
247
248
249
250
251
252
253
254
255
256
257 protected void doRenderViewer(final COMPONENT_TYPE uiComponent,
258 final VIEWER_TYPE viewer) {
259
260 }
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276 protected void doRenderAfter(final VIEWER_TYPE viewer,
277 final COMPONENT_TYPE uiComponent, final WidgetHandle parent,
278 final PartContext context) {
279
280 }
281 }