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;
17  
18  import java.util.HashMap;
19  import java.util.Map;
20  
21  import org.seasar.uruma.component.UIComponent;
22  import org.seasar.uruma.component.jface.BrowserComponent;
23  import org.seasar.uruma.component.jface.ButtonComponent;
24  import org.seasar.uruma.component.jface.CTabFolderComponent;
25  import org.seasar.uruma.component.jface.CTabItemComponent;
26  import org.seasar.uruma.component.jface.CanvasComponent;
27  import org.seasar.uruma.component.jface.ComboComponent;
28  import org.seasar.uruma.component.jface.CompositeComponent;
29  import org.seasar.uruma.component.jface.CoolBarComponent;
30  import org.seasar.uruma.component.jface.CoolItemComponent;
31  import org.seasar.uruma.component.jface.DateTimeComponent;
32  import org.seasar.uruma.component.jface.GroupComponent;
33  import org.seasar.uruma.component.jface.LabelComponent;
34  import org.seasar.uruma.component.jface.LinkComponent;
35  import org.seasar.uruma.component.jface.MenuComponent;
36  import org.seasar.uruma.component.jface.MenuItemComponent;
37  import org.seasar.uruma.component.jface.ProgressBarComponent;
38  import org.seasar.uruma.component.jface.SashFormComponent;
39  import org.seasar.uruma.component.jface.ScaleComponent;
40  import org.seasar.uruma.component.jface.SeparatorComponent;
41  import org.seasar.uruma.component.jface.SliderComponent;
42  import org.seasar.uruma.component.jface.SpinnerComponent;
43  import org.seasar.uruma.component.jface.TabFolderComponent;
44  import org.seasar.uruma.component.jface.TabItemComponent;
45  import org.seasar.uruma.component.jface.TableColumnComponent;
46  import org.seasar.uruma.component.jface.TableComponent;
47  import org.seasar.uruma.component.jface.TableItemComponent;
48  import org.seasar.uruma.component.jface.TextComponent;
49  import org.seasar.uruma.component.jface.ToolBarComponent;
50  import org.seasar.uruma.component.jface.ToolItemComponent;
51  import org.seasar.uruma.component.jface.TreeComponent;
52  import org.seasar.uruma.component.jface.TreeItemComponent;
53  import org.seasar.uruma.component.jface.WindowComponent;
54  import org.seasar.uruma.component.rcp.ViewPartComponent;
55  import org.seasar.uruma.component.rcp.WorkbenchComponent;
56  import org.seasar.uruma.core.UrumaMessageCodes;
57  import org.seasar.uruma.exception.NotFoundException;
58  import org.seasar.uruma.renderer.impl.BrowserRenderer;
59  import org.seasar.uruma.renderer.impl.ButtonRenderer;
60  import org.seasar.uruma.renderer.impl.CTabFolderRenderer;
61  import org.seasar.uruma.renderer.impl.CTabItemRenderer;
62  import org.seasar.uruma.renderer.impl.CanvasRenderer;
63  import org.seasar.uruma.renderer.impl.ComboViewerRenderer;
64  import org.seasar.uruma.renderer.impl.CompositeRenderer;
65  import org.seasar.uruma.renderer.impl.CoolBarRenderer;
66  import org.seasar.uruma.renderer.impl.CoolItemRenderer;
67  import org.seasar.uruma.renderer.impl.DateTimeRenderer;
68  import org.seasar.uruma.renderer.impl.GroupRenderer;
69  import org.seasar.uruma.renderer.impl.LabelRenderer;
70  import org.seasar.uruma.renderer.impl.LinkRenderer;
71  import org.seasar.uruma.renderer.impl.MenuItemRenderer;
72  import org.seasar.uruma.renderer.impl.MenuManagerRenderer;
73  import org.seasar.uruma.renderer.impl.NullRenderer;
74  import org.seasar.uruma.renderer.impl.ProgressBarRenderer;
75  import org.seasar.uruma.renderer.impl.SashFormRenderer;
76  import org.seasar.uruma.renderer.impl.ScaleRenderer;
77  import org.seasar.uruma.renderer.impl.SeparatorRenderer;
78  import org.seasar.uruma.renderer.impl.SliderRenderer;
79  import org.seasar.uruma.renderer.impl.SpinnerRenderer;
80  import org.seasar.uruma.renderer.impl.TabFolderRenderer;
81  import org.seasar.uruma.renderer.impl.TabItemRenderer;
82  import org.seasar.uruma.renderer.impl.TableColumnRenderer;
83  import org.seasar.uruma.renderer.impl.TableItemRenderer;
84  import org.seasar.uruma.renderer.impl.TableViewerRenderer;
85  import org.seasar.uruma.renderer.impl.TextRenderer;
86  import org.seasar.uruma.renderer.impl.ToolBarRenderer;
87  import org.seasar.uruma.renderer.impl.ToolItemRenderer;
88  import org.seasar.uruma.renderer.impl.TreeItemRenderer;
89  import org.seasar.uruma.renderer.impl.TreeViewerRenderer;
90  import org.seasar.uruma.renderer.impl.ViewPartRenderer;
91  import org.seasar.uruma.renderer.impl.WindowRenderer;
92  import org.seasar.uruma.util.AssertionUtil;
93  
94  /**
95   * レンダラを取得するためのファクトリクラスです。<br />
96   * 
97   * @author y-komori
98   */
99  public class RendererFactory {
100     private static final Map<Class<? extends UIComponent>, Renderer> rendererMap = new HashMap<Class<? extends UIComponent>, Renderer>();
101 
102     static {
103         addRenderer(WindowComponent.class, new WindowRenderer());
104         addRenderer(ViewPartComponent.class, new ViewPartRenderer());
105 
106         addRenderer(CompositeComponent.class, new CompositeRenderer());
107         addRenderer(ComboComponent.class, new ComboViewerRenderer());
108         addRenderer(TabFolderComponent.class, new TabFolderRenderer());
109         addRenderer(TabItemComponent.class, new TabItemRenderer());
110         addRenderer(TableComponent.class, new TableViewerRenderer());
111         addRenderer(TableColumnComponent.class, new TableColumnRenderer());
112         addRenderer(TableItemComponent.class, new TableItemRenderer());
113         addRenderer(SpinnerComponent.class, new SpinnerRenderer());
114         addRenderer(CTabFolderComponent.class, new CTabFolderRenderer());
115         addRenderer(CTabItemComponent.class, new CTabItemRenderer());
116         addRenderer(GroupComponent.class, new GroupRenderer());
117         addRenderer(ToolBarComponent.class, new ToolBarRenderer());
118         addRenderer(ToolItemComponent.class, new ToolItemRenderer());
119         addRenderer(CoolBarComponent.class, new CoolBarRenderer());
120         addRenderer(CoolItemComponent.class, new CoolItemRenderer());
121         addRenderer(CanvasComponent.class, new CanvasRenderer());
122         addRenderer(SashFormComponent.class, new SashFormRenderer());
123         addRenderer(BrowserComponent.class, new BrowserRenderer());
124 
125         addRenderer(TreeComponent.class, new TreeViewerRenderer());
126         addRenderer(TreeItemComponent.class, new TreeItemRenderer());
127 
128         addRenderer(ButtonComponent.class, new ButtonRenderer());
129         addRenderer(LabelComponent.class, new LabelRenderer());
130         addRenderer(TextComponent.class, new TextRenderer());
131         addRenderer(ProgressBarComponent.class, new ProgressBarRenderer());
132         addRenderer(ScaleComponent.class, new ScaleRenderer());
133         addRenderer(SliderComponent.class, new SliderRenderer());
134         addRenderer(LinkComponent.class, new LinkRenderer());
135 
136         addRenderer(MenuComponent.class, new MenuManagerRenderer());
137         addRenderer(MenuItemComponent.class, new MenuItemRenderer());
138         addRenderer(SeparatorComponent.class, new SeparatorRenderer());
139         addRenderer(DateTimeComponent.class, new DateTimeRenderer());
140 
141         addRenderer(WorkbenchComponent.class, new NullRenderer());
142     }
143 
144     /**
145      * {@link UIComponent} クラスをキーにして、レンダラを取得します。</br>
146      * 
147      * @param uiComponentClass
148      *            レンダラに対応する {@link UIComponent} の {@link Class} オブジェクト
149      * @return レンダラオブジェクト
150      * @throws NotFoundException
151      *             レンダラが見つからなかった場合
152      */
153     public static Renderer getRenderer(
154             final Class<? extends UIComponent> uiComponentClass) {
155         Renderer renderer = rendererMap.get(uiComponentClass);
156         if (renderer != null) {
157             return renderer;
158         } else {
159             throw new NotFoundException(UrumaMessageCodes.RENDERER_NOT_FOUND,
160                     uiComponentClass.getName());
161         }
162     }
163 
164     /**
165      * {@link UIComponent} クラスをキーとして、レンダラを登録します。</br>
166      * 
167      * @param uiComponentClass
168      *            {@link UIComponent} クラスの {@link Class} オブジェクト
169      * @param renderer
170      *            レンダラオブジェクト
171      */
172     public static void addRenderer(
173             final Class<? extends UIComponent> uiComponentClass,
174             final Renderer renderer) {
175         AssertionUtil.assertNotNull("uiComponentClass", uiComponentClass);
176         AssertionUtil.assertNotNull("renderer", renderer);
177         rendererMap.put(uiComponentClass, renderer);
178     }
179 }