001 /*
002 * Copyright 2008-2017 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.codehaus.griffon.runtime.core;
017
018 import griffon.core.ApplicationClassLoader;
019 import griffon.core.ApplicationConfigurer;
020 import griffon.core.Configuration;
021 import griffon.core.Context;
022 import griffon.core.ContextFactory;
023 import griffon.core.ExceptionHandler;
024 import griffon.core.ExecutorServiceManager;
025 import griffon.core.LifecycleHandler;
026 import griffon.core.PlatformHandler;
027 import griffon.core.addon.AddonManager;
028 import griffon.core.artifact.ArtifactHandler;
029 import griffon.core.artifact.ArtifactManager;
030 import griffon.core.configuration.ConfigurationManager;
031 import griffon.core.controller.ActionFactory;
032 import griffon.core.controller.ActionManager;
033 import griffon.core.controller.ActionMetadataFactory;
034 import griffon.core.env.Environment;
035 import griffon.core.env.Lifecycle;
036 import griffon.core.env.Metadata;
037 import griffon.core.env.RunMode;
038 import griffon.core.event.EventHandler;
039 import griffon.core.event.EventRouter;
040 import griffon.core.i18n.MessageSource;
041 import griffon.core.mvc.MVCGroupConfigurationFactory;
042 import griffon.core.mvc.MVCGroupFactory;
043 import griffon.core.mvc.MVCGroupManager;
044 import griffon.core.resources.ResourceHandler;
045 import griffon.core.resources.ResourceInjector;
046 import griffon.core.resources.ResourceResolver;
047 import griffon.core.threading.UIThreadManager;
048 import griffon.core.view.WindowManager;
049 import griffon.util.CompositeResourceBundleBuilder;
050 import griffon.util.Instantiator;
051 import griffon.util.PropertiesReader;
052 import griffon.util.ResourceBundleLoader;
053 import griffon.util.ResourceBundleReader;
054 import org.codehaus.griffon.runtime.core.addon.DefaultAddonManager;
055 import org.codehaus.griffon.runtime.core.artifact.ControllerArtifactHandler;
056 import org.codehaus.griffon.runtime.core.artifact.DefaultArtifactManager;
057 import org.codehaus.griffon.runtime.core.artifact.ModelArtifactHandler;
058 import org.codehaus.griffon.runtime.core.artifact.ServiceArtifactHandler;
059 import org.codehaus.griffon.runtime.core.artifact.ViewArtifactHandler;
060 import org.codehaus.griffon.runtime.core.configuration.ConfigurationDecoratorFactory;
061 import org.codehaus.griffon.runtime.core.configuration.DefaultConfigurationDecoratorFactory;
062 import org.codehaus.griffon.runtime.core.configuration.DefaultConfigurationManager;
063 import org.codehaus.griffon.runtime.core.configuration.ResourceBundleConfigurationProvider;
064 import org.codehaus.griffon.runtime.core.controller.DefaultActionFactory;
065 import org.codehaus.griffon.runtime.core.controller.DefaultActionManager;
066 import org.codehaus.griffon.runtime.core.controller.DefaultActionMetadataFactory;
067 import org.codehaus.griffon.runtime.core.env.EnvironmentProvider;
068 import org.codehaus.griffon.runtime.core.env.MetadataProvider;
069 import org.codehaus.griffon.runtime.core.env.RunModeProvider;
070 import org.codehaus.griffon.runtime.core.event.DefaultEventHandler;
071 import org.codehaus.griffon.runtime.core.event.DefaultEventRouter;
072 import org.codehaus.griffon.runtime.core.i18n.DefaultMessageSourceDecoratorFactory;
073 import org.codehaus.griffon.runtime.core.i18n.MessageSourceDecoratorFactory;
074 import org.codehaus.griffon.runtime.core.i18n.MessageSourceProvider;
075 import org.codehaus.griffon.runtime.core.injection.AbstractModule;
076 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupConfigurationFactory;
077 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupFactory;
078 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupManager;
079 import org.codehaus.griffon.runtime.core.resources.DefaultApplicationResourceInjector;
080 import org.codehaus.griffon.runtime.core.resources.DefaultResourceHandler;
081 import org.codehaus.griffon.runtime.core.resources.DefaultResourceResolverDecoratorFactory;
082 import org.codehaus.griffon.runtime.core.resources.ResourceResolverDecoratorFactory;
083 import org.codehaus.griffon.runtime.core.resources.ResourceResolverProvider;
084 import org.codehaus.griffon.runtime.core.threading.DefaultExecutorServiceProvider;
085 import org.codehaus.griffon.runtime.core.threading.DefaultUIThreadManager;
086 import org.codehaus.griffon.runtime.core.view.NoopWindowManager;
087 import org.codehaus.griffon.runtime.util.ClassResourceBundleLoader;
088 import org.codehaus.griffon.runtime.util.DefaultCompositeResourceBundleBuilder;
089 import org.codehaus.griffon.runtime.util.DefaultInstantiator;
090 import org.codehaus.griffon.runtime.util.PropertiesResourceBundleLoader;
091 import org.codehaus.griffon.runtime.util.ResourceBundleProvider;
092 import org.codehaus.griffon.runtime.util.XmlResourceBundleLoader;
093
094 import javax.inject.Named;
095 import java.util.ResourceBundle;
096 import java.util.concurrent.ExecutorService;
097
098 import static griffon.util.AnnotationUtils.named;
099
100 /**
101 * @author Andres Almiray
102 * @since 2.0.0
103 */
104 @Named("core")
105 public class DefaultApplicationModule extends AbstractModule {
106 @Override
107 protected void doConfigure() {
108 // tag::bindings[]
109 bind(ApplicationClassLoader.class)
110 .to(DefaultApplicationClassLoader.class)
111 .asSingleton();
112
113 bind(Metadata.class)
114 .toProvider(MetadataProvider.class)
115 .asSingleton();
116
117 bind(RunMode.class)
118 .toProvider(RunModeProvider.class)
119 .asSingleton();
120
121 bind(Environment.class)
122 .toProvider(EnvironmentProvider.class)
123 .asSingleton();
124
125 bind(ContextFactory.class)
126 .to(DefaultContextFactory.class)
127 .asSingleton();
128
129 bind(Instantiator.class)
130 .to(DefaultInstantiator.class)
131 .asSingleton();
132
133 bind(PropertiesReader.class)
134 .toProvider(PropertiesReader.Provider.class)
135 .asSingleton();
136
137 bind(ResourceBundleReader.class)
138 .toProvider(ResourceBundleReader.Provider.class)
139 .asSingleton();
140
141 bind(Context.class)
142 .withClassifier(named("applicationContext"))
143 .toProvider(DefaultContextProvider.class)
144 .asSingleton();
145
146 bind(ApplicationConfigurer.class)
147 .to(DefaultApplicationConfigurer.class)
148 .asSingleton();
149
150 bind(ResourceHandler.class)
151 .to(DefaultResourceHandler.class)
152 .asSingleton();
153
154 bind(ResourceBundleLoader.class)
155 .to(ClassResourceBundleLoader.class)
156 .asSingleton();
157
158 bind(ResourceBundleLoader.class)
159 .to(PropertiesResourceBundleLoader.class)
160 .asSingleton();
161
162 bind(ResourceBundleLoader.class)
163 .to(XmlResourceBundleLoader.class)
164 .asSingleton();
165
166 bind(CompositeResourceBundleBuilder.class)
167 .to(DefaultCompositeResourceBundleBuilder.class)
168 .asSingleton();
169
170 bind(ResourceBundle.class)
171 .withClassifier(named("applicationResourceBundle"))
172 .toProvider(new ResourceBundleProvider("Config"))
173 .asSingleton();
174
175 bind(ConfigurationManager.class)
176 .to(DefaultConfigurationManager.class)
177 .asSingleton();
178
179 bind(ConfigurationDecoratorFactory.class)
180 .to(DefaultConfigurationDecoratorFactory.class);
181
182 bind(Configuration.class)
183 .toProvider(ResourceBundleConfigurationProvider.class)
184 .asSingleton();
185
186 bind(ExecutorServiceManager.class)
187 .to(DefaultExecutorServiceManager.class)
188 .asSingleton();
189
190 bind(EventRouter.class)
191 .withClassifier(named("applicationEventRouter"))
192 .to(DefaultEventRouter.class)
193 .asSingleton();
194
195 bind(EventRouter.class)
196 .to(DefaultEventRouter.class);
197
198 bind(ResourceResolverDecoratorFactory.class)
199 .to(DefaultResourceResolverDecoratorFactory.class);
200
201 bind(MessageSourceDecoratorFactory.class)
202 .to(DefaultMessageSourceDecoratorFactory.class);
203
204 bind(ResourceResolver.class)
205 .withClassifier(named("applicationResourceResolver"))
206 .toProvider(new ResourceResolverProvider("resources"))
207 .asSingleton();
208
209 bind(MessageSource.class)
210 .withClassifier(named("applicationMessageSource"))
211 .toProvider(new MessageSourceProvider("messages"))
212 .asSingleton();
213
214 bind(ResourceInjector.class)
215 .withClassifier(named("applicationResourceInjector"))
216 .to(DefaultApplicationResourceInjector.class)
217 .asSingleton();
218
219 bind(ExecutorService.class)
220 .withClassifier(named("defaultExecutorService"))
221 .toProvider(DefaultExecutorServiceProvider.class)
222 .asSingleton();
223
224 bind(UIThreadManager.class)
225 .to(DefaultUIThreadManager.class)
226 .asSingleton();
227
228 bind(MVCGroupConfigurationFactory.class)
229 .to(DefaultMVCGroupConfigurationFactory.class)
230 .asSingleton();
231
232 bind(MVCGroupFactory.class)
233 .to(DefaultMVCGroupFactory.class)
234 .asSingleton();
235
236 bind(MVCGroupManager.class)
237 .to(DefaultMVCGroupManager.class)
238 .asSingleton();
239
240 for (Lifecycle lifecycle : Lifecycle.values()) {
241 bind(LifecycleHandler.class)
242 .withClassifier(named(lifecycle.getName()))
243 .toProvider(new LifecycleHandlerProvider(lifecycle.getName()))
244 .asSingleton();
245 }
246
247 bind(WindowManager.class)
248 .to(NoopWindowManager.class)
249 .asSingleton();
250
251 bind(ActionManager.class)
252 .to(DefaultActionManager.class)
253 .asSingleton();
254
255 bind(ActionFactory.class)
256 .to(DefaultActionFactory.class)
257 .asSingleton();
258
259 bind(ActionMetadataFactory.class)
260 .to(DefaultActionMetadataFactory.class)
261 .asSingleton();
262
263 bind(ArtifactManager.class)
264 .to(DefaultArtifactManager.class)
265 .asSingleton();
266
267 bind(ArtifactHandler.class)
268 .to(ModelArtifactHandler.class)
269 .asSingleton();
270
271 bind(ArtifactHandler.class)
272 .to(ViewArtifactHandler.class)
273 .asSingleton();
274
275 bind(ArtifactHandler.class)
276 .to(ControllerArtifactHandler.class)
277 .asSingleton();
278
279 bind(ArtifactHandler.class)
280 .to(ServiceArtifactHandler.class)
281 .asSingleton();
282
283 bind(PlatformHandler.class)
284 .toProvider(PlatformHandlerProvider.class)
285 .asSingleton();
286
287 bind(AddonManager.class)
288 .to(DefaultAddonManager.class)
289 .asSingleton();
290
291 bind(EventHandler.class)
292 .to(DefaultEventHandler.class)
293 .asSingleton();
294
295 bind(ExceptionHandler.class)
296 .toProvider(GriffonExceptionHandlerProvider.class)
297 .asSingleton();
298 // end::bindings[]
299 }
300 }
|