package com.easyooo.framework.configure; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.util.Enumeration; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * Override Properties Simple Wrapper * * @author Killer * @since 1.0 */ public class OverrideProperties { final Logger logger = LoggerFactory.getLogger(getClass()); private boolean hasDefaultProperties = false; private Properties defaultProperties; /** * 加载默认的属性,如果重复调用,会覆盖默认属性 * * @param stream */ public void loadDefaultProperties(InputStream stream)throws IOException{ defaultProperties = new Properties(); defaultProperties.load(stream); this.hasDefaultProperties = true; } /** * * 保证传入的Reader是一个标准的Properties语法 * 该方法不会覆盖 {@link #loadDefaultProperties(InputStream)} 加载的Properties * 拷贝一个副本 * * @param reader 任何实现了Reader接口的读取器, 如:StringReader */ public Properties overrideProperties(Reader reader)throws IOException{ Properties overrideProps = null; if(hasDefaultProperties){ overrideProps = cloneDefaultProperties(); }else{ // no defaults overrideProps = new Properties(); } overrideProps.load(reader); return overrideProps; } /** * 读取默认属性,获得一个克隆的版本 * * @return Clone Default Properties */ public Properties getDefaultProperties(){ return cloneDefaultProperties(); } private Properties cloneDefaultProperties(){ if(this.hasDefaultProperties){ Properties tmp = new Properties(); Enumeration<?> keys = defaultProperties.propertyNames(); while(keys.hasMoreElements()){ Object o = keys.nextElement(); tmp.put( o , defaultProperties.get(o)); } return tmp; } return null; } }