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.rcp.configuration;
17  
18  import java.util.HashMap;
19  import java.util.Map;
20  
21  import org.seasar.uruma.core.UrumaMessageCodes;
22  import org.seasar.uruma.exception.NotFoundException;
23  import org.seasar.uruma.rcp.configuration.elements.ActionElement;
24  import org.seasar.uruma.rcp.configuration.elements.ActionSetElement;
25  import org.seasar.uruma.rcp.configuration.elements.ApplicationElement;
26  import org.seasar.uruma.rcp.configuration.elements.CategoryElement;
27  import org.seasar.uruma.rcp.configuration.elements.ClassElement;
28  import org.seasar.uruma.rcp.configuration.elements.CommandElement;
29  import org.seasar.uruma.rcp.configuration.elements.ContextElement;
30  import org.seasar.uruma.rcp.configuration.elements.GroupMarkerElement;
31  import org.seasar.uruma.rcp.configuration.elements.HandlerElement;
32  import org.seasar.uruma.rcp.configuration.elements.InitializerElement;
33  import org.seasar.uruma.rcp.configuration.elements.KeyElement;
34  import org.seasar.uruma.rcp.configuration.elements.MenuCommandElement;
35  import org.seasar.uruma.rcp.configuration.elements.MenuContributionElement;
36  import org.seasar.uruma.rcp.configuration.elements.MenuElement;
37  import org.seasar.uruma.rcp.configuration.elements.ParameterElement;
38  import org.seasar.uruma.rcp.configuration.elements.PerspectiveElement;
39  import org.seasar.uruma.rcp.configuration.elements.RunElement;
40  import org.seasar.uruma.rcp.configuration.elements.SchemeElement;
41  import org.seasar.uruma.rcp.configuration.elements.SeparatorElement;
42  import org.seasar.uruma.rcp.configuration.elements.ToolbarElement;
43  import org.seasar.uruma.rcp.configuration.elements.ViewElement;
44  import org.seasar.uruma.rcp.configuration.writer.GenericConfigurationWriter;
45  import org.seasar.uruma.util.AssertionUtil;
46  
47  /**
48   * {@link ConfigurationWriter} のためのファクトリクラスです。<br />
49   * 
50   * @author y-komori
51   */
52  public class ConfigurationWriterFactory {
53      private static final Map<Class<? extends ConfigurationElement>, ConfigurationWriter> writerMap = new HashMap<Class<? extends ConfigurationElement>, ConfigurationWriter>();
54  
55      static {
56          addWriter(new GenericConfigurationWriter(Extension.class));
57  
58          addWriter(new GenericConfigurationWriter(ActionElement.class));
59          addWriter(new GenericConfigurationWriter(ActionSetElement.class));
60          addWriter(new GenericConfigurationWriter(ApplicationElement.class));
61          addWriter(new GenericConfigurationWriter(CategoryElement.class));
62          addWriter(new GenericConfigurationWriter(ClassElement.class));
63          addWriter(new GenericConfigurationWriter(CommandElement.class));
64          addWriter(new GenericConfigurationWriter(ContextElement.class));
65          addWriter(new GenericConfigurationWriter(GroupMarkerElement.class));
66          addWriter(new GenericConfigurationWriter(HandlerElement.class));
67          addWriter(new GenericConfigurationWriter(InitializerElement.class));
68          addWriter(new GenericConfigurationWriter(KeyElement.class));
69          addWriter(new GenericConfigurationWriter(MenuCommandElement.class));
70          addWriter(new GenericConfigurationWriter(MenuContributionElement.class));
71          addWriter(new GenericConfigurationWriter(MenuElement.class));
72          addWriter(new GenericConfigurationWriter(SeparatorElement.class));
73          addWriter(new GenericConfigurationWriter(ToolbarElement.class));
74          addWriter(new GenericConfigurationWriter(ParameterElement.class));
75          addWriter(new GenericConfigurationWriter(PerspectiveElement.class));
76          addWriter(new GenericConfigurationWriter(RunElement.class));
77          addWriter(new GenericConfigurationWriter(SchemeElement.class));
78          addWriter(new GenericConfigurationWriter(ViewElement.class));
79      }
80  
81      /**
82       * {@link ConfigurationWriter} を追加します。<br />
83       * 
84       * @param writer
85       *      {@link ConfigurationWriter} オブジェクト
86       */
87      public static final void addWriter(final ConfigurationWriter writer) {
88          AssertionUtil.assertNotNull("writer", writer);
89  
90          Class<? extends ConfigurationElement> clazz = writer.getSupportType();
91          writerMap.put(clazz, writer);
92      }
93  
94      /**
95       * クラスを指定して {@link ConfigurationWriter} を取得します。<br />
96       * 
97       * @param clazz
98       *      {@link ConfigurationElement} のクラスオブジェクト
99       * @return {@link ConfigurationWriter} オブジェクト
100      * @throws NotFoundException
101      *      {@link ConfigurationWriter} が見つからない場合
102      */
103     public static final ConfigurationWriter getConfigurationWriter(
104             final Class<? extends ConfigurationElement> clazz) {
105         ConfigurationWriter writer = writerMap.get(clazz);
106         if (writer != null) {
107             return writer;
108         } else {
109             throw new NotFoundException(
110                     UrumaMessageCodes.CONFIGURATION_WRITER_NOT_FOUND, clazz
111                             .getName());
112         }
113     }
114 
115     /**
116      * {@link ConfigurationElement} オブジェクトを指定して {@link ConfigurationWriter}
117      * を取得します。<br />
118      * 
119      * @param element
120      *      {@link ConfigurationElement} オブジェクト
121      * @return {@link ConfigurationWriter} オブジェクト
122      * @throws NotFoundException
123      *      {@link ConfigurationWriter} が見つからない場合
124      */
125     public static final ConfigurationWriter getConfigurationWriter(
126             final ConfigurationElement element) {
127         AssertionUtil.assertNotNull("element", element);
128         return getConfigurationWriter(element.getClass());
129     }
130 }