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