001 package org.shiftone.jrat.core; 002 003 import org.shiftone.jrat.core.config.Configuration; 004 import org.shiftone.jrat.core.config.ConfigurationParser; 005 import org.shiftone.jrat.core.config.Settings; 006 import org.shiftone.jrat.util.io.IOUtil; 007 import org.shiftone.jrat.util.io.ResourceUtil; 008 import org.shiftone.jrat.util.log.Logger; 009 010 import java.io.*; 011 import java.util.Date; 012 013 /** 014 * @author jeff@shiftone.org (Jeff Drost) 015 */ 016 public class Environment { 017 018 private static final Logger LOG = Logger.getLogger(Environment.class); 019 private static final String CONFIG_FILE = "jrat.xml"; 020 private static final String DEFAULT_FILE = "org/shiftone/jrat/core/default-jrat.xml"; 021 public static final Environment INSTANCE = new Environment(); 022 private final Configuration configuration; 023 024 public Environment() { 025 026 if (Mode.get().isEnvironmentLoadingEnabled()) { 027 028 File file = new File(CONFIG_FILE); 029 030 byte[] configurationData = getConfigurationData(file); 031 032 configuration = ConfigurationParser.parse( 033 new ByteArrayInputStream(configurationData) 034 ); 035 036 } else { 037 038 configuration = new Configuration(); 039 040 } 041 } 042 043 private byte[] getConfigurationData(File file) { 044 045 046 if (!file.exists()) { 047 048 LOG.info("Initializing configuration file with default..."); 049 LOG.info("Edit this file to further configure JRat."); 050 copyDefaultFile(file); 051 052 } else { 053 054 LOG.info("Using existing configuration file."); 055 056 } 057 058 LOG.info("Loading JRat Configuration : " + file.getAbsolutePath() + "..."); 059 LOG.info("File was last modified " + new Date(file.lastModified())); 060 061 return IOUtil.readAndClose(IOUtil.openInputStream(file)); 062 063 } 064 065 066 private void copyDefaultFile(File file) { 067 068 try { 069 070 InputStream defaultStream = ResourceUtil.loadResourceAsStream(DEFAULT_FILE); 071 OutputStream outputStream = new FileOutputStream(file); 072 IOUtil.copy(defaultStream, outputStream); 073 074 } catch (Exception e) { 075 076 throw new JRatException("unable to copy default configuration file to : " + file.getAbsolutePath(), e); 077 078 } 079 } 080 081 082 public static Configuration getConfiguration() { 083 return INSTANCE.configuration; 084 } 085 086 public static Settings getSettings() { 087 return getConfiguration().getSettings(); 088 } 089 090 091 }