Code formatting of configuration framework
[sdc.git] / common / onap-common-configuration-management / onap-configuration-management-api / src / main / java / org / onap / config / api / Configuration.java
index 58eedd7..3232d49 100644 (file)
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * 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.onap.config.api;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
-/**
- * The interface Configuration.
- */
 public interface Configuration {
-  /**
-   * The constant tenant.
-   */
-  public static ThreadLocal<String> tenant = new ThreadLocal<>();
-
-  /**
-   * Sets tenant id.
-   *
-   * @param id the id
-   */
-  public static void setTenantId(String id) {
-    if (id != null && id.trim().length() > 0) {
-      tenant.set(id);
-    }
-  }
-
-  /**
-   * Gets as string.
-   *
-   * @param key the key
-   * @return the as string
-   */
-  public default String getAsString(String key) {
-    return getAsString(null, key);
-  }
-
-  /**
-   * Gets as string.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as string
-   */
-  public default String getAsString(String namespace, String key) {
-    return getAsString(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as string.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as string
-   */
-  public default String getAsString(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, String.class);
-  }
-
-  /**
-   * Gets as byte value.
-   *
-   * @param key the key
-   * @return the as byte value
-   */
-  public default Byte getAsByteValue(String key) {
-    return getAsByteValue(null, key);
-  }
-
-  /**
-   * Gets as byte value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as byte value
-   */
-  public default Byte getAsByteValue(String namespace, String key) {
-    return getAsByteValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as byte value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as byte value
-   */
-  public default Byte getAsByteValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Byte.class);
-  }
-
-  /**
-   * Gets as short value.
-   *
-   * @param key the key
-   * @return the as short value
-   */
-  public default Short getAsShortValue(String key) {
-    return getAsShortValue(null, key);
-  }
-
-  /**
-   * Gets as short value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as short value
-   */
-  public default Short getAsShortValue(String namespace, String key) {
-    return getAsShortValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as short value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as short value
-   */
-  public default Short getAsShortValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Short.class);
-  }
-
-  /**
-   * Gets as integer value.
-   *
-   * @param key the key
-   * @return the as integer value
-   */
-  public default Integer getAsIntegerValue(String key) {
-    return getAsIntegerValue(null, key);
-  }
-
-  /**
-   * Gets as integer value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as integer value
-   */
-  public default Integer getAsIntegerValue(String namespace, String key) {
-    return getAsIntegerValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as integer value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as integer value
-   */
-  public default Integer getAsIntegerValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Integer.class);
-  }
-
-  /**
-   * Gets as long value.
-   *
-   * @param key the key
-   * @return the as long value
-   */
-  public default Long getAsLongValue(String key) {
-    return getAsLongValue(null, key);
-  }
-
-  /**
-   * Gets as long value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as long value
-   */
-  public default Long getAsLongValue(String namespace, String key) {
-    return getAsLongValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as long value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as long value
-   */
-  public default Long getAsLongValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Long.class);
-  }
-
-  /**
-   * Gets as float value.
-   *
-   * @param key the key
-   * @return the as float value
-   */
-  public default Float getAsFloatValue(String key) {
-    return getAsFloatValue(null, key);
-  }
-
-  /**
-   * Gets as float value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as float value
-   */
-  public default Float getAsFloatValue(String namespace, String key) {
-    return getAsFloatValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as float value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as float value
-   */
-  public default Float getAsFloatValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Float.class);
-  }
-
-  /**
-   * Gets as double value.
-   *
-   * @param key the key
-   * @return the as double value
-   */
-  public default Double getAsDoubleValue(String key) {
-    return getAsDoubleValue(null, key);
-  }
-
-  /**
-   * Gets as double value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as double value
-   */
-  public default Double getAsDoubleValue(String namespace, String key) {
-    return getAsDoubleValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as double value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as double value
-   */
-  public default Double getAsDoubleValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Double.class);
-  }
-
-  /**
-   * Gets as boolean value.
-   *
-   * @param key the key
-   * @return the as boolean value
-   */
-  public default Boolean getAsBooleanValue(String key) {
-    return getAsBooleanValue(null, key);
-  }
-
-  /**
-   * Gets as boolean value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as boolean value
-   */
-  public default Boolean getAsBooleanValue(String namespace, String key) {
-    return getAsBooleanValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as boolean value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as boolean value
-   */
-  public default Boolean getAsBooleanValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Boolean.class);
-  }
-
-  /**
-   * Gets as char value.
-   *
-   * @param key the key
-   * @return the as char value
-   */
-  public default Character getAsCharValue(String key) {
-    return getAsCharValue(null, key);
-  }
-
-  /**
-   * Gets as char value.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as char value
-   */
-  public default Character getAsCharValue(String namespace, String key) {
-    return getAsCharValue(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as char value.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as char value
-   */
-  public default Character getAsCharValue(String tenantId, String namespace, String key) {
-    return get(tenantId, namespace, key, Character.class);
-  }
-
-  /**
-   * Populate configuration t.
-   *
-   * @param <T>   the type parameter
-   * @param clazz the clazz
-   * @return the t
-   */
-  public default <T> T populateConfiguration(Class<T> clazz) {
-    return populateConfiguration(null, clazz);
-  }
-
-  /**
-   * Populate configuration t.
-   *
-   * @param <T>       the type parameter
-   * @param namespace the namespace
-   * @param clazz     the clazz
-   * @return the t
-   */
-  public default <T> T populateConfiguration(String namespace, Class<T> clazz) {
-    return populateConfiguration(tenant.get(), namespace, clazz);
-  }
-
-  /**
-   * Populate configuration t.
-   *
-   * @param <T>       the type parameter
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param clazz     the clazz
-   * @return the t
-   */
-  public default <T> T populateConfiguration(String tenantId, String namespace, Class<T> clazz) {
-    return get(tenantId, namespace, null, clazz, Hint.EXTERNAL_LOOKUP);
-  }
-
-  /**
-   * Gets dynamic configuration.
-   *
-   * @param <T>          the type parameter
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration
-   */
-  public default <T> DynamicConfiguration<T> getDynamicConfiguration(String key, Class<T> clazz,
-                                                                     T defaultValue) {
-    return getDynamicConfiguration(null, key, clazz, defaultValue);
-  }
-
-  /**
-   * Gets dynamic configuration.
-   *
-   * @param <T>          the type parameter
-   * @param namespace    the namespace
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration
-   */
-  public default <T> DynamicConfiguration<T> getDynamicConfiguration(String namespace, String key,
-                                                                     Class<T> clazz,
-                                                                     T defaultValue) {
-    return getDynamicConfiguration(tenant.get(), namespace, key, clazz, defaultValue);
-  }
-
-  /**
-   * Gets dynamic configuration.
-   *
-   * @param <T>          the type parameter
-   * @param tenant       the tenant
-   * @param namespace    the namespace
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration
-   */
-  public default <T> DynamicConfiguration<T> getDynamicConfiguration(String tenant,
-                                                                     String namespace, String key,
-                                                                     Class<T> clazz,
-                                                                     T defaultValue) {
-    return DynamicConfiguration
-        .getDynamicConfiguration(tenant, namespace, key, clazz, defaultValue, this);
-  }
-
-  /**
-   * Gets dynamic configuration values.
-   *
-   * @param <T>          the type parameter
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration values
-   */
-  public default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String key,
-                                                                                 Class<T> clazz,
-                                                                                 T defaultValue) {
-    return getDynamicConfigurationValues(null, key, clazz, defaultValue);
-  }
-
-  /**
-   * Gets dynamic configuration values.
-   *
-   * @param <T>          the type parameter
-   * @param namespace    the namespace
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration values
-   */
-  public default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String namespace,
-                                                                                 String key,
-                                                                                 Class<T> clazz,
-                                                                                 T defaultValue) {
-    return getDynamicConfigurationValues(tenant.get(), namespace, key, clazz, defaultValue);
-  }
-
-  /**
-   * Gets dynamic configuration values.
-   *
-   * @param <T>          the type parameter
-   * @param tenant       the tenant
-   * @param namespace    the namespace
-   * @param key          the key
-   * @param clazz        the clazz
-   * @param defaultValue the default value
-   * @return the dynamic configuration values
-   */
-  public default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String tenant,
-                                                                                 String namespace,
-                                                                                 String key,
-                                                                                 Class<T> clazz,
-                                                                                 T defaultValue) {
-    return DynamicConfiguration
-        .getDynConfiguration(tenant, namespace, key, clazz, defaultValue, this);
-  }
-
-  /**
-   * Gets as string values.
-   *
-   * @param key the key
-   * @return the as string values
-   */
-  public default List<String> getAsStringValues(String key) {
-    return getAsStringValues(null, key);
-  }
-
-  /**
-   * Gets as string values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as string values
-   */
-  public default List<String> getAsStringValues(String namespace, String key) {
-    return getAsStringValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as string values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as string values
-   */
-  public default List<String> getAsStringValues(String tenantId, String namespace, String key) {
-    String[] tempArray = get(tenantId, namespace, key, String[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as byte values.
-   *
-   * @param key the key
-   * @return the as byte values
-   */
-  public default List<Byte> getAsByteValues(String key) {
-    return getAsByteValues(null, key);
-  }
-
-  /**
-   * Gets as byte values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as byte values
-   */
-  public default List<Byte> getAsByteValues(String namespace, String key) {
-    return getAsByteValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as byte values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as byte values
-   */
-  public default List<Byte> getAsByteValues(String tenantId, String namespace, String key) {
-    Byte[] tempArray = get(tenantId, namespace, key, Byte[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as short values.
-   *
-   * @param key the key
-   * @return the as short values
-   */
-  public default List<Short> getAsShortValues(String key) {
-    return getAsShortValues(null, key);
-  }
-
-  /**
-   * Gets as short values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as short values
-   */
-  public default List<Short> getAsShortValues(String namespace, String key) {
-    return getAsShortValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as short values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as short values
-   */
-  public default List<Short> getAsShortValues(String tenantId, String namespace, String key) {
-    Short[] tempArray = get(tenantId, namespace, key, Short[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as integer values.
-   *
-   * @param key the key
-   * @return the as integer values
-   */
-  public default List<Integer> getAsIntegerValues(String key) {
-    return getAsIntegerValues(null, key);
-  }
-
-  /**
-   * Gets as integer values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as integer values
-   */
-  public default List<Integer> getAsIntegerValues(String namespace, String key) {
-    return getAsIntegerValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as integer values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as integer values
-   */
-  public default List<Integer> getAsIntegerValues(String tenantId, String namespace, String key) {
-    Integer[] tempArray = get(tenantId, namespace, key, Integer[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as double values.
-   *
-   * @param key the key
-   * @return the as double values
-   */
-  public default List<Double> getAsDoubleValues(String key) {
-    return getAsDoubleValues(null, key);
-  }
-
-  /**
-   * Gets as double values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as double values
-   */
-  public default List<Double> getAsDoubleValues(String namespace, String key) {
-    return getAsDoubleValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as double values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as double values
-   */
-  public default List<Double> getAsDoubleValues(String tenantId, String namespace, String key) {
-    Double[] tempArray = get(tenantId, namespace, key, Double[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as float values.
-   *
-   * @param key the key
-   * @return the as float values
-   */
-  public default List<Float> getAsFloatValues(String key) {
-    return getAsFloatValues(null, key);
-  }
-
-  /**
-   * Gets as float values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as float values
-   */
-  public default List<Float> getAsFloatValues(String namespace, String key) {
-    return getAsFloatValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as float values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as float values
-   */
-  public default List<Float> getAsFloatValues(String tenantId, String namespace, String key) {
-    Float[] tempArray = get(tenantId, namespace, key, Float[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as boolean values.
-   *
-   * @param key the key
-   * @return the as boolean values
-   */
-  public default List<Boolean> getAsBooleanValues(String key) {
-    return getAsBooleanValues(null, key);
-  }
-
-  /**
-   * Gets as boolean values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as boolean values
-   */
-  public default List<Boolean> getAsBooleanValues(String namespace, String key) {
-    return getAsBooleanValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as boolean values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as boolean values
-   */
-  public default List<Boolean> getAsBooleanValues(String tenantId, String namespace, String key) {
-    Boolean[] tempArray = get(tenantId, namespace, key, Boolean[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Gets as character values.
-   *
-   * @param key the key
-   * @return the as character values
-   */
-  public default List<Character> getAsCharacterValues(String key) {
-    return getAsCharacterValues(null, key);
-  }
-
-  /**
-   * Gets as character values.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as character values
-   */
-  public default List<Character> getAsCharacterValues(String namespace, String key) {
-    return getAsCharacterValues(tenant.get(), namespace, key);
-  }
-
-  /**
-   * Gets as character values.
-   *
-   * @param tenantId  the tenant id
-   * @param namespace the namespace
-   * @param key       the key
-   * @return the as character values
-   */
-  public default List<Character> getAsCharacterValues(String tenantId, String namespace,
-                                                      String key) {
-    Character[] tempArray = get(tenantId, namespace, key, Character[].class);
-    return tempArray == null ? Arrays.asList() : Arrays.asList(tempArray);
-  }
-
-  /**
-   * Get t.
-   *
-   * @param <T>       the type parameter
-   * @param tenant    the tenant
-   * @param namespace the namespace
-   * @param key       the key
-   * @param clazz     the clazz
-   * @param hints     the hints
-   * @return the t
-   */
-  public <T> T get(String tenant, String namespace, String key, Class<T> clazz, Hint... hints);
-
-  /**
-   * Add configuration change listener.
-   *
-   * @param key    the key
-   * @param myself the myself
-   */
-  public default void addConfigurationChangeListener(String key,
-                                                     ConfigurationChangeListener myself) {
-    addConfigurationChangeListener(null, key, myself);
-  }
-
-  /**
-   * Add configuration change listener.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @param myself    the myself
-   */
-  public default void addConfigurationChangeListener(String namespace, String key,
-                                                     ConfigurationChangeListener myself) {
-    addConfigurationChangeListener(tenant.get(), namespace, key, myself);
-  }
-
-  /**
-   * Add configuration change listener.
-   *
-   * @param tenant    the tenant
-   * @param namespace the namespace
-   * @param key       the key
-   * @param myself    the myself
-   */
-  public void addConfigurationChangeListener(String tenant, String namespace, String key,
-                                             ConfigurationChangeListener myself);
-
-  /**
-   * Remove configuration change listener.
-   *
-   * @param key    the key
-   * @param myself the myself
-   */
-  public default void removeConfigurationChangeListener(String key,
-                                                        ConfigurationChangeListener myself) {
-    removeConfigurationChangeListener(null, key, myself);
-  }
-
-  /**
-   * Remove configuration change listener.
-   *
-   * @param namespace the namespace
-   * @param key       the key
-   * @param myself    the myself
-   */
-  public default void removeConfigurationChangeListener(String namespace, String key,
-                                                        ConfigurationChangeListener myself) {
-    removeConfigurationChangeListener(tenant.get(), namespace, key, myself);
-  }
-
-  /**
-   * Remove configuration change listener.
-   *
-   * @param tenant    the tenant
-   * @param namespace the namespace
-   * @param key       the key
-   * @param myself    the myself
-   */
-  public void removeConfigurationChangeListener(String tenant, String namespace, String key,
-                                                ConfigurationChangeListener myself);
-
-  public default <T> Map<String, T> populateMap(String key, Class<T> clazz){
-    return populateMap(null, key, clazz);
-  }
-  public default <T> Map<String, T> populateMap(String namespace, String key, Class<T> clazz){
-    return populateMap(tenant.get(), namespace, key, clazz);
-  }
-  public <T> Map<String, T> populateMap(String tenantId, String namespace, String key, Class<T> clazz);
-
-  public default Map generateMap(String key){
-    return generateMap(null, key);
-  }
-  public default Map generateMap(String namespace, String key){
-    return generateMap(tenant.get(), namespace, key);
-  }
-  public Map generateMap(String tenantId, String namespace, String key);
 
+    ThreadLocal<String> TENANT = new ThreadLocal<>();
+
+    /**
+     * Sets tenant for current thread.
+     *
+     * @param id tenant id; may be <code>null</code> in which case a default will be used.
+     */
+    static void setTenantId(String id) {
+
+        if (id != null && id.trim().length() > 0) {
+            TENANT.set(id);
+        } else {
+            TENANT.remove();
+        }
+    }
+
+    default String getAsString(String key) {
+        return getAsString(null, key);
+    }
+
+    default String getAsString(String namespace, String key) {
+        return getAsString(TENANT.get(), namespace, key);
+    }
+
+    default String getAsString(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, String.class);
+    }
+
+    <T> T get(String tenant, String namespace, String key, Class<T> clazz, Hint... hints);
+
+    default Byte getAsByteValue(String key) {
+        return getAsByteValue(null, key);
+    }
+
+    default Byte getAsByteValue(String namespace, String key) {
+        return getAsByteValue(TENANT.get(), namespace, key);
+    }
+
+    default Byte getAsByteValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Byte.class);
+    }
+
+    default Short getAsShortValue(String key) {
+        return getAsShortValue(null, key);
+    }
+
+    default Short getAsShortValue(String namespace, String key) {
+        return getAsShortValue(TENANT.get(), namespace, key);
+    }
+
+    default Short getAsShortValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Short.class);
+    }
+
+    default Integer getAsIntegerValue(String key) {
+        return getAsIntegerValue(null, key);
+    }
+
+    default Integer getAsIntegerValue(String namespace, String key) {
+        return getAsIntegerValue(TENANT.get(), namespace, key);
+    }
+
+    default Integer getAsIntegerValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Integer.class);
+    }
+
+    default Long getAsLongValue(String key) {
+        return getAsLongValue(null, key);
+    }
+
+    default Long getAsLongValue(String namespace, String key) {
+        return getAsLongValue(TENANT.get(), namespace, key);
+    }
+
+    default Long getAsLongValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Long.class);
+    }
+
+    default Float getAsFloatValue(String key) {
+        return getAsFloatValue(null, key);
+    }
+
+    default Float getAsFloatValue(String namespace, String key) {
+        return getAsFloatValue(TENANT.get(), namespace, key);
+    }
+
+    default Float getAsFloatValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Float.class);
+    }
+
+    default Double getAsDoubleValue(String key) {
+        return getAsDoubleValue(null, key);
+    }
+
+    default Double getAsDoubleValue(String namespace, String key) {
+        return getAsDoubleValue(TENANT.get(), namespace, key);
+    }
+
+    default Double getAsDoubleValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Double.class);
+    }
+
+    default Boolean getAsBooleanValue(String key) {
+        return getAsBooleanValue(null, key);
+    }
+
+    default Boolean getAsBooleanValue(String namespace, String key) {
+        return getAsBooleanValue(TENANT.get(), namespace, key);
+    }
+
+    default Boolean getAsBooleanValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Boolean.class);
+    }
+
+    default Character getAsCharValue(String key) {
+        return getAsCharValue(null, key);
+    }
+
+    default Character getAsCharValue(String namespace, String key) {
+        return getAsCharValue(TENANT.get(), namespace, key);
+    }
+
+    default Character getAsCharValue(String tenantId, String namespace, String key) {
+        return get(tenantId, namespace, key, Character.class);
+    }
+
+    default <T> T populateConfiguration(Class<T> clazz) {
+        return populateConfiguration(null, clazz);
+    }
+
+    default <T> T populateConfiguration(String namespace, Class<T> clazz) {
+        return populateConfiguration(TENANT.get(), namespace, clazz);
+    }
+
+    default <T> T populateConfiguration(String tenantId, String namespace, Class<T> clazz) {
+        return get(tenantId, namespace, null, clazz, Hint.EXTERNAL_LOOKUP);
+    }
+
+    default <T> DynamicConfiguration<T> getDynamicConfiguration(String key, Class<T> clazz, T defaultValue) {
+        return getDynamicConfiguration(null, key, clazz, defaultValue);
+    }
+
+    default <T> DynamicConfiguration<T> getDynamicConfiguration(String namespace, String key, Class<T> clazz,
+            T defaultValue) {
+        return getDynamicConfiguration(TENANT.get(), namespace, key, clazz, defaultValue);
+    }
+
+    default <T> DynamicConfiguration<T> getDynamicConfiguration(String tenant, String namespace, String key,
+            Class<T> clazz, T defaultValue) {
+        return DynamicConfiguration.getDynamicConfiguration(tenant, namespace, key, clazz, defaultValue, this);
+    }
+
+    default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String key, Class<T> clazz,
+            T defaultValue) {
+        return getDynamicConfigurationValues(null, key, clazz, defaultValue);
+    }
+
+    default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String namespace, String key,
+            Class<T> clazz, T defaultValue) {
+        return getDynamicConfigurationValues(TENANT.get(), namespace, key, clazz, defaultValue);
+    }
+
+    default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String tenant, String namespace, String key,
+            Class<T> clazz, T defaultValue) {
+        return DynamicConfiguration.getDynConfiguration(tenant, namespace, key, clazz, defaultValue, this);
+    }
+
+    default List<String> getAsStringValues(String key) {
+        return getAsStringValues(null, key);
+    }
+
+    default List<String> getAsStringValues(String namespace, String key) {
+        return getAsStringValues(TENANT.get(), namespace, key);
+    }
+
+    default List<String> getAsStringValues(String tenantId, String namespace, String key) {
+        String[] tempArray = get(tenantId, namespace, key, String[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Byte> getAsByteValues(String key) {
+        return getAsByteValues(null, key);
+    }
+
+    default List<Byte> getAsByteValues(String namespace, String key) {
+        return getAsByteValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Byte> getAsByteValues(String tenantId, String namespace, String key) {
+        Byte[] tempArray = get(tenantId, namespace, key, Byte[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Short> getAsShortValues(String key) {
+        return getAsShortValues(null, key);
+    }
+
+    default List<Short> getAsShortValues(String namespace, String key) {
+        return getAsShortValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Short> getAsShortValues(String tenantId, String namespace, String key) {
+        Short[] tempArray = get(tenantId, namespace, key, Short[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Integer> getAsIntegerValues(String key) {
+        return getAsIntegerValues(null, key);
+    }
+
+    default List<Integer> getAsIntegerValues(String namespace, String key) {
+        return getAsIntegerValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Integer> getAsIntegerValues(String tenantId, String namespace, String key) {
+        Integer[] tempArray = get(tenantId, namespace, key, Integer[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Double> getAsDoubleValues(String key) {
+        return getAsDoubleValues(null, key);
+    }
+
+    default List<Double> getAsDoubleValues(String namespace, String key) {
+        return getAsDoubleValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Double> getAsDoubleValues(String tenantId, String namespace, String key) {
+        Double[] tempArray = get(tenantId, namespace, key, Double[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Float> getAsFloatValues(String key) {
+        return getAsFloatValues(null, key);
+    }
+
+    default List<Float> getAsFloatValues(String namespace, String key) {
+        return getAsFloatValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Float> getAsFloatValues(String tenantId, String namespace, String key) {
+        Float[] tempArray = get(tenantId, namespace, key, Float[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Boolean> getAsBooleanValues(String key) {
+        return getAsBooleanValues(null, key);
+    }
+
+    default List<Boolean> getAsBooleanValues(String namespace, String key) {
+        return getAsBooleanValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Boolean> getAsBooleanValues(String tenantId, String namespace, String key) {
+        Boolean[] tempArray = get(tenantId, namespace, key, Boolean[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default List<Character> getAsCharacterValues(String key) {
+        return getAsCharacterValues(null, key);
+    }
+
+    default List<Character> getAsCharacterValues(String namespace, String key) {
+        return getAsCharacterValues(TENANT.get(), namespace, key);
+    }
+
+    default List<Character> getAsCharacterValues(String tenantId, String namespace, String key) {
+        Character[] tempArray = get(tenantId, namespace, key, Character[].class);
+        return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
+    }
+
+    default void addConfigurationChangeListener(String key, ConfigurationChangeListener myself) {
+        addConfigurationChangeListener(null, key, myself);
+    }
+
+    default void addConfigurationChangeListener(String namespace, String key, ConfigurationChangeListener myself) {
+        addConfigurationChangeListener(TENANT.get(), namespace, key, myself);
+    }
+
+    void addConfigurationChangeListener(String tenant, String namespace, String key,
+            ConfigurationChangeListener myself);
+
+    default void removeConfigurationChangeListener(String key, ConfigurationChangeListener myself) {
+        removeConfigurationChangeListener(null, key, myself);
+    }
+
+    default void removeConfigurationChangeListener(String namespace, String key, ConfigurationChangeListener myself) {
+        removeConfigurationChangeListener(TENANT.get(), namespace, key, myself);
+    }
+
+    void removeConfigurationChangeListener(String tenant, String namespace, String key,
+            ConfigurationChangeListener myself);
+
+    default <T> Map<String, T> populateMap(String key, Class<T> clazz) {
+        return populateMap(null, key, clazz);
+    }
+
+    default <T> Map<String, T> populateMap(String namespace, String key, Class<T> clazz) {
+        return populateMap(TENANT.get(), namespace, key, clazz);
+    }
+
+    <T> Map<String, T> populateMap(String tenantId, String namespace, String key, Class<T> clazz);
+
+    default Map generateMap(String key) {
+        return generateMap(null, key);
+    }
+
+    default Map generateMap(String namespace, String key) {
+        return generateMap(TENANT.get(), namespace, key);
+    }
+
+    Map generateMap(String tenantId, String namespace, String key);
 }