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