package com.sothr.imagetools; import com.sothr.imagetools.dao.HibernateUtil; import com.sothr.imagetools.util.ResourceLoader; import com.sothr.imagetools.util.PropertiesService; import com.sothr.imagetools.util.PropertiesEnum; import net.sf.ehcache.CacheManager; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.joran.spi.JoranException; import ch.qos.logback.core.util.StatusPrinter; import java.io.File; import java.util.Properties; public class AppConfig { private static Logger logger; public static CacheManager cacheManager; //Logging defaults private static final String LOGSETTINGSFILE = "./logback.xml"; private static Boolean configuredLogging = false; //Properties defaults private static final String DEFAULTPROPERTIESFILE = "application.conf"; private static final String USERPROPERTIESFILE = "user.conf"; private static Boolean loadedProperties = false; //Cache defaults private static Boolean configuredCache = false; public static void configureApp() { logger = (Logger)LoggerFactory.getLogger(AppConfig.class); loadProperties(); configLogging(); configCache(); } public static void configLogging(String location) { //Logging Config //remove previous configuration if it exists Logger rootLogger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); LoggerContext context = rootLogger.getLoggerContext(); context.reset(); File file = new File(location); Boolean fromFile = false; if (file.exists()) { fromFile = true; try { JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(context); // Call context.reset() to clear any previous configuration, e.g. default // configuration. For multi-step configuration, omit calling context.reset(). context.reset(); configurator.doConfigure(location); } catch (JoranException je) { // StatusPrinter will handle this } StatusPrinter.printInCaseOfErrorsOrWarnings(context); } else { try { JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(context); // Call context.reset() to clear any previous configuration, e.g. default // configuration. For multi-step configuration, omit calling context.reset(). context.reset(); configurator.doConfigure(ResourceLoader.get().getResource("logback-minimum-config.xml")); } catch (JoranException je) { // StatusPrinter will handle this } StatusPrinter.printInCaseOfErrorsOrWarnings(context); } String message = fromFile ? "From File" : "From Defaults"; logger.info(String.format("Configured Logger %s", message)); logger.info("Detected Version: %s of Image Tools".format(PropertiesService.getVersion().toString())); } //Only configure logging from the default file once public static void configLogging() { if (!configuredLogging) { configLogging(LOGSETTINGSFILE); configuredLogging = true; logger.info("Configured logging"); } } public static void loadProperties() { if (!loadedProperties) { File file = new File(USERPROPERTIESFILE); if (file.exists()) { PropertiesService.loadProperties(DEFAULTPROPERTIESFILE, USERPROPERTIESFILE); } else { PropertiesService.loadProperties(DEFAULTPROPERTIESFILE, null); } loadedProperties = true; logger.info("Loaded Properties"); } } public static void configCache() { if (!configuredCache) { cacheManager = CacheManager.newInstance(); configuredCache = true; logger.info("Configured EHCache"); } } public static void shutdown() { saveProperties(); HibernateUtil.getSessionFactory().close(); } public static void saveProperties() { PropertiesService.saveConf(USERPROPERTIESFILE); logger.debug("Saved properties"); } }