package com.netflix.discovery.internal.util; import com.netflix.archaius.api.Config; import java.util.Iterator; /** * An internal only module to help with config loading with prefixes, due to the fact Archaius2 config's * getPrefixedView() has odd behaviour when config substitution gets involved. * * @author David Liu */ public final class InternalPrefixedConfig { private final Config config; private final String namespace; public InternalPrefixedConfig(Config config, String... namespaces) { this.config = config; String tempNamespace = ""; for (String namespace : namespaces) { if (namespace != null && !namespace.isEmpty()) { tempNamespace += namespace.endsWith(".") ? namespace : namespace + "."; } } this.namespace = tempNamespace; } public String getNamespace() { return namespace; } public String getString(String key, String defaultValue) { return config.getString(namespace + key, defaultValue); } public Integer getInteger(String key, Integer defaultValue) { return config.getInteger(namespace + key, defaultValue); } public Long getLong(String key, Long defaultValue) { return config.getLong(namespace + key, defaultValue); } public Double getDouble(String key, Double defaultValue) { return config.getDouble(namespace + key, defaultValue); } public Boolean getBoolean(String key, Boolean defaultValue) { return config.getBoolean(namespace + key, defaultValue); } public Iterator<String> getKeys() { final String prefixRegex = "^" + namespace; final Iterator<String> internalIterator = config.getKeys(namespace); return new Iterator<String>() { @Override public boolean hasNext() { return internalIterator.hasNext(); } @Override public String next() { String value = internalIterator.next(); return value.replaceFirst(prefixRegex, ""); } }; } }