View Javadoc

1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.uruma.renderer.impl;
17  
18  import java.util.List;
19  
20  import org.eclipse.jface.viewers.ComboViewer;
21  import org.eclipse.jface.viewers.IBaseLabelProvider;
22  import org.eclipse.jface.viewers.IContentProvider;
23  import org.eclipse.swt.SWT;
24  import org.eclipse.swt.widgets.Combo;
25  import org.seasar.uruma.component.jface.ComboComponent;
26  import org.seasar.uruma.component.jface.SimpleItemComponent;
27  import org.seasar.uruma.context.PartContext;
28  import org.seasar.uruma.context.WidgetHandle;
29  import org.seasar.uruma.viewer.ContentsHolder;
30  import org.seasar.uruma.viewer.GenericLabelProvider;
31  
32  /**
33   * {@link ComboViewer} のレンダリングを行うクラスです。<br />
34   * 
35   * @author bskuroneko
36   */
37  public class ComboViewerRenderer extends
38          AbstractViewerRenderer<ComboComponent, ComboViewer, Combo> {
39  
40      /*
41       * @see org.seasar.uruma.renderer.impl.AbstractRenderer#getDefaultStyle()
42       */
43      @Override
44      protected int getDefaultStyle() {
45          return SWT.SIMPLE;
46      }
47  
48      /*
49       * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#doRenderViewer(org.seasar.uruma.component.jface.CompositeComponent,
50       *      org.eclipse.jface.viewers.Viewer)
51       */
52      @Override
53      protected void doRenderViewer(final ComboComponent uiComponent,
54              final ComboViewer viewer) {
55          setupItems(uiComponent, viewer);
56      }
57  
58      @Override
59      protected void doRenderAfter(final ComboViewer viewer,
60              final ComboComponent uiComponent, final WidgetHandle parent,
61              final PartContext context) {
62          setupItems(uiComponent, viewer);
63      }
64  
65      /*
66       * @see org.seasar.uruma.renderer.impl.AbstractWidgetRenderer#getWidgetType()
67       */
68      @Override
69      protected Class<Combo> getWidgetType() {
70          return Combo.class;
71      }
72  
73      /*
74       * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#getViewerType()
75       */
76      @Override
77      protected Class<ComboViewer> getViewerType() {
78          return ComboViewer.class;
79      }
80  
81      private void setupItems(final ComboComponent comboComponent,
82              final ComboViewer viewer) {
83          List<SimpleItemComponent> itemList = comboComponent.getItems();
84  
85          IContentProvider provider = viewer.getContentProvider();
86          if (provider != null && provider instanceof ContentsHolder) {
87              ContentsHolder holder = ContentsHolder.class.cast(provider);
88              holder.setContents(itemList);
89          } else {
90              for (SimpleItemComponent simpleItemComponent : itemList) {
91                  viewer.add(simpleItemComponent);
92              }
93          }
94  
95          viewer.setInput(itemList);
96      }
97  
98      /*
99       * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#getDefaultLabelProvider()
100      */
101     @Override
102     protected IBaseLabelProvider getDefaultLabelProvider() {
103         return new GenericLabelProvider();
104     }
105 }