package org.fastcatsearch.settings; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Settings { private static Logger logger = LoggerFactory.getLogger(Settings.class); private static final int K = 1024; private static final int M = K * K; private static final int G = K * K * K; private String prefix; private Properties properties; public Settings() { properties = new Properties(); } public Settings(Properties properties) { this.properties = properties; } private Settings(String prefix, Properties properties) { this.prefix = prefix; this.properties = properties; } public Properties properties(){ return properties; } public Settings getSubSettings(String prefix) { if(this.prefix != null){ if(prefix != null){ //이어붙인다. prefix = this.prefix + "." + prefix; }else{ //그대로 상속. prefix = this.prefix; } } return new Settings(prefix, properties); } public int getInt(String key) { return getInt(key, -1); } public long getLong(String key) { return getLong(key, -1); } public float getFloat(String key) { return getFloat(key, -1); } public double getDouble(String key) { return getDouble(key, -1); } public boolean getBoolean(String key) { return getBoolean(key, false); } public String getString(String key) { return getString(key, null); } public int getInt(String key, int defaultValue) { String value = getValue(key); if (value == null) { return defaultValue; } else { try { return Integer.parseInt(value); } catch (NumberFormatException e) { return defaultValue; } } } public long getLong(String key, long defaultValue) { String value = getValue(key); if (value == null) { return defaultValue; } else { try { return Long.parseLong(value); } catch (NumberFormatException e) { return defaultValue; } } } public float getFloat(String key, float defaultValue) { String value = getValue(key); if (value == null) { return defaultValue; } else { try { return Float.parseFloat(value); } catch (NumberFormatException e) { return defaultValue; } } } public double getDouble(String key, double defaultValue) { String value = getValue(key); if (value == null) { return defaultValue; } else { try { return Double.parseDouble(value); } catch (NumberFormatException e) { return defaultValue; } } } public boolean getBoolean(String key, boolean defaultValue) { String value = getValue(key); if (value == null) { return defaultValue; } else { try{ return Boolean.parseBoolean(value); }catch(Exception e){ return defaultValue; } } } public String getString(String key, String defaultValue) { String value = getValue(key); if (value != null) { return value.toString(); } else { return defaultValue; } } public String[] getStringArray(String key, String delimiter) { String value = getValue(key); if (value != null) { return value.split(delimiter); } else { return null; } } public String getValue(String key) { //prefix가 존재하면 prefix가 붙은 설정값이 우선한다. if(prefix != null){ String value = properties.getProperty(prefix + "." + key); if(value != null){ return value.trim(); } } //없으면 prefix없는 설정값사용. String value = properties.getProperty(key); if(value != null){ return value.trim(); } return null; } public long getByteSize(String key, long defaultValue) { String str = getString(key); if (str == null) return defaultValue; str = str.trim(); int len = str.length(); try { if (len > 0) { char suffix = str.charAt(len - 1); if (suffix == 'g' || suffix == 'G') { return Long.parseLong(str.substring(0, len - 1).trim()) * G; } else if (suffix == 'm' || suffix == 'M') { return Long.parseLong(str.substring(0, len - 1).trim()) * M; } else if (suffix == 'k' || suffix == 'K') { return Long.parseLong(str.substring(0, len - 1).trim()) * K; } else if (suffix == 'b' || suffix == 'B') { return Long.parseLong(str.substring(0, len - 1).trim()); } else { return Long.parseLong(str); } } else { return defaultValue; } } catch (NumberFormatException e) { return defaultValue; } } public Properties getStartsWith(String prefix){ Properties props = new Properties(); String match = prefix + "."; for(Object key : properties.keySet()){ String stringKey = key.toString(); if(stringKey.startsWith(match)){ String newKey = stringKey.substring(match.length()); String value = properties.getProperty(stringKey); props.put(newKey, value); } } return props; } }