/**
* Copyright 2014 The CmRaft Project
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 com.chicm.cmraft.common;
import java.util.Iterator;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CmRaftConfiguration implements Configuration {
static final Log LOG = LogFactory.getLog(CmRaftConfiguration.class);
private PropertiesConfiguration conf;
public CmRaftConfiguration() throws ConfigurationException {
conf = new PropertiesConfiguration("cmraft.properties");
}
public static Configuration create() {
try {
CmRaftConfiguration raftConfig = new CmRaftConfiguration();
return raftConfig;
} catch(ConfigurationException e) {
return null;
}
}
@Override
public void useResource(String resourceName) {
try {
conf = new PropertiesConfiguration(resourceName);
} catch(ConfigurationException e) {
LOG.error("load resource exception", e);
}
}
@Override
public Object clone() {
Configuration obj = CmRaftConfiguration.create();
obj.clear();
for(String key: this.getKeys()) {
obj.set(key, this.getString(key));
}
return (Object)obj;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for(String key: this.getKeys()) {
sb.append(key + ":" + conf.getString(key)+"\n");
}
return sb.toString();
}
@Override
public String getString(String key) {
return conf.getString(key);
}
@Override
public String getString(String key, String defaultValue) {
return conf.getString(key, defaultValue);
}
@Override
public int getInt(String key) {
return conf.getInt(key);
}
@Override
public int getInt(String key, int defaultValue) {
return conf.getInt(key, defaultValue);
}
@Override
public Iterable<String> getKeys() {
return this.new ConfigurationIterableImpl();
}
@Override
public Iterable<String> getKeys(String prefix) {
return this.new ConfigurationIterableImplForPrefix(prefix);
}
@Override
public void set(String key, String value) {
conf.setProperty(key, value);
}
@Override
public void clear() {
conf.clear();
}
@Override
public void remove(String key) {
conf.clearProperty(key);
}
private class ConfigurationIterableImpl implements Iterable<String> {
public Iterator<String> iterator() {
return conf.getKeys();
}
}
private class ConfigurationIterableImplForPrefix implements Iterable<String> {
private String prefix ;
ConfigurationIterableImplForPrefix(String prefix) {
this.prefix = prefix;
}
public Iterator<String> iterator() {
return conf.getKeys(prefix);
}
}
}