You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
4.5 KiB

  1. package com.sothr.imagetools.engine;
  2. import akka.actor.ActorSystem;
  3. import ch.qos.logback.classic.Logger;
  4. import ch.qos.logback.classic.LoggerContext;
  5. import ch.qos.logback.classic.joran.JoranConfigurator;
  6. import ch.qos.logback.core.joran.spi.JoranException;
  7. import ch.qos.logback.core.util.StatusPrinter;
  8. import com.sothr.imagetools.engine.dao.HibernateUtil;
  9. import com.sothr.imagetools.engine.util.PropertiesService;
  10. import com.sothr.imagetools.engine.util.ResourceLoader;
  11. import javafx.stage.Stage;
  12. import net.sf.ehcache.CacheManager;
  13. import org.slf4j.LoggerFactory;
  14. import java.io.File;
  15. public class AppConfig {
  16. private static Logger logger;
  17. public static CacheManager cacheManager;
  18. // Logging defaults
  19. private static final String LOGSETTINGSFILE = "./logback.xml";
  20. private static Boolean configuredLogging = false;
  21. // Properties defaults
  22. private static final String DEFAULTPROPERTIESFILE = "application.conf";
  23. private static final String USERPROPERTIESFILE = "user.conf";
  24. private static Boolean loadedProperties = false;
  25. // Cache defaults
  26. private static Boolean configuredCache = false;
  27. // General Akka Actor System
  28. private static final ActorSystem appSystem = ActorSystem.create("ITActorSystem");
  29. // The Main App
  30. private static Stage primaryStage = null;
  31. public static Stage getPrimaryStage() { return primaryStage; }
  32. public static void setPrimaryStage(Stage newPrimaryStage) { primaryStage = newPrimaryStage; }
  33. public static ActorSystem getAppActorSystem() {
  34. return appSystem;
  35. }
  36. public static void configureApp() {
  37. logger = (Logger)LoggerFactory.getLogger(AppConfig.class);
  38. loadProperties();
  39. configLogging();
  40. configCache();
  41. }
  42. private static void configLogging(String location) {
  43. //Logging Config
  44. //remove previous configuration if it exists
  45. Logger rootLogger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
  46. LoggerContext context = rootLogger.getLoggerContext();
  47. context.reset();
  48. File file = new File(location);
  49. Boolean fromFile = false;
  50. if (file.exists()) {
  51. fromFile = true;
  52. try {
  53. JoranConfigurator configurator = new JoranConfigurator();
  54. configurator.setContext(context);
  55. // Call context.reset() to clear any previous configuration, e.g. default
  56. // configuration. For multi-step configuration, omit calling context.reset().
  57. context.reset();
  58. configurator.doConfigure(location);
  59. } catch (JoranException je) {
  60. // StatusPrinter will handle this
  61. }
  62. StatusPrinter.printInCaseOfErrorsOrWarnings(context);
  63. } else {
  64. try {
  65. JoranConfigurator configurator = new JoranConfigurator();
  66. configurator.setContext(context);
  67. // Call context.reset() to clear any previous configuration, e.g. default
  68. // configuration. For multi-step configuration, omit calling context.reset().
  69. context.reset();
  70. configurator.doConfigure(ResourceLoader.get().getResourceStream("logback-minimum-config.xml"));
  71. } catch (JoranException je) {
  72. // StatusPrinter will handle this
  73. }
  74. StatusPrinter.printInCaseOfErrorsOrWarnings(context);
  75. }
  76. String message = fromFile ? "From File" : "From Defaults";
  77. logger.info(String.format("Configured Logger %s", message));
  78. logger.info(String.format("Detected Version: %s of Image Tools", PropertiesService.getVersion().toString()));
  79. }
  80. //Only configure logging from the default file once
  81. private static void configLogging() {
  82. if (!configuredLogging) {
  83. configLogging(LOGSETTINGSFILE);
  84. configuredLogging = true;
  85. logger.info("Configured logging");
  86. }
  87. }
  88. private static void loadProperties() {
  89. if (!loadedProperties) {
  90. File file = new File(USERPROPERTIESFILE);
  91. if (file.exists()) {
  92. PropertiesService.loadProperties(DEFAULTPROPERTIESFILE, USERPROPERTIESFILE);
  93. } else {
  94. PropertiesService.loadProperties(DEFAULTPROPERTIESFILE, null);
  95. }
  96. loadedProperties = true;
  97. logger.info("Loaded Properties");
  98. }
  99. }
  100. private static void configCache() {
  101. if (!configuredCache) {
  102. cacheManager = CacheManager.newInstance();
  103. configuredCache = true;
  104. logger.info("Configured EHCache");
  105. }
  106. }
  107. public static void shutdown() {
  108. saveProperties();
  109. HibernateUtil.getSessionFactory().close();
  110. }
  111. private static void saveProperties() {
  112. PropertiesService.saveConf(USERPROPERTIESFILE);
  113. logger.debug("Saved properties");
  114. }
  115. }