summaryrefslogtreecommitdiffstats
path: root/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java')
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java211
1 files changed, 68 insertions, 143 deletions
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java
index c13a3a458a..71dd457e6f 100644
--- a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java
+++ b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java
@@ -16,33 +16,16 @@
* Modifications Copyright (c) 2019 Samsung
*
*/
-
package org.onap.config;
+import static java.util.Optional.ofNullable;
+import static org.onap.config.api.Hint.EXTERNAL_LOOKUP;
+import static org.onap.config.api.Hint.LATEST_LOOKUP;
+import static org.onap.config.api.Hint.NODE_SPECIFIC;
+
import com.virtlink.commons.configuration2.jackson.JsonConfiguration;
import io.github.classgraph.ClassGraph;
import io.github.classgraph.ScanResult;
-import org.apache.commons.configuration2.Configuration;
-import org.apache.commons.configuration2.CompositeConfiguration;
-import org.apache.commons.configuration2.FileBasedConfiguration;
-import org.apache.commons.configuration2.PropertiesConfiguration;
-import org.apache.commons.configuration2.XMLConfiguration;
-import org.apache.commons.configuration2.builder.BasicConfigurationBuilder;
-import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
-import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
-import org.apache.commons.configuration2.builder.fluent.Configurations;
-import org.apache.commons.configuration2.builder.fluent.Parameters;
-import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
-import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.commons.io.IOUtils;
-import org.onap.config.api.Config;
-import org.onap.config.api.ConfigurationManager;
-import org.onap.config.impl.YamlConfiguration;
-import org.onap.config.type.ConfigurationMode;
-import org.onap.config.type.ConfigurationType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
@@ -52,8 +35,8 @@ import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
-import java.nio.file.Files;
import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
@@ -82,22 +65,33 @@ import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-
-import static java.util.Optional.ofNullable;
-import static org.onap.config.api.Hint.EXTERNAL_LOOKUP;
-import static org.onap.config.api.Hint.LATEST_LOOKUP;
-import static org.onap.config.api.Hint.NODE_SPECIFIC;
+import org.apache.commons.configuration2.CompositeConfiguration;
+import org.apache.commons.configuration2.Configuration;
+import org.apache.commons.configuration2.FileBasedConfiguration;
+import org.apache.commons.configuration2.PropertiesConfiguration;
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.builder.BasicConfigurationBuilder;
+import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
+import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
+import org.apache.commons.configuration2.builder.fluent.Configurations;
+import org.apache.commons.configuration2.builder.fluent.Parameters;
+import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+import org.apache.commons.io.IOUtils;
+import org.onap.config.api.Config;
+import org.onap.config.api.ConfigurationManager;
+import org.onap.config.impl.YamlConfiguration;
+import org.onap.config.type.ConfigurationMode;
+import org.onap.config.type.ConfigurationType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class ConfigurationUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationUtils.class);
-
private static final String CONFIGURATION_TYPE_NOT_SUPPORTED = "Configuration type not supported:";
-
private static final Map<Class<?>, Class<?>> ARRAY_CLASS_MAP;
-
private static final String CONFIG_REGEX_TPL_OPT_1 = "CONFIG(-\\w*){0,1}(-(%s|%s|%s)){0,1}\\.(%s|%s|%s|%s)$";
-
private static final String CONFIG_REGEX_TPL_OPT_2 = "CONFIG(.)*\\.(%s|%s|%s|%s)$";
static {
@@ -125,12 +119,12 @@ public class ConfigurationUtils {
Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
- super.preVisitDirectory(dir,attrs);
+ super.preVisitDirectory(dir, attrs);
if (rootPath.equals(dir)) {
return FileVisitResult.CONTINUE;
}
collection.add(dir.toFile());
- return recursive? FileVisitResult.CONTINUE : FileVisitResult.SKIP_SUBTREE;
+ return recursive ? FileVisitResult.CONTINUE : FileVisitResult.SKIP_SUBTREE;
}
@Override
@@ -153,13 +147,10 @@ public class ConfigurationUtils {
}
public static String getCommaSeparatedList(List<?> list) {
-
if ((list == null) || list.isEmpty()) {
return "";
}
-
- return list.stream().filter(o -> o != null && !o.toString().trim().isEmpty())
- .map(o -> o.toString().trim()).collect(Collectors.joining(","));
+ return list.stream().filter(o -> o != null && !o.toString().trim().isEmpty()).map(o -> o.toString().trim()).collect(Collectors.joining(","));
}
public static boolean isConfig(URL url) {
@@ -169,26 +160,11 @@ public class ConfigurationUtils {
public static boolean isConfig(String file) {
file = file.toUpperCase().substring(file.lastIndexOf('!') + 1);
file = file.substring(file.lastIndexOf('/') + 1);
- return file.matches(
- String.format(
- CONFIG_REGEX_TPL_OPT_1,
- ConfigurationMode.OVERRIDE,
- ConfigurationMode.MERGE,
- ConfigurationMode.UNION,
- ConfigurationType.PROPERTIES.name(),
- ConfigurationType.XML.name(),
- ConfigurationType.JSON.name(),
- ConfigurationType.YAML.name()
- )
- ) || file.matches(
- String.format(
- CONFIG_REGEX_TPL_OPT_2,
- ConfigurationType.PROPERTIES.name(),
- ConfigurationType.XML.name(),
- ConfigurationType.JSON.name(),
- ConfigurationType.YAML.name()
- )
- );
+ return file.matches(String.format(CONFIG_REGEX_TPL_OPT_1, ConfigurationMode.OVERRIDE, ConfigurationMode.MERGE, ConfigurationMode.UNION,
+ ConfigurationType.PROPERTIES.name(), ConfigurationType.XML.name(), ConfigurationType.JSON.name(), ConfigurationType.YAML.name())) || file
+ .matches(String
+ .format(CONFIG_REGEX_TPL_OPT_2, ConfigurationType.PROPERTIES.name(), ConfigurationType.XML.name(), ConfigurationType.JSON.name(),
+ ConfigurationType.YAML.name()));
}
public static boolean isConfig(File file) {
@@ -196,45 +172,31 @@ public class ConfigurationUtils {
}
private static Optional<String> readNamespace(Configuration config) {
- return ofNullable(config).flatMap(configuration -> ofNullable(configuration.getString(Constants.NAMESPACE_KEY)))
- .map(String::toUpperCase);
+ return ofNullable(config).flatMap(configuration -> ofNullable(configuration.getString(Constants.NAMESPACE_KEY))).map(String::toUpperCase);
}
private static Optional<String> readMergeStrategy(Configuration config) {
- return ofNullable(config).flatMap(configuration -> ofNullable(configuration.getString(Constants.MODE_KEY)))
- .map(String::toUpperCase);
+ return ofNullable(config).flatMap(configuration -> ofNullable(configuration.getString(Constants.MODE_KEY))).map(String::toUpperCase);
}
public static ConfigurationMode getMergeStrategy(File file) {
- Optional<ConfigurationMode> configurationMode =
- getConfiguration(file).flatMap(ConfigurationUtils::readMergeStrategy)
- .flatMap(ConfigurationUtils::convertConfigurationMode);
+ Optional<ConfigurationMode> configurationMode = getConfiguration(file).flatMap(ConfigurationUtils::readMergeStrategy)
+ .flatMap(ConfigurationUtils::convertConfigurationMode);
return configurationMode.orElseGet(() -> getMergeStrategy(file.getName().toUpperCase()));
}
public static ConfigurationMode getMergeStrategy(URL url) {
- Optional<ConfigurationMode> configurationMode =
- getConfiguration(url).flatMap(ConfigurationUtils::readMergeStrategy)
- .flatMap(ConfigurationUtils::convertConfigurationMode);
+ Optional<ConfigurationMode> configurationMode = getConfiguration(url).flatMap(ConfigurationUtils::readMergeStrategy)
+ .flatMap(ConfigurationUtils::convertConfigurationMode);
return configurationMode.orElseGet(() -> getMergeStrategy(url.getFile().toUpperCase()));
}
public static ConfigurationMode getMergeStrategy(String file) {
-
file = file.toUpperCase().substring(file.lastIndexOf('!') + 1);
file = file.substring(file.lastIndexOf('/') + 1);
- Pattern pattern = Pattern.compile(
- String.format(
- CONFIG_REGEX_TPL_OPT_1,
- ConfigurationMode.OVERRIDE,
- ConfigurationMode.MERGE,
- ConfigurationMode.UNION,
- ConfigurationType.PROPERTIES.name(),
- ConfigurationType.XML.name(),
- ConfigurationType.JSON.name(),
- ConfigurationType.YAML.name()
- )
- );
+ Pattern pattern = Pattern.compile(String
+ .format(CONFIG_REGEX_TPL_OPT_1, ConfigurationMode.OVERRIDE, ConfigurationMode.MERGE, ConfigurationMode.UNION,
+ ConfigurationType.PROPERTIES.name(), ConfigurationType.XML.name(), ConfigurationType.JSON.name(), ConfigurationType.YAML.name()));
Matcher matcher = pattern.matcher(file);
boolean b1 = matcher.matches();
if (b1) {
@@ -250,14 +212,11 @@ public class ConfigurationUtils {
}
}
}
-
return null;
}
public static Optional<FileBasedConfiguration> getConfiguration(URL url) {
-
try {
-
ConfigurationType configType = ConfigurationUtils.getConfigType(url);
switch (configType) {
case PROPERTIES:
@@ -274,12 +233,10 @@ public class ConfigurationUtils {
} catch (ConfigurationException exception) {
LOGGER.error("Error reading configuration at {}.", url.toString(), exception);
}
-
return Optional.empty();
}
public static Optional<FileBasedConfiguration> getConfiguration(File file) {
-
try {
return getConfiguration(file.getAbsoluteFile().toURI().toURL());
} catch (MalformedURLException e) {
@@ -289,14 +246,12 @@ public class ConfigurationUtils {
public static ConfigurationType getConfigType(File file) {
Objects.requireNonNull(file, "File cannot be null");
- return Enum.valueOf(ConfigurationType.class,
- file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf('.') + 1).toUpperCase());
+ return Enum.valueOf(ConfigurationType.class, file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf('.') + 1).toUpperCase());
}
public static ConfigurationType getConfigType(URL url) {
Objects.requireNonNull(url, "URL cannot be null");
- return Enum.valueOf(ConfigurationType.class,
- url.getFile().substring(url.getFile().lastIndexOf('.') + 1).toUpperCase());
+ return Enum.valueOf(ConfigurationType.class, url.getFile().substring(url.getFile().lastIndexOf('.') + 1).toUpperCase());
}
private static Optional<ConfigurationMode> convertConfigurationMode(String configMode) {
@@ -311,9 +266,7 @@ public class ConfigurationUtils {
public static Class<?> getCollectionGenericType(Field field) {
Type type = field.getGenericType();
-
if (type instanceof ParameterizedType) {
-
ParameterizedType paramType = (ParameterizedType) type;
Type[] arr = paramType.getActualTypeArguments();
if (arr.length > 0) {
@@ -325,13 +278,12 @@ public class ConfigurationUtils {
}
}
}
-
return String[].class;
}
public static boolean isWrapperClass(Class<?> clazz) {
- Predicate<Class<?>> predicateWrapper = type -> type == String.class || type == Boolean.class || type == Character.class
- || Number.class.isAssignableFrom(type);
+ Predicate<Class<?>> predicateWrapper = type -> type == String.class || type == Boolean.class || type == Character.class || Number.class
+ .isAssignableFrom(type);
return isA(predicateWrapper, clazz);
}
@@ -368,10 +320,9 @@ public class ConfigurationUtils {
* Check if clazz is array of primitives or array of primitives wrappers
*/
public static boolean isAPrimitivesOrWrappersArray(Class<?> clazz) {
- Predicate<Class<?>> predicatePrimitivesOrWrappersArray =
- type -> ConfigurationUtils.isAWrappersArray(type) || ConfigurationUtils.isAPrimitivesArray(type);
+ Predicate<Class<?>> predicatePrimitivesOrWrappersArray = type -> ConfigurationUtils.isAWrappersArray(type) || ConfigurationUtils
+ .isAPrimitivesArray(type);
return isA(predicatePrimitivesOrWrappersArray, clazz);
-
}
/**
@@ -410,23 +361,18 @@ public class ConfigurationUtils {
FileBasedConfigurationBuilder<FileBasedConfiguration> builder;
ConfigurationType configType = ConfigurationUtils.getConfigType(file);
builder = getFileBasedConfigurationBuilder(configType);
- builder.configure(new Parameters().fileBased().setFile(file)
- .setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
+ builder.configure(new Parameters().fileBased().setFile(file).setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
return builder;
}
public static BasicConfigurationBuilder<FileBasedConfiguration> getConfigurationBuilder(URL url) {
ConfigurationType configType = ConfigurationUtils.getConfigType(url);
- ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> builder =
- getFileBasedConfigurationBuilder(configType);
- builder.configure(
- new Parameters().fileBased().setURL(url).setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
+ ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> builder = getFileBasedConfigurationBuilder(configType);
+ builder.configure(new Parameters().fileBased().setURL(url).setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
return builder;
}
- private static ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> getFileBasedConfigurationBuilder(
- ConfigurationType configType) {
-
+ private static ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> getFileBasedConfigurationBuilder(ConfigurationType configType) {
ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> builder;
switch (configType) {
case PROPERTIES:
@@ -490,7 +436,7 @@ public class ConfigurationUtils {
public static Object getWrappersArray(Collection<?> collection, Class<?> clazz) {
Object array = null;
- if (isWrapperClass(clazz)){
+ if (isWrapperClass(clazz)) {
int collectionSize = collection.size();
array = Array.newInstance(clazz, collection.size());
Object[] objArray = collection.toArray();
@@ -520,11 +466,10 @@ public class ConfigurationUtils {
} else if (key.toUpperCase().startsWith("SYS:")) {
value = System.getProperty(key.substring(substringStartIndex));
} else {
- value = ConfigurationUtils.getCollectionString(
- ConfigurationManager.lookup().getAsStringValues(tenant, namespace, key).toString());
+ value = ConfigurationUtils.getCollectionString(ConfigurationManager.lookup().getAsStringValues(tenant, namespace, key).toString());
}
- return processVariablesIfPresent(tenant, namespace, data.replaceAll("\\$\\{" + key + "}",
- value == null ? "" : value.replace("\\", "\\\\")));
+ return processVariablesIfPresent(tenant, namespace,
+ data.replaceAll("\\$\\{" + key + "}", value == null ? "" : value.replace("\\", "\\\\")));
} else {
return data;
}
@@ -594,7 +539,7 @@ public class ConfigurationUtils {
return getConcreteCollection(List.class);
}
throw new IllegalArgumentException("Only corresponding array classes and any are allowed as argument."
- + "assignable from TransferQueue, BlockingQueue, Deque, Queue, SortedSet, Set, List class");
+ + "assignable from TransferQueue, BlockingQueue, Deque, Queue, SortedSet, Set, List class");
}
public static Collection getConcreteCollection(Class<?> clazz) {
@@ -616,18 +561,16 @@ public class ConfigurationUtils {
return new LinkedBlockingQueue<>();
default:
throw new IllegalArgumentException("Only corresponding array classes and any are allowed as argument."
- + "assignable from TransferQueue, BlockingQueue, Deque, Queue, SortedSet, Set, List class");
+ + "assignable from TransferQueue, BlockingQueue, Deque, Queue, SortedSet, Set, List class");
}
}
public static String getConfigurationRepositoryKey(File file) {
- return getConfigurationRepositoryKey(
- ConfigurationUtils.getNamespace(file).split(Constants.TENANT_NAMESPACE_SEPARATOR));
+ return getConfigurationRepositoryKey(ConfigurationUtils.getNamespace(file).split(Constants.TENANT_NAMESPACE_SEPARATOR));
}
public static String getConfigurationRepositoryKey(URL url) {
- return getConfigurationRepositoryKey(
- ConfigurationUtils.getNamespace(url).split(Constants.TENANT_NAMESPACE_SEPARATOR));
+ return getConfigurationRepositoryKey(ConfigurationUtils.getNamespace(url).split(Constants.TENANT_NAMESPACE_SEPARATOR));
}
public static String getConfigurationRepositoryKey(String[] array) {
@@ -641,49 +584,34 @@ public class ConfigurationUtils {
}
public static String getNamespace(File file) {
- Optional<String> namespace =
- getConfiguration(file).flatMap(ConfigurationUtils::readNamespace).map(String::toUpperCase);
+ Optional<String> namespace = getConfiguration(file).flatMap(ConfigurationUtils::readNamespace).map(String::toUpperCase);
return namespace.orElseGet(() -> getNamespace(file.getName().toUpperCase()));
}
public static String getNamespace(String file) {
file = file.toUpperCase().substring(file.lastIndexOf('!') + 1);
file = file.substring(file.lastIndexOf('/') + 1);
- Pattern pattern = Pattern.compile(
- String.format(
- CONFIG_REGEX_TPL_OPT_1,
- ConfigurationMode.OVERRIDE,
- ConfigurationMode.MERGE,
- ConfigurationMode.UNION,
- ConfigurationType.PROPERTIES.name(),
- ConfigurationType.XML.name(),
- ConfigurationType.JSON.name(),
- ConfigurationType.YAML.name()
- )
- );
+ Pattern pattern = Pattern.compile(String
+ .format(CONFIG_REGEX_TPL_OPT_1, ConfigurationMode.OVERRIDE, ConfigurationMode.MERGE, ConfigurationMode.UNION,
+ ConfigurationType.PROPERTIES.name(), ConfigurationType.XML.name(), ConfigurationType.JSON.name(), ConfigurationType.YAML.name()));
Matcher matcher = pattern.matcher(file);
boolean b1 = matcher.matches();
if (b1) {
if (matcher.group(1) != null) {
String moduleName = matcher.group(1).substring(1);
- return moduleName.equalsIgnoreCase(ConfigurationMode.OVERRIDE.name()) || moduleName.equalsIgnoreCase(
- ConfigurationMode.UNION.name()) || moduleName.equalsIgnoreCase(ConfigurationMode.MERGE.name())
- ? Constants.DEFAULT_NAMESPACE : moduleName;
+ return moduleName.equalsIgnoreCase(ConfigurationMode.OVERRIDE.name()) || moduleName.equalsIgnoreCase(ConfigurationMode.UNION.name())
+ || moduleName.equalsIgnoreCase(ConfigurationMode.MERGE.name()) ? Constants.DEFAULT_NAMESPACE : moduleName;
} else {
return Constants.DEFAULT_NAMESPACE;
}
} else if (isConfig(file)) {
return Constants.DEFAULT_NAMESPACE;
}
-
return null;
}
public static String getNamespace(URL url) {
-
- Optional<String> namespace =
- getConfiguration(url).flatMap(ConfigurationUtils::readNamespace).map(String::toUpperCase);
-
+ Optional<String> namespace = getConfiguration(url).flatMap(ConfigurationUtils::readNamespace).map(String::toUpperCase);
return namespace.orElseGet(() -> getNamespace(url.getFile().toUpperCase()));
}
@@ -738,7 +666,6 @@ public class ConfigurationUtils {
return ((Object[]) obj).length == 0;
}
}
-
return false;
}
@@ -747,7 +674,6 @@ public class ConfigurationUtils {
}
// private methods section starts here
-
private static int[] getIntsPrimitiveArray(Collection<?> collection) {
int collectionSize = collection.size();
int[] array = new int[collectionSize];
@@ -827,5 +753,4 @@ public class ConfigurationUtils {
}
return array;
}
-
}