/* Copyright 2005-2006 Tim Fennell * * 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 net.sourceforge.stripes.config; import net.sourceforge.stripes.controller.ActionBeanPropertyBinder; import net.sourceforge.stripes.controller.ActionResolver; import net.sourceforge.stripes.controller.ActionBeanContextFactory; import net.sourceforge.stripes.controller.ObjectFactory; import net.sourceforge.stripes.localization.LocalizationBundleFactory; import net.sourceforge.stripes.localization.LocalePicker; import net.sourceforge.stripes.validation.TypeConverterFactory; import net.sourceforge.stripes.validation.ValidationMetadataProvider; import net.sourceforge.stripes.tag.TagErrorRendererFactory; import net.sourceforge.stripes.tag.PopulationStrategy; import net.sourceforge.stripes.format.FormatterFactory; import net.sourceforge.stripes.controller.Interceptor; import net.sourceforge.stripes.controller.LifecycleStage; import net.sourceforge.stripes.controller.multipart.MultipartWrapperFactory; import net.sourceforge.stripes.exception.ExceptionHandler; import javax.servlet.ServletContext; import java.util.Collection; /** * <p>Type safe interface for accessing configuration information used to configure Stripes. All * Configuration implementations are handed a reference to the BootstrapPropertyResolver to * enable them to find initial values and fully initialize themselves. Through the * BootstrapPropertyResolver implementations also get access to the ServletConfig of the * DispatcherServlet which can be used for locating configuration values if desired.</p> * * <p>Implementations of Configuration should fail fast. At initialization time they should * detect as many failures as possible and raise an exception. Since exceptions in Configuration * are considered fatal there are no exception specifications and implementations are expected to * throw runtime exceptions with plenty of details about the failure and its suspected cause(s).</p> * * @author Tim Fennell */ public interface Configuration { /** * Supplies the Configuration with a BootstrapPropertyResolver. This method is guaranteed to * be invoked prior to the init method. * * @param resolver a BootStrapPropertyResolver which can be used to find any values required * by the Configuration in order to initialize */ void setBootstrapPropertyResolver(BootstrapPropertyResolver resolver); /** * Called by the DispatcherServlet to initialize the Configuration. Any operations which may * fail and cause the Configuration to be inaccessible should be performed here (e.g. * opening a configuration file and reading the contents). */ void init(); /** * Implementations should implement this method to simply return a reference to the * BootstrapPropertyResolver passed to the Configuration at initialization time. * * @return BootstrapPropertyResolver the instance passed to the init() method */ BootstrapPropertyResolver getBootstrapPropertyResolver(); /** * Retrieves the ServletContext for the context within which the Stripes application * is executing. * * @return the ServletContext in which the application is running */ ServletContext getServletContext(); /** Enable or disable debug mode. */ void setDebugMode(boolean debugMode); /** Returns true if the Stripes application is running in debug mode. */ boolean isDebugMode(); /** * Returns an instance of {@link ObjectFactory} that is used throughout Stripes to instantiate * classes. * * @return an instance of {@link ObjectFactory}. */ ObjectFactory getObjectFactory(); /** * Returns an instance of ActionResolver that will be used by Stripes to lookup and resolve * ActionBeans. The instance should be cached by the Configuration since multiple entities * in the system may access the ActionResolver throughout the lifetime of the application. * * @return the Class representing the configured ActionResolver */ ActionResolver getActionResolver(); /** * Returns an instance of ActionBeanPropertyBinder that is responsible for binding all * properties to all ActionBeans at runtime. The instance should be cached by the Configuration * since multiple entities in the system may access the ActionBeanPropertyBinder throughout the * lifetime of the application. * * @return ActionBeanPropertyBinder the property binder to be used by Stripes */ ActionBeanPropertyBinder getActionBeanPropertyBinder(); /** * Returns an instance of TypeConverterFactory that is responsible for providing lookups and * instances of TypeConverters for the validation system. The instance should be cached by the * Configuration since multiple entities in the system may access the TypeConverterFactory * throughout the lifetime of the application. * * @return TypeConverterFactory an instance of a TypeConverterFactory implementation */ TypeConverterFactory getTypeConverterFactory(); /** * Returns an instance of LocalizationBundleFactory that is responsible for looking up * resource bundles for the varying localization needs of a web application. The instance should * be cached by the Configuration since multiple entities in the system may access the * LocalizationBundleFactory throughout the lifetime of the application. * * @return LocalizationBundleFactory an instance of a LocalizationBundleFactory implementation */ LocalizationBundleFactory getLocalizationBundleFactory(); /** * Returns an instance of LocalePicker that is responsible for choosing the Locale for * each request that enters the system. * * @return LocalePicker an instance of a LocalePicker implementation */ LocalePicker getLocalePicker(); /** * Returns an instance of FormatterFactory that is responsible for creating Formatter objects * for converting rich types into Strings for display on pages. * * @return LocalePicker an instance of a LocalePicker implementation */ FormatterFactory getFormatterFactory(); /** * Returns an instance of a tag error renderer factory for building custom error renderers * for form input tags that have field errors. * * @return TagErrorRendererFactory an instance of TagErrorRendererFactory */ TagErrorRendererFactory getTagErrorRendererFactory(); /** * Returns an instance of a PopulationStrategy that determines from where a tag's value * should be repopulated. * * @return PopulationStrategy an instance of PopulationStrategy */ PopulationStrategy getPopulationStrategy(); /** * Returns an instance of an action bean context factory which will used throughout Stripes * to manufacture ActionBeanContext objects. This allows projects to extend ActionBeanContext * and provide additional type safe methods for accessing contextual information cleanly. * * @return ActionBeanContextFactory an instance of ActionBeanContextFactory */ ActionBeanContextFactory getActionBeanContextFactory(); /** * Fetches the interceptors that should be executed around the lifecycle stage applied. * Must return a non-null collection, but the collection may be empty. The Interceptors * are invoked around the code which executes the given lifecycle function (e.g. * ActionBeanResolution), and as a result can execute code both before and after it. * * @return Collection<Interceptor> an ordered collection of interceptors to be executed * around the given lifecycle stage. */ Collection<Interceptor> getInterceptors(LifecycleStage stage); /** * Returns an instance of ExceptionHandler that can be used by Stripes to handle any * exceptions that arise as the result of processing a request. * * @return ExceptionHandler an instance of ExceptionHandler */ ExceptionHandler getExceptionHandler(); /** * Returns an instance of MultipartWrapperFactory that can be used by Stripes to construct * MultipartWrapper instances for dealing with multipart requests (those containing file * uploads). * * @return MultipartWrapperFactory an instance of the wrapper factory */ MultipartWrapperFactory getMultipartWrapperFactory(); /** * Returns an instance of {@link ValidationMetadataProvider} that can be used by Stripes to * determine what validations need to be applied during * {@link LifecycleStage#BindingAndValidation}. * * @return an instance of {@link ValidationMetadataProvider} */ ValidationMetadataProvider getValidationMetadataProvider(); }