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.controller.ActionManager;
031 import griffon.core.env.Environment;
032 import griffon.core.env.Lifecycle;
033 import griffon.core.env.Metadata;
034 import griffon.core.env.RunMode;
035 import griffon.core.event.EventHandler;
036 import griffon.core.event.EventRouter;
037 import griffon.core.i18n.MessageSource;
038 import griffon.core.mvc.MVCGroupConfigurationFactory;
039 import griffon.core.mvc.MVCGroupFactory;
040 import griffon.core.mvc.MVCGroupManager;
041 import griffon.core.resources.ResourceHandler;
042 import griffon.core.resources.ResourceInjector;
043 import griffon.core.resources.ResourceResolver;
044 import griffon.core.threading.UIThreadManager;
045 import griffon.core.view.WindowManager;
046 import griffon.util.CompositeResourceBundleBuilder;
047 import griffon.util.Instantiator;
048 import griffon.util.PropertiesReader;
049 import griffon.util.ResourceBundleReader;
050 import org.codehaus.griffon.runtime.core.addon.DefaultAddonManager;
051 import org.codehaus.griffon.runtime.core.artifact.ControllerArtifactHandler;
052 import org.codehaus.griffon.runtime.core.artifact.DefaultArtifactManager;
053 import org.codehaus.griffon.runtime.core.artifact.ModelArtifactHandler;
054 import org.codehaus.griffon.runtime.core.artifact.ServiceArtifactHandler;
055 import org.codehaus.griffon.runtime.core.artifact.ViewArtifactHandler;
056 import org.codehaus.griffon.runtime.core.controller.DefaultActionManager;
057 import org.codehaus.griffon.runtime.core.env.EnvironmentProvider;
058 import org.codehaus.griffon.runtime.core.env.MetadataProvider;
059 import org.codehaus.griffon.runtime.core.env.RunModeProvider;
060 import org.codehaus.griffon.runtime.core.event.DefaultEventHandler;
061 import org.codehaus.griffon.runtime.core.event.DefaultEventRouter;
062 import org.codehaus.griffon.runtime.core.i18n.DefaultMessageSourceDecoratorFactory;
063 import org.codehaus.griffon.runtime.core.i18n.MessageSourceDecoratorFactory;
064 import org.codehaus.griffon.runtime.core.i18n.MessageSourceProvider;
065 import org.codehaus.griffon.runtime.core.injection.AbstractModule;
066 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupConfigurationFactory;
067 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupFactory;
068 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupManager;
069 import org.codehaus.griffon.runtime.core.resources.DefaultApplicationResourceInjector;
070 import org.codehaus.griffon.runtime.core.resources.DefaultResourceHandler;
071 import org.codehaus.griffon.runtime.core.resources.DefaultResourceResolverDecoratorFactory;
072 import org.codehaus.griffon.runtime.core.resources.ResourceResolverDecoratorFactory;
073 import org.codehaus.griffon.runtime.core.resources.ResourceResolverProvider;
074 import org.codehaus.griffon.runtime.core.threading.DefaultExecutorServiceProvider;
075 import org.codehaus.griffon.runtime.core.threading.DefaultUIThreadManager;
076 import org.codehaus.griffon.runtime.core.view.NoopWindowManager;
077 import org.codehaus.griffon.runtime.util.DefaultCompositeResourceBundleBuilder;
078 import org.codehaus.griffon.runtime.util.DefaultInstantiator;
079 import org.codehaus.griffon.runtime.util.ResourceBundleProvider;
080 
081 import javax.inject.Named;
082 import java.util.ResourceBundle;
083 import java.util.concurrent.ExecutorService;
084 
085 import static griffon.util.AnnotationUtils.named;
086 
087 /**
088  @author Andres Almiray
089  @since 2.0.0
090  */
091 @Named("core")
092 public class DefaultApplicationModule extends AbstractModule {
093     @Override
094     protected void doConfigure() {
095         // tag::bindings[]
096         bind(ApplicationClassLoader.class)
097             .to(DefaultApplicationClassLoader.class)
098             .asSingleton();
099 
100         bind(Metadata.class)
101             .toProvider(MetadataProvider.class)
102             .asSingleton();
103 
104         bind(RunMode.class)
105             .toProvider(RunModeProvider.class)
106             .asSingleton();
107 
108         bind(Environment.class)
109             .toProvider(EnvironmentProvider.class)
110             .asSingleton();
111 
112         bind(ContextFactory.class)
113             .to(DefaultContextFactory.class)
114             .asSingleton();
115 
116         bind(Instantiator.class)
117             .to(DefaultInstantiator.class)
118             .asSingleton();
119 
120         bind(PropertiesReader.class)
121             .toProvider(PropertiesReader.Provider.class)
122             .asSingleton();
123 
124         bind(ResourceBundleReader.class)
125             .toProvider(ResourceBundleReader.Provider.class)
126             .asSingleton();
127 
128         bind(Context.class)
129             .withClassifier(named("applicationContext"))
130             .toProvider(DefaultContextProvider.class)
131             .asSingleton();
132 
133         bind(ApplicationConfigurer.class)
134             .to(DefaultApplicationConfigurer.class)
135             .asSingleton();
136 
137         bind(ResourceHandler.class)
138             .to(DefaultResourceHandler.class)
139             .asSingleton();
140 
141         bind(CompositeResourceBundleBuilder.class)
142             .to(DefaultCompositeResourceBundleBuilder.class)
143             .asSingleton();
144 
145         bind(ResourceBundle.class)
146             .withClassifier(named("applicationResourceBundle"))
147             .toProvider(new ResourceBundleProvider("Config"))
148             .asSingleton();
149 
150         bind(ConfigurationDecoratorFactory.class)
151             .to(DefaultConfigurationDecoratorFactory.class);
152 
153         bind(Configuration.class)
154             .toProvider(ResourceBundleConfigurationProvider.class)
155             .asSingleton();
156 
157         bind(ExecutorServiceManager.class)
158             .to(DefaultExecutorServiceManager.class)
159             .asSingleton();
160 
161         bind(EventRouter.class)
162             .withClassifier(named("applicationEventRouter"))
163             .to(DefaultEventRouter.class)
164             .asSingleton();
165 
166         bind(EventRouter.class)
167             .to(DefaultEventRouter.class);
168 
169         bind(ResourceResolverDecoratorFactory.class)
170             .to(DefaultResourceResolverDecoratorFactory.class);
171 
172         bind(MessageSourceDecoratorFactory.class)
173             .to(DefaultMessageSourceDecoratorFactory.class);
174 
175         bind(ResourceResolver.class)
176             .withClassifier(named("applicationResourceResolver"))
177             .toProvider(new ResourceResolverProvider("resources"))
178             .asSingleton();
179 
180         bind(MessageSource.class)
181             .withClassifier(named("applicationMessageSource"))
182             .toProvider(new MessageSourceProvider("messages"))
183             .asSingleton();
184 
185         bind(ResourceInjector.class)
186             .withClassifier(named("applicationResourceInjector"))
187             .to(DefaultApplicationResourceInjector.class)
188             .asSingleton();
189 
190         bind(ExecutorService.class)
191             .withClassifier(named("defaultExecutorService"))
192             .toProvider(DefaultExecutorServiceProvider.class)
193             .asSingleton();
194 
195         bind(UIThreadManager.class)
196             .to(DefaultUIThreadManager.class)
197             .asSingleton();
198 
199         bind(MVCGroupConfigurationFactory.class)
200             .to(DefaultMVCGroupConfigurationFactory.class)
201             .asSingleton();
202 
203         bind(MVCGroupFactory.class)
204             .to(DefaultMVCGroupFactory.class)
205             .asSingleton();
206 
207         bind(MVCGroupManager.class)
208             .to(DefaultMVCGroupManager.class)
209             .asSingleton();
210 
211         for (Lifecycle lifecycle : Lifecycle.values()) {
212             bind(LifecycleHandler.class)
213                 .withClassifier(named(lifecycle.getName()))
214                 .toProvider(new LifecycleHandlerProvider(lifecycle.getName()))
215                 .asSingleton();
216         }
217 
218         bind(WindowManager.class)
219             .to(NoopWindowManager.class)
220             .asSingleton();
221 
222         bind(ActionManager.class)
223             .to(DefaultActionManager.class)
224             .asSingleton();
225 
226         bind(ArtifactManager.class)
227             .to(DefaultArtifactManager.class)
228             .asSingleton();
229 
230         bind(ArtifactHandler.class)
231             .to(ModelArtifactHandler.class)
232             .asSingleton();
233 
234         bind(ArtifactHandler.class)
235             .to(ViewArtifactHandler.class)
236             .asSingleton();
237 
238         bind(ArtifactHandler.class)
239             .to(ControllerArtifactHandler.class)
240             .asSingleton();
241 
242         bind(ArtifactHandler.class)
243             .to(ServiceArtifactHandler.class)
244             .asSingleton();
245 
246         bind(PlatformHandler.class)
247             .toProvider(PlatformHandlerProvider.class)
248             .asSingleton();
249 
250         bind(AddonManager.class)
251             .to(DefaultAddonManager.class)
252             .asSingleton();
253 
254         bind(EventHandler.class)
255             .to(DefaultEventHandler.class)
256             .asSingleton();
257 
258         bind(ExceptionHandler.class)
259             .toProvider(GriffonExceptionHandlerProvider.class)
260             .asSingleton();
261         // end::bindings[]
262     }
263 }