/* * Copyright 2002-2006 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openuap.cms.comment.config; import java.io.File; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; import org.apache.commons.configuration.*; /** * <p> * Title: AbstractXmlConfiguration * </p> * * <p> * Description: * </p> * * <p> * Copyright: Copyright (c) 2006 * </p> * * <p> * Company: http://www.openuap.org * </p> * * @author Weiping Ju * @version 1.0 */ public abstract class AbstractXmlConfiguration implements Configuration { /** 配置文件. */ private File configFile; /** 是否已经配置. */ protected Configuration configuration = null; private boolean isConfiged = false; public AbstractXmlConfiguration() { } /** * 构造函数 * * @param configFile * File * @throws ConfigurationException */ public AbstractXmlConfiguration(File configFile) throws ConfigurationException { this.configFile = configFile; } protected void initConfig() { if (isConfiged) { return; } // if (configFile != null) { try { configuration = new XMLConfiguration(configFile); ((XMLConfiguration)configuration).setFile(configFile); ((XMLConfiguration)configuration).setEncoding("UTF-8"); } catch (ConfigurationException ex) { } } } public File getConfigFile() { return configFile; } public void setConfigFile(File configFile) { this.configFile = configFile; } public void reload() { if(configuration instanceof XMLConfiguration) ((XMLConfiguration)this.configuration).reload(); } public Configuration subset(String prefix) { return configuration.subset(prefix); } public boolean isEmpty() { return false; } public boolean containsKey(String string) { return false; } public void addProperty(String key, Object value) { this.configuration.addProperty(key, value); } public void setProperty(String key, Object value) { this.configuration.setProperty(key, value); } public void clearProperty(String key) { configuration.clearProperty(key); } public void clear() { configuration.clear(); } public Object getProperty(String key) { return configuration.getProperty(key); } public Object getProperty(String key, Object defaultValue) { Object tempValue = configuration.getProperty(key); if (tempValue == null) return defaultValue; return configuration.getProperty(key); } public Iterator getKeys(String string) { return configuration.getKeys(string); } public Iterator getKeys() { return configuration.getKeys(); } public Properties getProperties(String string) { return configuration.getProperties(string); } public boolean getBoolean(String key) { return configuration.getBoolean(key); } public boolean getBoolean(String key, boolean defaultValue) { return configuration.getBoolean(key, defaultValue); } public Boolean getBoolean(String key, Boolean defaultValue) { return configuration.getBoolean(key, defaultValue); } public byte getByte(String key) { return configuration.getByte(key); } public byte getByte(String key, byte defaultValue) { return configuration.getByte(key, defaultValue); } public Byte getByte(String key, Byte defaultValue) { return configuration.getByte(key, defaultValue); } public double getDouble(String key) { return configuration.getDouble(key); } public double getDouble(String key, double defaultValue) { return configuration.getDouble(key, defaultValue); } public Double getDouble(String key, Double defaultValue) { return configuration.getDouble(key, defaultValue); } public float getFloat(String key) { return configuration.getFloat(key); } public float getFloat(String key, float defaultValue) { return configuration.getFloat(key, defaultValue); } public Float getFloat(String key, Float defaultValue) { return configuration.getFloat(key, defaultValue); } public int getInt(String key) { return configuration.getInt(key); } public int getInt(String key, int defaultValue) { return configuration.getInt(key, defaultValue); } public Integer getInteger(String key, Integer defaultValue) { return configuration.getInteger(key, defaultValue); } public long getLong(String key) { return configuration.getLong(key); } public long getLong(String key, long defaultValue) { return configuration.getLong(key, defaultValue); } public Long getLong(String key, Long defaultValue) { return configuration.getLong(key, defaultValue); } public short getShort(String key) { return configuration.getShort(key); } public short getShort(String key, short defaultValue) { return configuration.getShort(key, defaultValue); } public Short getShort(String key, Short defaultValue) { return configuration.getShort(key, defaultValue); } public BigDecimal getBigDecimal(String key) { return configuration.getBigDecimal(key); } public BigDecimal getBigDecimal(String key, BigDecimal defaultValue) { return configuration.getBigDecimal(key, defaultValue); } public BigInteger getBigInteger(String key) { return configuration.getBigInteger(key); } public BigInteger getBigInteger(String key, BigInteger defaultValue) { return configuration.getBigInteger(key, defaultValue); } public String getString(String key) { String value = configuration.getString(key); if (value != null) { return value; } else { return null; } } public String getString(String key, String defaultValue) { String value = configuration.getString(key); if (value != null) { return evaluate(value); } else { return defaultValue; } } public String[] getStringArray(String string) { return configuration.getStringArray(string); } public List getList(String string) { return configuration.getList(string); } public List getList(String string, List list) { return configuration.getList(string, list); } /** * 处理属性引用方式的属性,本方法仅为了兼容Jute 按照Configuration规范,应该是不包括根标记,以及采用"."方式分割属性 * * @param value * String * @return String */ public String evaluate(String value) { int pos = value.indexOf("${\""); if (pos < 0) return value; int end = value.indexOf("\"}"); if (end < pos + 2) return value; String alias = value.substring(pos + 3, end).trim(); int sys_pos = alias.indexOf("/sys/"); if (sys_pos != -1) { alias = alias.substring(5); } alias = alias.replaceAll("/", "."); String alias_value = getString(alias, ""); if (alias_value == null) { return value; } else { value = value.substring(0, pos) + alias_value + value.substring(end + 2); return value; } } public Configuration getConfiguration() { return configuration; } public void setConfiguration(Configuration configuration) { this.configuration = configuration; } }