DefaultApplicationModule.java
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 }