package org.dayatang.configuration.impl; import org.apache.commons.lang3.StringUtils; import org.dayatang.configuration.Configuration; import org.dayatang.configuration.ConfigurationException; import org.dayatang.utils.Assert; import org.dayatang.utils.ObjectSerializer; import org.dayatang.utils.serializer.GsonSerializerBuilder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Hashtable; import java.util.Properties; public abstract class AbstractConfiguration implements Configuration { private String dateFormat = "yyyy-MM-dd"; private String prefix = ""; private static final String DATE_FORMAT_KEY = "DATE_FORMAT"; //private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; protected Hashtable<String, String> hTable; private PropertiesFileUtils pfu = new PropertiesFileUtils("utf-8"); private ObjectSerializer serializer = new GsonSerializerBuilder().build(); public String getDateFormat() { return dateFormat; } public void setDateFormat(String dateFormat) { this.dateFormat = dateFormat; } /** * 激活配置前缀功能 * * @param prefix 如"org.dayatang.mes." */ public void usePrefix(final String prefix) { if (StringUtils.isNotBlank(prefix)) { this.prefix = prefix.endsWith(".") ? prefix : prefix + "."; } } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getString(java.lang.String, java.lang.String) */ @Override public String getString(String key, String defaultValue) { Assert.notBlank(key, "Key is null or empty!"); String result = getHashtable().get(key); if (result == null) { result = (String) getHashtable().get(prefix + key); } return result == null ? defaultValue : result; } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getString(java.lang.String) */ @Override public String getString(String key) { return getString(key, ""); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setString(java.lang.String, java.lang.String) */ @Override public void setString(String key, String value) { Assert.notBlank(key, "Key is null or empty!"); if (StringUtils.isBlank(value)) { getHashtable().remove(key); return; } getHashtable().put(key, StringPropertyReplacer.replaceProperties(value)); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getInt(java.lang.String, int) */ @Override public int getInt(String key, int defaultValue) { String result = getString(key, String.valueOf(defaultValue)); return StringUtils.isBlank(result) ? defaultValue : Integer.parseInt(result); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getInt(java.lang.String) */ @Override public int getInt(String key) { return getInt(key, 0); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setInt(java.lang.String, int) */ @Override public void setInt(String key, int value) { setString(key, String.valueOf(value)); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getLong(java.lang.String, long) */ @Override public long getLong(String key, long defaultValue) { String result = getString(key, String.valueOf(defaultValue)); return StringUtils.isBlank(result) ? defaultValue : Long.parseLong(result); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getLong(java.lang.String) */ @Override public long getLong(String key) { return getLong(key, 0); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setLong(java.lang.String, long) */ @Override public void setLong(String key, long value) { setString(key, String.valueOf(value)); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getDouble(java.lang.String, double) */ @Override public double getDouble(String key, double defaultValue) { String result = getString(key, String.valueOf(defaultValue)); return StringUtils.isBlank(result) ? defaultValue : Double.parseDouble(result); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getDouble(java.lang.String) */ @Override public double getDouble(String key) { return getDouble(key, 0); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setDouble(java.lang.String, double) */ @Override public void setDouble(String key, double value) { setString(key, String.valueOf(value)); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getBoolean(java.lang.String, boolean) */ @Override public boolean getBoolean(String key, boolean defaultValue) { String result = getString(key, String.valueOf(defaultValue)); return StringUtils.isBlank(result) ? defaultValue : Boolean.parseBoolean(result); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getBoolean(java.lang.String) */ @Override public boolean getBoolean(String key) { return getBoolean(key, false); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setBoolean(java.lang.String, boolean) */ @Override public void setBoolean(String key, boolean value) { setString(key, String.valueOf(value)); } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getDate(java.lang.String, java.util.Date) */ @Override public Date getDate(String key, Date defaultValue) { String result = getString(key); try { return StringUtils.isBlank(result) ? defaultValue : new SimpleDateFormat(dateFormat).parse(result); } catch (ParseException e) { throw new ConfigurationException("日期解析错误!日期格式是:" + dateFormat + ", 日期:" + result, e); } } /* (non-Javadoc) * @see org.dayatang.configuration.Configuration#getDate(java.lang.String) */ @Override public Date getDate(String key) { return getDate(key, (Date) null); } /* (non-Javadoc) * @see org.dayatang.configuration.WritableConfiguration#setDate(java.lang.String, java.util.Date) */ @Override public void setDate(String key, Date value) { if (value == null) { setString(key, ""); } setString(key, new SimpleDateFormat(dateFormat).format(value)); } @Override public <T> T getObject(String key, Class<T> objectClass, T defaultValue) { T result = serializer.deserialize(getString(key), objectClass); return result == null ? defaultValue : result; } @Override public <T> T getObject(String key, Class<T> objectClass) { return getObject(key, objectClass, null); } @Override public void setObject(String key, Object value) { setString(key, serializer.serialize(value)); } @Override public Properties getProperties() { return pfu.unRectifyProperties(getHashtable()); } private Hashtable<String, String> getHashtable() { if (hTable == null) { load(); } return hTable; } }