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.IBaseLabelProvider;
21  import org.eclipse.jface.viewers.IContentProvider;
22  import org.eclipse.jface.viewers.TreeNodeContentProvider;
23  import org.eclipse.jface.viewers.TreeViewer;
24  import org.eclipse.swt.SWT;
25  import org.eclipse.swt.widgets.Tree;
26  import org.eclipse.swt.widgets.TreeItem;
27  import org.seasar.uruma.component.UIComponent;
28  import org.seasar.uruma.component.UICompositeComponent;
29  import org.seasar.uruma.component.UIElement;
30  import org.seasar.uruma.component.jface.TreeComponent;
31  import org.seasar.uruma.component.jface.TreeItemComponent;
32  import org.seasar.uruma.context.PartContext;
33  import org.seasar.uruma.context.WidgetHandle;
34  import org.seasar.uruma.viewer.GenericLabelProvider;
35  import org.seasar.uruma.viewer.UrumaTreeViewer;
36  
37  /**
38   * {@link TreeViewer} のレンダリングを行うクラスです。<br />
39   * 
40   * @author y-komori
41   */
42  public class TreeViewerRenderer extends
43          AbstractViewerRenderer<TreeComponent, UrumaTreeViewer, Tree> {
44  
45      @Override
46      protected Class<Tree> getWidgetType() {
47          return Tree.class;
48      }
49  
50      /*
51       * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#canCreateViewer(org.seasar.uruma.component.UICompositeComponent)
52       */
53      @Override
54      protected boolean canCreateViewer(final UICompositeComponent component) {
55          // TreeItemComponent が存在する場合、Viewer を生成しない
56          List<UIElement> children = component.getChildren();
57          for (UIElement child : children) {
58              if (child instanceof TreeItemComponent) {
59                  return false;
60              }
61          }
62          return true;
63      }
64  
65      /*
66       * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#renderAfter(org.seasar.uruma.context.WidgetHandle,
67       *      org.seasar.uruma.component.UIComponent,
68       *      org.seasar.uruma.context.WidgetHandle,
69       *      org.seasar.uruma.context.PartContext)
70       */
71      @Override
72      public void renderAfter(final WidgetHandle handle,
73              final UIComponent uiComponent, final WidgetHandle parent,
74              final PartContext context) {
75          if (handle.instanceOf(Tree.class)) {
76              TreeComponent component = (TreeComponent) uiComponent;
77              Tree tree = handle.<Tree> getCastWidget();
78              int autoExpandLevel = Integer.parseInt(component.autoExpandLevel);
79              if (autoExpandLevel >= 1) {
80                  expandTree(tree.getItems(), 1, autoExpandLevel);
81              }
82          }
83          super.renderAfter(handle, uiComponent, parent, context);
84      }
85  
86      protected void expandTree(final TreeItem[] items, final int currentLevel,
87              final int maxLevel) {
88          if (currentLevel >= maxLevel) {
89              return;
90          }
91  
92          for (TreeItem treeItem : items) {
93              treeItem.setExpanded(true);
94          }
95  
96          for (TreeItem treeItem : items) {
97              expandTree(treeItem.getItems(), currentLevel + 1, maxLevel);
98          }
99      }
100 
101     /*
102      * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#doRenderViewer(org.seasar.uruma.component.jface.CompositeComponent,
103      *      org.eclipse.jface.viewers.Viewer)
104      */
105     @Override
106     protected void doRenderViewer(final TreeComponent uiComponent,
107             final UrumaTreeViewer viewer) {
108         int autoExpandLevel = Integer.parseInt(uiComponent.autoExpandLevel);
109         viewer.setAutoExpandLevel(autoExpandLevel);
110     }
111 
112     /*
113      * @see org.seasar.uruma.renderer.impl.AbstractRenderer#getDefaultStyle()
114      */
115     @Override
116     protected int getDefaultStyle() {
117         return SWT.BORDER;
118     }
119 
120     /*
121      * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#getDefaultLabelProvider()
122      */
123     @Override
124     protected IBaseLabelProvider getDefaultLabelProvider() {
125         return new GenericLabelProvider();
126     }
127 
128     /*
129      * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#getViewerType()
130      */
131     @Override
132     protected Class<UrumaTreeViewer> getViewerType() {
133         return UrumaTreeViewer.class;
134     }
135 
136     /*
137      * @see org.seasar.uruma.renderer.impl.AbstractViewerRenderer#getDefaultContentProvider()
138      */
139     @Override
140     protected IContentProvider getDefaultContentProvider() {
141         return new TreeNodeContentProvider();
142     }
143 }