/** * Copyright@2011 wro4j */ package ro.isdc.wro.http.handler.factory; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.isdc.wro.http.handler.RequestHandler; import ro.isdc.wro.http.handler.spi.RequestHandlerProvider; import ro.isdc.wro.model.resource.support.AbstractConfigurableMultipleStrategy; /** * A {@link RequestHandler} implementation which is easy to configure using a {@link Properties} object. * * @author Alex Objelean * @created 30 Jul 2011 * @since 1.5.0 */ public class ConfigurableRequestHandlerFactory extends AbstractConfigurableMultipleStrategy<RequestHandler, RequestHandlerProvider> implements RequestHandlerFactory { private static final Logger LOG = LoggerFactory.getLogger(ConfigurableRequestHandlerFactory.class); /** * Name of the property used to configure requestHandlers. */ public static final String KEY = "requestHandlers"; private final RequestHandlerFactory requestHandlerFactory = newRequestHandlerFactory(); /** * {@inheritDoc} */ @Override protected String getStrategyKey() { return KEY; } /** * {@inheritDoc} */ @Override protected Map<String, RequestHandler> getStrategies(final RequestHandlerProvider provider) { return provider.provideRequestHandlers(); } /** * {@inheritDoc} */ public Collection<RequestHandler> create() { return requestHandlerFactory.create(); } /** * {@inheritDoc} */ private RequestHandlerFactory newRequestHandlerFactory() { final SimpleRequestHandlerFactory factory = new SimpleRequestHandlerFactory(); final List<RequestHandler> requestHandlers = getConfiguredStrategies(); for (final RequestHandler requestHandler : requestHandlers) { factory.addHandler(requestHandler); } // use default when none provided if (requestHandlers.isEmpty()) { LOG.debug("No locators configured. Using Default locator factory."); return new DefaultRequestHandlerFactory(); } return factory; } /** * {@inheritDoc} */ @Override protected Class<RequestHandlerProvider> getProviderClass() { return RequestHandlerProvider.class; } }