package com.mfh.comna.comn.cfg;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
/**
* 属性文件配置文件对象
*
* @author zhangyz created on 2013-5-25
* @since Framework 1.0
*/
public class PropertiesConfiguration extends BaseFileConfiguration{
private Properties prop;
/*@Override
public UConfig subset(String s) {
return null;
}*/
@Override
public boolean isEmpty() {
return prop.isEmpty();
}
@Override
public boolean containsKey(String s) {
return prop.containsKey(s);
}
@Override
public void addProperty(String s, Object obj) {
prop.put(s, obj);
bUpdated = true;
}
@Override
public void setProperty(String s, Object obj) {
prop.setProperty(s, obj.toString());
bUpdated = true;
}
@Override
public void clearProperty(String s) {
prop.remove(s);
bUpdated = true;
}
@Override
public void clear() {
prop.clear();
bUpdated = true;
}
@Override
public Object getProperty(String s) {
return prop.getProperty(s);
}
/*@Override
public Iterator<?> getKeys(String s) {
throw new RuntimeException("不支持此方法!");
}*/
@Override
public Iterator<?> getKeys() {
return prop.keySet().iterator();
}
@Override
public Properties getProperties(String s) {
throw new RuntimeException("不支持此方法!");
}
@Override
public boolean getBoolean(String s) {
return getBoolean(s, false);
}
@Override
public boolean getBoolean(String s, boolean flag) {
String value = prop.getProperty(s);
if (value == null)
return flag;
return Boolean.valueOf(value);
}
@Override
public Boolean getBoolean(String s, Boolean boolean1) {
String value = prop.getProperty(s);
if (value == null)
return boolean1;
return Boolean.valueOf(value);
}
@Override
public byte getByte(String s) {
byte bb = 0;
return getByte(s ,bb);
}
@Override
public byte getByte(String s, byte byte0) {
String value = prop.getProperty(s);
if (value == null)
return byte0;
else
return value.getBytes()[0];
}
@Override
public Byte getByte(String s, Byte byte1) {
String value = prop.getProperty(s);
if (value == null)
return byte1;
else
return value.getBytes()[0];
}
@Override
public double getDouble(String s) {
return getDouble (s, 0);
}
@Override
public double getDouble(String s, double d) {
String value = prop.getProperty(s);
if (value == null)
return d;
return Double.valueOf(value);
}
@Override
public Double getDouble(String s, Double double1) {
String value = prop.getProperty(s);
if (value == null)
return double1;
return Double.valueOf(value);
}
@Override
public float getFloat(String s) {
return getFloat(s, 0);
}
@Override
public float getFloat(String s, float f) {
String value = prop.getProperty(s);
if (value == null)
return f;
return Float.valueOf(value);
}
@Override
public Float getFloat(String s, Float float1) {
String value = prop.getProperty(s);
if (value == null)
return float1;
return Float.valueOf(value);
}
@Override
public int getInt(String s) {
return getInt (s, 0);
}
@Override
public int getInt(String s, int i) {
String value = prop.getProperty(s);
if (value == null)
return i;
return Integer.valueOf(value);
}
@Override
public Integer getInteger(String s, Integer integer) {
String value = prop.getProperty(s);
if (value == null)
return integer;
return Integer.valueOf(value);
}
@Override
public long getLong(String s) {
return getLong(s, 0);
}
@Override
public long getLong(String s, long l) {
String value = prop.getProperty(s);
if (value == null)
return l;
return Long.valueOf(value);
}
@Override
public Long getLong(String s, Long long1) {
String value = prop.getProperty(s);
if (value == null)
return long1;
return Long.valueOf(value);
}
@Override
public short getShort(String s) {
return getShort(s, (short)0);
}
@Override
public short getShort(String s, short word0) {
String value = prop.getProperty(s);
if (value == null)
return word0;
return Short.valueOf(value);
}
@Override
public Short getShort(String s, Short short1) {
String value = prop.getProperty(s);
if (value == null)
return short1;
return Short.valueOf(value);
}
@Override
public BigDecimal getBigDecimal(String s) {
String value = prop.getProperty(s);
if (value == null)
return BigDecimal.valueOf(0);
return BigDecimal.valueOf(Double.valueOf(value));
}
@Override
public BigDecimal getBigDecimal(String s, BigDecimal bigdecimal) {
String value = prop.getProperty(s);
if (value == null)
return bigdecimal;
return BigDecimal.valueOf(Double.valueOf(value));
}
@Override
public BigInteger getBigInteger(String s) {
String value = prop.getProperty(s);
if (value == null)
return BigInteger.valueOf(0);
return BigInteger.valueOf(Long.valueOf(value));
}
@Override
public BigInteger getBigInteger(String s, BigInteger biginteger) {
String value = prop.getProperty(s);
if (value == null)
return biginteger;
return BigInteger.valueOf(Long.valueOf(value));
}
@Override
public String getString(String s) {
return prop.getProperty(s);
}
@Override
public String getStringNotNull(String s) {
String ret = prop.getProperty(s);
if (ret == null || ret.length() == 0)
throw new RuntimeException(s + "配置属性不存在!");
return ret;
}
@Override
public String getString(String s, String s1) {
String value = prop.getProperty(s);
if (value == null)
return s1;
return value;
}
/*@Override
public String[] getStringArray(String s) {
String value = prop.getProperty(s);
if (value == null)
return null;
else
return new String[] {value};
}*/
@Override
public List<?> getList(String s) {
String value = prop.getProperty(s);
if (value == null)
return null;
else {
List<String> ret = new ArrayList<String>();
ret.add(value);
return ret;
}
}
/*@Override
public List<?> getList(String s, List<?> list) {
String value = prop.getProperty(s);
if (value == null)
return list;
else {
List<String> ret = new ArrayList<String>();
ret.add(value);
return ret;
}
}*/
@Override
public void refresh() {
try {
InputStream in = readStream(fromConfigPath);
loadInner(in);
}
catch(Exception ex) {
throw new RuntimeException("读取配置文件失败:" + ex.getMessage());
}
}
@Override
protected void writeCommitInner(OutputStream fos) throws Exception{
prop.store(fos, "");
}
@Override
public boolean loadFromFile(String configPath) {
this.fromConfigPath = configPath;
prop = new Properties();
try {
InputStream in = readStream(configPath);
if (in == null)
return false;
else {
loadInner(in);
return true;
}
}
catch(Exception ex) {
throw new RuntimeException("读取配置文件失败:" + ex.getMessage());
}
}
//执行具体的读取逻辑
private void loadInner(InputStream in) throws Exception{
try {
if (prop == null)
prop = new Properties();
else
prop.clear();
prop.load(in);
}
finally {
if (in != null) {
try {
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public boolean loadFromURI(URI configPath) {
return true;
}
/**
* (non-Javadoc)
* @see com.mfh.comn.config.IConfiguration#getProperties()
*/
@Override
public Properties getProperties() {
// TODO Auto-generated method stub
return null;
}
}