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 }