DefaultApplicationModule.java
001 /*
002  * Copyright 2008-2015 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.ExecutorServiceManager;
023 import griffon.core.GriffonExceptionHandler;
024 import griffon.core.LifecycleHandler;
025 import griffon.core.PlatformHandler;
026 import griffon.core.addon.AddonManager;
027 import griffon.core.artifact.ArtifactHandler;
028 import griffon.core.artifact.ArtifactManager;
029 import griffon.core.controller.ActionManager;
030 import griffon.core.env.Environment;
031 import griffon.core.env.Lifecycle;
032 import griffon.core.env.Metadata;
033 import griffon.core.env.RunMode;
034 import griffon.core.event.EventHandler;
035 import griffon.core.event.EventRouter;
036 import griffon.core.i18n.MessageSource;
037 import griffon.core.mvc.MVCGroupManager;
038 import griffon.core.resources.ResourceHandler;
039 import griffon.core.resources.ResourceInjector;
040 import griffon.core.resources.ResourceResolver;
041 import griffon.core.threading.UIThreadManager;
042 import griffon.core.view.WindowManager;
043 import griffon.util.CompositeResourceBundleBuilder;
044 import org.codehaus.griffon.runtime.core.addon.DefaultAddonManager;
045 import org.codehaus.griffon.runtime.core.artifact.ControllerArtifactHandler;
046 import org.codehaus.griffon.runtime.core.artifact.DefaultArtifactManager;
047 import org.codehaus.griffon.runtime.core.artifact.ModelArtifactHandler;
048 import org.codehaus.griffon.runtime.core.artifact.ServiceArtifactHandler;
049 import org.codehaus.griffon.runtime.core.artifact.ViewArtifactHandler;
050 import org.codehaus.griffon.runtime.core.controller.DefaultActionManager;
051 import org.codehaus.griffon.runtime.core.env.EnvironmentProvider;
052 import org.codehaus.griffon.runtime.core.env.MetadataProvider;
053 import org.codehaus.griffon.runtime.core.env.RunModeProvider;
054 import org.codehaus.griffon.runtime.core.event.DefaultEventHandler;
055 import org.codehaus.griffon.runtime.core.event.DefaultEventRouter;
056 import org.codehaus.griffon.runtime.core.i18n.MessageSourceProvider;
057 import org.codehaus.griffon.runtime.core.injection.AbstractModule;
058 import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupManager;
059 import org.codehaus.griffon.runtime.core.resources.DefaultApplicationResourceInjector;
060 import org.codehaus.griffon.runtime.core.resources.DefaultResourceHandler;
061 import org.codehaus.griffon.runtime.core.resources.ResourceResolverProvider;
062 import org.codehaus.griffon.runtime.core.threading.DefaultExecutorServiceProvider;
063 import org.codehaus.griffon.runtime.core.threading.DefaultUIThreadManager;
064 import org.codehaus.griffon.runtime.core.view.NoopWindowManager;
065 import org.codehaus.griffon.runtime.util.DefaultCompositeResourceBundleBuilder;
066 import org.codehaus.griffon.runtime.util.ResourceBundleProvider;
067 
068 import javax.inject.Named;
069 import java.util.ResourceBundle;
070 import java.util.concurrent.ExecutorService;
071 
072 import static griffon.util.AnnotationUtils.named;
073 
074 /**
075  @author Andres Almiray
076  @since 2.0.0
077  */
078 @Named("core")
079 public class DefaultApplicationModule extends AbstractModule {
080     @Override
081     protected void doConfigure() {
082         // tag::bindings[]
083         bind(ApplicationClassLoader.class)
084             .to(DefaultApplicationClassLoader.class)
085             .asSingleton();
086 
087         bind(Metadata.class)
088             .toProvider(MetadataProvider.class)
089             .asSingleton();
090 
091         bind(RunMode.class)
092             .toProvider(RunModeProvider.class)
093             .asSingleton();
094 
095         bind(Environment.class)
096             .toProvider(EnvironmentProvider.class)
097             .asSingleton();
098 
099         bind(Context.class)
100             .withClassifier(named("applicationContext"))
101             .to(DefaultContext.class)
102             .asSingleton();
103 
104         bind(ApplicationConfigurer.class)
105             .to(DefaultApplicationConfigurer.class)
106             .asSingleton();
107 
108         bind(ResourceHandler.class)
109             .to(DefaultResourceHandler.class)
110             .asSingleton();
111 
112         bind(CompositeResourceBundleBuilder.class)
113             .to(DefaultCompositeResourceBundleBuilder.class)
114             .asSingleton();
115 
116         bind(ResourceBundle.class)
117             .withClassifier(named("applicationResourceBundle"))
118             .toProvider(new ResourceBundleProvider("Config"))
119             .asSingleton();
120 
121         bind(Configuration.class)
122             .to(DefaultConfiguration.class)
123             .asSingleton();
124 
125         bind(ExecutorServiceManager.class)
126             .to(DefaultExecutorServiceManager.class)
127             .asSingleton();
128 
129         bind(EventRouter.class)
130             .withClassifier(named("applicationEventRouter"))
131             .to(DefaultEventRouter.class)
132             .asSingleton();
133 
134         bind(EventRouter.class)
135             .to(DefaultEventRouter.class);
136 
137         bind(ResourceResolver.class)
138             .withClassifier(named("applicationResourceResolver"))
139             .toProvider(new ResourceResolverProvider("resources"))
140             .asSingleton();
141 
142         bind(MessageSource.class)
143             .withClassifier(named("applicationMessageSource"))
144             .toProvider(new MessageSourceProvider("messages"))
145             .asSingleton();
146 
147         bind(ResourceInjector.class)
148             .withClassifier(named("applicationResourceInjector"))
149             .to(DefaultApplicationResourceInjector.class)
150             .asSingleton();
151 
152         bind(ExecutorService.class)
153             .withClassifier(named("defaultExecutorService"))
154             .toProvider(DefaultExecutorServiceProvider.class)
155             .asSingleton();
156 
157         bind(UIThreadManager.class)
158             .to(DefaultUIThreadManager.class)
159             .asSingleton();
160 
161         bind(MVCGroupManager.class)
162             .to(DefaultMVCGroupManager.class)
163             .asSingleton();
164 
165         for (Lifecycle lifecycle : Lifecycle.values()) {
166             bind(LifecycleHandler.class)
167                 .withClassifier(named(lifecycle.getName()))
168                 .toProvider(new LifecycleHandlerProvider(lifecycle.getName()))
169                 .asSingleton();
170         }
171 
172         bind(WindowManager.class)
173             .to(NoopWindowManager.class)
174             .asSingleton();
175 
176         bind(ActionManager.class)
177             .to(DefaultActionManager.class)
178             .asSingleton();
179 
180         bind(ArtifactManager.class)
181             .to(DefaultArtifactManager.class)
182             .asSingleton();
183 
184         bind(ArtifactHandler.class)
185             .to(ModelArtifactHandler.class)
186             .asSingleton();
187 
188         bind(ArtifactHandler.class)
189             .to(ViewArtifactHandler.class)
190             .asSingleton();
191 
192         bind(ArtifactHandler.class)
193             .to(ControllerArtifactHandler.class)
194             .asSingleton();
195 
196         bind(ArtifactHandler.class)
197             .to(ServiceArtifactHandler.class)
198             .asSingleton();
199 
200         bind(PlatformHandler.class)
201             .toProvider(PlatformHandlerProvider.class)
202             .asSingleton();
203 
204         bind(AddonManager.class)
205             .to(DefaultAddonManager.class)
206             .asSingleton();
207 
208         bind(EventHandler.class)
209             .to(DefaultEventHandler.class)
210             .asSingleton();
211 
212         bind(GriffonExceptionHandler.class)
213             .asSingleton();
214         // end::bindings[]
215     }
216 }