2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.config.api;
19 import java.util.Arrays;
20 import java.util.Collections;
21 import java.util.List;
24 public interface Configuration {
26 ThreadLocal<String> TENANT = new ThreadLocal<>();
29 * Sets tenant for current thread.
31 * @param id tenant id; may be <code>null</code> in which case a default will be used.
33 static void setTenantId(String id) {
35 if (id != null && id.trim().length() > 0) {
42 default String getAsString(String key) {
43 return getAsString(null, key);
46 default String getAsString(String namespace, String key) {
47 return getAsString(TENANT.get(), namespace, key);
50 default String getAsString(String tenantId, String namespace, String key) {
51 return get(tenantId, namespace, key, String.class);
54 <T> T get(String tenant, String namespace, String key, Class<T> clazz, Hint... hints);
56 default Byte getAsByteValue(String key) {
57 return getAsByteValue(null, key);
60 default Byte getAsByteValue(String namespace, String key) {
61 return getAsByteValue(TENANT.get(), namespace, key);
64 default Byte getAsByteValue(String tenantId, String namespace, String key) {
65 return get(tenantId, namespace, key, Byte.class);
68 default Short getAsShortValue(String key) {
69 return getAsShortValue(null, key);
72 default Short getAsShortValue(String namespace, String key) {
73 return getAsShortValue(TENANT.get(), namespace, key);
76 default Short getAsShortValue(String tenantId, String namespace, String key) {
77 return get(tenantId, namespace, key, Short.class);
80 default Integer getAsIntegerValue(String key) {
81 return getAsIntegerValue(null, key);
84 default Integer getAsIntegerValue(String namespace, String key) {
85 return getAsIntegerValue(TENANT.get(), namespace, key);
88 default Integer getAsIntegerValue(String tenantId, String namespace, String key) {
89 return get(tenantId, namespace, key, Integer.class);
92 default Long getAsLongValue(String key) {
93 return getAsLongValue(null, key);
96 default Long getAsLongValue(String namespace, String key) {
97 return getAsLongValue(TENANT.get(), namespace, key);
100 default Long getAsLongValue(String tenantId, String namespace, String key) {
101 return get(tenantId, namespace, key, Long.class);
104 default Float getAsFloatValue(String key) {
105 return getAsFloatValue(null, key);
108 default Float getAsFloatValue(String namespace, String key) {
109 return getAsFloatValue(TENANT.get(), namespace, key);
112 default Float getAsFloatValue(String tenantId, String namespace, String key) {
113 return get(tenantId, namespace, key, Float.class);
116 default Double getAsDoubleValue(String key) {
117 return getAsDoubleValue(null, key);
120 default Double getAsDoubleValue(String namespace, String key) {
121 return getAsDoubleValue(TENANT.get(), namespace, key);
124 default Double getAsDoubleValue(String tenantId, String namespace, String key) {
125 return get(tenantId, namespace, key, Double.class);
128 default Boolean getAsBooleanValue(String key) {
129 return getAsBooleanValue(null, key);
132 default Boolean getAsBooleanValue(String namespace, String key) {
133 return getAsBooleanValue(TENANT.get(), namespace, key);
136 default Boolean getAsBooleanValue(String tenantId, String namespace, String key) {
137 return get(tenantId, namespace, key, Boolean.class);
140 default Character getAsCharValue(String key) {
141 return getAsCharValue(null, key);
144 default Character getAsCharValue(String namespace, String key) {
145 return getAsCharValue(TENANT.get(), namespace, key);
148 default Character getAsCharValue(String tenantId, String namespace, String key) {
149 return get(tenantId, namespace, key, Character.class);
152 default <T> T populateConfiguration(Class<T> clazz) {
153 return populateConfiguration(null, clazz);
156 default <T> T populateConfiguration(String namespace, Class<T> clazz) {
157 return populateConfiguration(TENANT.get(), namespace, clazz);
160 default <T> T populateConfiguration(String tenantId, String namespace, Class<T> clazz) {
161 return get(tenantId, namespace, null, clazz, Hint.EXTERNAL_LOOKUP);
164 default <T> DynamicConfiguration<T> getDynamicConfiguration(String key, Class<T> clazz, T defaultValue) {
165 return getDynamicConfiguration(null, key, clazz, defaultValue);
168 default <T> DynamicConfiguration<T> getDynamicConfiguration(String namespace, String key, Class<T> clazz,
170 return getDynamicConfiguration(TENANT.get(), namespace, key, clazz, defaultValue);
173 default <T> DynamicConfiguration<T> getDynamicConfiguration(String tenant, String namespace, String key,
174 Class<T> clazz, T defaultValue) {
175 return DynamicConfiguration.getDynamicConfiguration(tenant, namespace, key, clazz, defaultValue, this);
178 default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String key, Class<T> clazz,
180 return getDynamicConfigurationValues(null, key, clazz, defaultValue);
183 default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String namespace, String key,
184 Class<T> clazz, T defaultValue) {
185 return getDynamicConfigurationValues(TENANT.get(), namespace, key, clazz, defaultValue);
188 default <T> DynamicConfiguration<List<T>> getDynamicConfigurationValues(String tenant, String namespace, String key,
189 Class<T> clazz, T defaultValue) {
190 return DynamicConfiguration.getDynConfiguration(tenant, namespace, key, clazz, defaultValue, this);
193 default List<String> getAsStringValues(String key) {
194 return getAsStringValues(null, key);
197 default List<String> getAsStringValues(String namespace, String key) {
198 return getAsStringValues(TENANT.get(), namespace, key);
201 default List<String> getAsStringValues(String tenantId, String namespace, String key) {
202 String[] tempArray = get(tenantId, namespace, key, String[].class);
203 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
206 default List<Byte> getAsByteValues(String key) {
207 return getAsByteValues(null, key);
210 default List<Byte> getAsByteValues(String namespace, String key) {
211 return getAsByteValues(TENANT.get(), namespace, key);
214 default List<Byte> getAsByteValues(String tenantId, String namespace, String key) {
215 Byte[] tempArray = get(tenantId, namespace, key, Byte[].class);
216 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
219 default List<Short> getAsShortValues(String key) {
220 return getAsShortValues(null, key);
223 default List<Short> getAsShortValues(String namespace, String key) {
224 return getAsShortValues(TENANT.get(), namespace, key);
227 default List<Short> getAsShortValues(String tenantId, String namespace, String key) {
228 Short[] tempArray = get(tenantId, namespace, key, Short[].class);
229 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
232 default List<Integer> getAsIntegerValues(String key) {
233 return getAsIntegerValues(null, key);
236 default List<Integer> getAsIntegerValues(String namespace, String key) {
237 return getAsIntegerValues(TENANT.get(), namespace, key);
240 default List<Integer> getAsIntegerValues(String tenantId, String namespace, String key) {
241 Integer[] tempArray = get(tenantId, namespace, key, Integer[].class);
242 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
245 default List<Double> getAsDoubleValues(String key) {
246 return getAsDoubleValues(null, key);
249 default List<Double> getAsDoubleValues(String namespace, String key) {
250 return getAsDoubleValues(TENANT.get(), namespace, key);
253 default List<Double> getAsDoubleValues(String tenantId, String namespace, String key) {
254 Double[] tempArray = get(tenantId, namespace, key, Double[].class);
255 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
258 default List<Float> getAsFloatValues(String key) {
259 return getAsFloatValues(null, key);
262 default List<Float> getAsFloatValues(String namespace, String key) {
263 return getAsFloatValues(TENANT.get(), namespace, key);
266 default List<Float> getAsFloatValues(String tenantId, String namespace, String key) {
267 Float[] tempArray = get(tenantId, namespace, key, Float[].class);
268 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
271 default List<Boolean> getAsBooleanValues(String key) {
272 return getAsBooleanValues(null, key);
275 default List<Boolean> getAsBooleanValues(String namespace, String key) {
276 return getAsBooleanValues(TENANT.get(), namespace, key);
279 default List<Boolean> getAsBooleanValues(String tenantId, String namespace, String key) {
280 Boolean[] tempArray = get(tenantId, namespace, key, Boolean[].class);
281 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
284 default List<Character> getAsCharacterValues(String key) {
285 return getAsCharacterValues(null, key);
288 default List<Character> getAsCharacterValues(String namespace, String key) {
289 return getAsCharacterValues(TENANT.get(), namespace, key);
292 default List<Character> getAsCharacterValues(String tenantId, String namespace, String key) {
293 Character[] tempArray = get(tenantId, namespace, key, Character[].class);
294 return tempArray == null ? Collections.emptyList() : Arrays.asList(tempArray);
297 default void addConfigurationChangeListener(String key, ConfigurationChangeListener myself) {
298 addConfigurationChangeListener(null, key, myself);
301 default void addConfigurationChangeListener(String namespace, String key, ConfigurationChangeListener myself) {
302 addConfigurationChangeListener(TENANT.get(), namespace, key, myself);
305 void addConfigurationChangeListener(String tenant, String namespace, String key,
306 ConfigurationChangeListener myself);
308 default void removeConfigurationChangeListener(String key, ConfigurationChangeListener myself) {
309 removeConfigurationChangeListener(null, key, myself);
312 default void removeConfigurationChangeListener(String namespace, String key, ConfigurationChangeListener myself) {
313 removeConfigurationChangeListener(TENANT.get(), namespace, key, myself);
316 void removeConfigurationChangeListener(String tenant, String namespace, String key,
317 ConfigurationChangeListener myself);
319 default <T> Map<String, T> populateMap(String key, Class<T> clazz) {
320 return populateMap(null, key, clazz);
323 default <T> Map<String, T> populateMap(String namespace, String key, Class<T> clazz) {
324 return populateMap(TENANT.get(), namespace, key, clazz);
327 <T> Map<String, T> populateMap(String tenantId, String namespace, String key, Class<T> clazz);
329 default Map generateMap(String key) {
330 return generateMap(null, key);
333 default Map generateMap(String namespace, String key) {
334 return generateMap(TENANT.get(), namespace, key);
337 Map generateMap(String tenantId, String namespace, String key);