/* * Copyright 2008-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.griffon.runtime.core; import griffon.core.ApplicationClassLoader; import griffon.core.ApplicationConfigurer; import griffon.core.Configuration; import griffon.core.Context; import griffon.core.ContextFactory; import griffon.core.ExceptionHandler; import griffon.core.ExecutorServiceManager; import griffon.core.LifecycleHandler; import griffon.core.PlatformHandler; import griffon.core.addon.AddonManager; import griffon.core.artifact.ArtifactHandler; import griffon.core.artifact.ArtifactManager; import griffon.core.controller.ActionManager; import griffon.core.env.Environment; import griffon.core.env.Lifecycle; import griffon.core.env.Metadata; import griffon.core.env.RunMode; import griffon.core.event.EventHandler; import griffon.core.event.EventRouter; import griffon.core.i18n.MessageSource; import griffon.core.mvc.MVCGroupConfigurationFactory; import griffon.core.mvc.MVCGroupFactory; import griffon.core.mvc.MVCGroupManager; import griffon.core.resources.ResourceHandler; import griffon.core.resources.ResourceInjector; import griffon.core.resources.ResourceResolver; import griffon.core.threading.UIThreadManager; import griffon.core.view.WindowManager; import griffon.util.CompositeResourceBundleBuilder; import griffon.util.Instantiator; import griffon.util.PropertiesReader; import griffon.util.ResourceBundleReader; import org.codehaus.griffon.runtime.core.addon.DefaultAddonManager; import org.codehaus.griffon.runtime.core.artifact.ControllerArtifactHandler; import org.codehaus.griffon.runtime.core.artifact.DefaultArtifactManager; import org.codehaus.griffon.runtime.core.artifact.ModelArtifactHandler; import org.codehaus.griffon.runtime.core.artifact.ServiceArtifactHandler; import org.codehaus.griffon.runtime.core.artifact.ViewArtifactHandler; import org.codehaus.griffon.runtime.core.controller.DefaultActionManager; import org.codehaus.griffon.runtime.core.env.EnvironmentProvider; import org.codehaus.griffon.runtime.core.env.MetadataProvider; import org.codehaus.griffon.runtime.core.env.RunModeProvider; import org.codehaus.griffon.runtime.core.event.DefaultEventHandler; import org.codehaus.griffon.runtime.core.event.DefaultEventRouter; import org.codehaus.griffon.runtime.core.i18n.DefaultMessageSourceDecoratorFactory; import org.codehaus.griffon.runtime.core.i18n.MessageSourceDecoratorFactory; import org.codehaus.griffon.runtime.core.i18n.MessageSourceProvider; import org.codehaus.griffon.runtime.core.injection.AbstractModule; import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupConfigurationFactory; import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupFactory; import org.codehaus.griffon.runtime.core.mvc.DefaultMVCGroupManager; import org.codehaus.griffon.runtime.core.resources.DefaultApplicationResourceInjector; import org.codehaus.griffon.runtime.core.resources.DefaultResourceHandler; import org.codehaus.griffon.runtime.core.resources.DefaultResourceResolverDecoratorFactory; import org.codehaus.griffon.runtime.core.resources.ResourceResolverDecoratorFactory; import org.codehaus.griffon.runtime.core.resources.ResourceResolverProvider; import org.codehaus.griffon.runtime.core.threading.DefaultExecutorServiceProvider; import org.codehaus.griffon.runtime.core.threading.DefaultUIThreadManager; import org.codehaus.griffon.runtime.core.view.NoopWindowManager; import org.codehaus.griffon.runtime.util.DefaultCompositeResourceBundleBuilder; import org.codehaus.griffon.runtime.util.DefaultInstantiator; import org.codehaus.griffon.runtime.util.ResourceBundleProvider; import javax.inject.Named; import java.util.ResourceBundle; import java.util.concurrent.ExecutorService; import static griffon.util.AnnotationUtils.named; /** * @author Andres Almiray * @since 2.0.0 */ @Named("core") public class DefaultApplicationModule extends AbstractModule { @Override protected void doConfigure() { // tag::bindings[] bind(ApplicationClassLoader.class) .to(DefaultApplicationClassLoader.class) .asSingleton(); bind(Metadata.class) .toProvider(MetadataProvider.class) .asSingleton(); bind(RunMode.class) .toProvider(RunModeProvider.class) .asSingleton(); bind(Environment.class) .toProvider(EnvironmentProvider.class) .asSingleton(); bind(ContextFactory.class) .to(DefaultContextFactory.class) .asSingleton(); bind(Instantiator.class) .to(DefaultInstantiator.class) .asSingleton(); bind(PropertiesReader.class) .toProvider(PropertiesReader.Provider.class) .asSingleton(); bind(ResourceBundleReader.class) .toProvider(ResourceBundleReader.Provider.class) .asSingleton(); bind(Context.class) .withClassifier(named("applicationContext")) .toProvider(DefaultContextProvider.class) .asSingleton(); bind(ApplicationConfigurer.class) .to(DefaultApplicationConfigurer.class) .asSingleton(); bind(ResourceHandler.class) .to(DefaultResourceHandler.class) .asSingleton(); bind(CompositeResourceBundleBuilder.class) .to(DefaultCompositeResourceBundleBuilder.class) .asSingleton(); bind(ResourceBundle.class) .withClassifier(named("applicationResourceBundle")) .toProvider(new ResourceBundleProvider("Config")) .asSingleton(); bind(ConfigurationDecoratorFactory.class) .to(DefaultConfigurationDecoratorFactory.class); bind(Configuration.class) .toProvider(ResourceBundleConfigurationProvider.class) .asSingleton(); bind(ExecutorServiceManager.class) .to(DefaultExecutorServiceManager.class) .asSingleton(); bind(EventRouter.class) .withClassifier(named("applicationEventRouter")) .to(DefaultEventRouter.class) .asSingleton(); bind(EventRouter.class) .to(DefaultEventRouter.class); bind(ResourceResolverDecoratorFactory.class) .to(DefaultResourceResolverDecoratorFactory.class); bind(MessageSourceDecoratorFactory.class) .to(DefaultMessageSourceDecoratorFactory.class); bind(ResourceResolver.class) .withClassifier(named("applicationResourceResolver")) .toProvider(new ResourceResolverProvider("resources")) .asSingleton(); bind(MessageSource.class) .withClassifier(named("applicationMessageSource")) .toProvider(new MessageSourceProvider("messages")) .asSingleton(); bind(ResourceInjector.class) .withClassifier(named("applicationResourceInjector")) .to(DefaultApplicationResourceInjector.class) .asSingleton(); bind(ExecutorService.class) .withClassifier(named("defaultExecutorService")) .toProvider(DefaultExecutorServiceProvider.class) .asSingleton(); bind(UIThreadManager.class) .to(DefaultUIThreadManager.class) .asSingleton(); bind(MVCGroupConfigurationFactory.class) .to(DefaultMVCGroupConfigurationFactory.class) .asSingleton(); bind(MVCGroupFactory.class) .to(DefaultMVCGroupFactory.class) .asSingleton(); bind(MVCGroupManager.class) .to(DefaultMVCGroupManager.class) .asSingleton(); for (Lifecycle lifecycle : Lifecycle.values()) { bind(LifecycleHandler.class) .withClassifier(named(lifecycle.getName())) .toProvider(new LifecycleHandlerProvider(lifecycle.getName())) .asSingleton(); } bind(WindowManager.class) .to(NoopWindowManager.class) .asSingleton(); bind(ActionManager.class) .to(DefaultActionManager.class) .asSingleton(); bind(ArtifactManager.class) .to(DefaultArtifactManager.class) .asSingleton(); bind(ArtifactHandler.class) .to(ModelArtifactHandler.class) .asSingleton(); bind(ArtifactHandler.class) .to(ViewArtifactHandler.class) .asSingleton(); bind(ArtifactHandler.class) .to(ControllerArtifactHandler.class) .asSingleton(); bind(ArtifactHandler.class) .to(ServiceArtifactHandler.class) .asSingleton(); bind(PlatformHandler.class) .toProvider(PlatformHandlerProvider.class) .asSingleton(); bind(AddonManager.class) .to(DefaultAddonManager.class) .asSingleton(); bind(EventHandler.class) .to(DefaultEventHandler.class) .asSingleton(); bind(ExceptionHandler.class) .toProvider(GriffonExceptionHandlerProvider.class) .asSingleton(); // end::bindings[] } }