/* * Copyright (C) 2011. * All rights reserved. */ package ro.isdc.wro.config.factory; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.isdc.wro.config.jmx.WroConfiguration; import ro.isdc.wro.util.ObjectFactory; /** * Load {@link WroConfiguration} from a servletContext relative location. By default loads properties file from ( * <code>/WEB-INF/wro.properties</code>) location. * * @author Alex Objelean * @created 7 May 2012 * @since 1.4.6 */ public class ServletContextPropertyWroConfigurationFactory implements ObjectFactory<WroConfiguration> { private static final Logger LOG = LoggerFactory.getLogger(ServletContextPropertyWroConfigurationFactory.class); /** * The default name of the properties file holding wro configurations. */ private static final String DEFAULT_PROPERTIES_FILE_NAME = "/WEB-INF/wro.properties"; private ServletContext servletContext; public ServletContextPropertyWroConfigurationFactory(final ServletContext servletContext) { Validate.notNull(servletContext); this.servletContext = servletContext; } /** * @return default path to configuration file relative to {@link ServletContext} location. */ protected String getConfigPath() { return DEFAULT_PROPERTIES_FILE_NAME; } /** * {@inheritDoc} */ public final WroConfiguration create() { return new PropertyWroConfigurationFactory(createProperties()).create(); } /** * @return {@link Properties} loaded from the stream from servletContext location specified by * {@link ServletContextPropertyWroConfigurationFactory#getConfigPath()} method. */ public Properties createProperties() { // Merge Properties file content with the filterConfig content. final Properties props = new Properties(); InputStream propertyStream = null; try { LOG.debug("loading config resource from: {}", getConfigPath()); propertyStream = servletContext.getResourceAsStream(getConfigPath()); Validate.notNull(propertyStream); props.load(propertyStream); } catch (final Exception e) { LOG.error("[FAIL] Cannot read properties file stream from default location: {}. Using default configuration.", getConfigPath()); } finally { IOUtils.closeQuietly(propertyStream); } return props; } }