AbstractConfiguration.java
- /*
- * @copyright defined in LICENSE.txt
- */
- package hera.util.conf;
- import static hera.util.ValidationUtils.assertFalse;
- import static java.util.Collections.EMPTY_LIST;
- import static org.slf4j.LoggerFactory.getLogger;
- import hera.util.Configuration;
- import hera.util.ParsingUtils;
- import java.util.ArrayList;
- import java.util.List;
- import lombok.Getter;
- import org.slf4j.Logger;
- public abstract class AbstractConfiguration implements Configuration {
- protected final transient Logger logger = getLogger(getClass());
- @Getter
- protected final boolean readOnly;
- public AbstractConfiguration() {
- this(true);
- }
- public AbstractConfiguration(final boolean readOnly) {
- this.readOnly = readOnly;
- }
- protected String[] getFragments(final String qualifiedName) {
- final String[] splits = qualifiedName.split("\\.");
- for (final String split : splits) {
- if (split.isEmpty()) {
- assertFalse(true, "Value must not empty");
- }
- }
- return splits;
- }
- public Configuration getSubconfiguration(String key) {
- return null;
- }
- protected abstract Object getValue(String key);
- /**
- * get configuration value.
- */
- public Object get(final String key) {
- int dotIndex = key.indexOf('.');
- if (dotIndex < 0) {
- return getValue(key);
- } else {
- final String subconfigurationName = key.substring(0, dotIndex);
- final String remainder = key.substring(dotIndex + 1);
- final Configuration subConfiguration = getSubconfiguration(subconfigurationName);
- if (null != subConfiguration) {
- return subConfiguration.get(remainder);
- }
- return null;
- }
- }
- @Override
- public String getAsString(final String key, final String defaultValue) {
- Object value = get(key);
- if (null == value) {
- return defaultValue;
- }
- logger.trace("Value type: {}", value.getClass());
- if (value instanceof String) {
- return (String) value;
- } else if (value instanceof CharSequence) {
- return value.toString();
- } else {
- return value.toString();
- }
- }
- @Override
- public boolean getAsBoolean(final String key, final boolean defaultValue) {
- final String value = getAsString(key, null);
- return null != value ? ParsingUtils.convertToBoolean(value) : defaultValue;
- }
- @Override
- public int getAsInt(final String key, final int defaultValue) {
- final String value = getAsString(key, null);
- return null != value ? ParsingUtils.convertToInt(value) : defaultValue;
- }
- @Override
- public long getAsLong(final String key, final long defaultValue) {
- final String value = getAsString(key, null);
- return null != value ? ParsingUtils.convertToLong(value) : defaultValue;
- }
- @Override
- public double getAsDouble(final String key, final double defaultValue) {
- final String value = getAsString(key, null);
- return null != value ? ParsingUtils.convertToDouble(value) : defaultValue;
- }
- @Override
- public List<String> getAsList(final String key) {
- return parse(getAsString(key, null));
- }
- @SuppressWarnings("unchecked")
- protected List<String> parse(final String value) {
- if (null == value) {
- return EMPTY_LIST;
- }
- final List<String> list = new ArrayList<String>();
- final String[] splits = value.split("[,|\\r|\\n]");
- for (final String split : splits) {
- final String target = split.trim();
- if (null != target && !target.isEmpty()) {
- list.add(target);
- }
- }
- return list;
- }
- protected void checkReadOnly() {
- if (isReadOnly()) {
- throw new UnsupportedOperationException("Configuration is read-only");
- }
- }
- }