summaryrefslogtreecommitdiffstats
path: root/common/onap-common-configuration-management
diff options
context:
space:
mode:
Diffstat (limited to 'common/onap-common-configuration-management')
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/pom.xml5
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java2
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/NonConfigResource.java159
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java8
-rw-r--r--common/onap-common-configuration-management/onap-configuration-management-core/src/test/java/org/onap/config/type/NonConfigResourceTest.java82
5 files changed, 177 insertions, 79 deletions
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml b/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml
index 78c378713a..46e4579aa6 100644
--- a/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml
+++ b/common/onap-common-configuration-management/onap-configuration-management-core/pom.xml
@@ -106,6 +106,11 @@
<scope>test</scope>
<version>${junit.version}</version>
</dependency>
+ <dependency>
+ <groupId>io.vavr</groupId>
+ <artifactId>vavr</artifactId>
+ <version>0.9.2</version>
+ </dependency>
</dependencies>
</project>
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 db64f7f7fc..9782fc9969 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
@@ -670,7 +670,7 @@ public class ConfigurationUtils {
Configuration dbConfig = ConfigurationRepository.lookup()
.getConfigurationFor(Constants.DEFAULT_TENANT, Constants.DB_NAMESPACE);
BasicConfigurationBuilder<AgglomerateConfiguration> builder =
- new BasicConfigurationBuilder<AgglomerateConfiguration>(AgglomerateConfiguration.class);
+ new BasicConfigurationBuilder<>(AgglomerateConfiguration.class);
builder.configure(
new Parameters().database()
.setDataSource(ConfigurationDataSource.lookup())
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/NonConfigResource.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/NonConfigResource.java
index 830cdfef5a..a63b455a16 100644
--- a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/NonConfigResource.java
+++ b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/NonConfigResource.java
@@ -1,95 +1,104 @@
package org.onap.config;
+import io.vavr.Function1;
+import io.vavr.collection.HashSet;
+import io.vavr.collection.Set;
+import io.vavr.control.Option;
+
import java.io.File;
+import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.function.Predicate;
+
+import static io.vavr.API.Option;
/**
* The type Non config resource.
*/
public class NonConfigResource {
- private static Set<URL> urls = new HashSet<>();
- private static Set<File> files = new HashSet<>();
+ private Function1<String, String> propertyGetter;
+ private Set<URL> urls;
+ private Set<Path> files;
- /**
- * Add.
- *
- * @param url the url
- */
- public static void add(URL url) {
- urls.add(url);
- }
+ private NonConfigResource(Function1<String, String> propertyGetter) {
+ this.propertyGetter = propertyGetter;
+ this.files = HashSet.empty();
+ this.urls = HashSet.empty();
+ }
- /**
- * Add.
- *
- * @param file the file
- */
- public static void add(File file) {
- files.add(file);
- }
+ public static NonConfigResource create(Function1<String, String> propertyGetter) {
+ return new NonConfigResource(propertyGetter);
+ }
- /**
- * Locate path.
- *
- * @param resource the resource
- * @return the path
- */
- public static Path locate(String resource) {
- try {
- if (resource != null) {
- File file = new File(resource);
- if (file.exists()) {
- return Paths.get(resource);
- }
- for (File availableFile : files) {
- if (availableFile.getAbsolutePath().endsWith(resource) && availableFile.exists()) {
- return Paths.get(availableFile.getAbsolutePath());
- }
- }
- if (System.getProperty("node.config.location") != null) {
- Path path = locate(new File(System.getProperty("node.config.location")), resource);
- if (path != null) {
- return path;
- }
- }
- if (System.getProperty("config.location") != null) {
- Path path = locate(new File(System.getProperty("config.location")), resource);
- if (path != null) {
- return path;
- }
- }
- for (URL url : urls) {
- if (url.getFile().endsWith(resource)) {
- return Paths.get(url.toURI());
- }
- }
- }
- } catch (Exception exception) {
- exception.printStackTrace();
+ /**
+ * Add.
+ *
+ * @param url the url
+ */
+ public void add(URL url) {
+ urls = urls.add(url);
+ }
+
+ /**
+ * Add.
+ *
+ * @param file the file
+ */
+ public void add(File file) {
+ files = files.add(file.toPath());
}
- return null;
- }
- private static Path locate(File root, String resource) {
- if (root.exists()) {
- Collection<File> filesystemResources = ConfigurationUtils.getAllFiles(root, true, false);
- Predicate<File> f1 = ConfigurationUtils::isConfig;
- for (File file : filesystemResources) {
- if (!f1.test(file)) {
- add(file);
- if (file.getAbsolutePath().endsWith(resource)) {
- return Paths.get(file.getAbsolutePath());
- }
+ /**
+ * Locate path.
+ *
+ * @param resource the resource
+ * @return the path
+ */
+ public Path locate(String resource) {
+ Path toReturn = null;
+ try {
+ if (resource != null) {
+ toReturn = tryToLocateResource(resource).getOrNull();
+ }
+ } catch (Exception exception) {
+ exception.printStackTrace();
}
- }
+ return toReturn;
+ }
+
+ private Option<Path> tryToLocateResource(String resource) throws URISyntaxException {
+ return new File(resource).exists() ? Option(Paths.get(resource)) : getPathForResourceAmongFiles(resource)
+ .orElse(getPathForResourceBasedOnProperty(resource, "node.config.location"))
+ .orElse(getPathForResourceBasedOnProperty(resource, "config.location"))
+ .orElse(getPathForResourceAmongUrls(resource));
+ }
+
+ private Option<Path> getPathForResourceBasedOnProperty(String resource, String configPropertyKey) {
+ return Option(propertyGetter.apply(configPropertyKey))
+ .flatMap(el -> locate(new File(el), resource));
+ }
+
+ private Option<Path> getPathForResourceAmongFiles(String resource) {
+ return files.map(Path::toAbsolutePath)
+ .filter(path -> path.toFile().exists() && path.endsWith(resource))
+ .headOption();
+ }
+
+ private Option<Path> getPathForResourceAmongUrls(String resource) throws URISyntaxException {
+ return urls.filter(url -> url.getFile().endsWith(resource))
+ .headOption()
+ .flatMap(url -> Option(Paths.get(url.getPath())));
+ }
+
+ private Option<Path> locate(File root, String resource) {
+ return root.exists() ? Option.ofOptional(ConfigurationUtils.getAllFiles(root, true, false)
+ .stream()
+ .filter(file -> !ConfigurationUtils.isConfig(file))
+ .peek(this::add)
+ .filter(file -> file.getAbsolutePath().endsWith(resource))
+ .map(file -> Paths.get(file.getAbsolutePath()))
+ .findAny()) : Option.none();
}
- return null;
- }
}
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java
index 00725b1165..56390ea54a 100644
--- a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java
+++ b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java
@@ -1,5 +1,6 @@
package org.onap.config.impl;
+
import org.apache.commons.configuration2.Configuration;
import org.apache.commons.configuration2.DatabaseConfiguration;
import org.onap.config.ConfigurationUtils;
@@ -39,6 +40,7 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
;
};
private static boolean instantiated = false;
+ private static NonConfigResource nonConfigResource = NonConfigResource.create(propertyName -> System.getProperties().getProperty(propertyName));
/**
* The Change notifier.
*/
@@ -66,7 +68,7 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
}
moduleConfig.addConfig(url);
} else {
- NonConfigResource.add(url);
+ nonConfigResource.add(url);
}
}
String configLocation = System.getProperty("config.location");
@@ -84,7 +86,7 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
}
moduleConfig.addConfig(file);
} else {
- NonConfigResource.add(file);
+ nonConfigResource.add(file);
}
}
}
@@ -453,7 +455,7 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
if (String.class.equals(clazz)) {
if (obj.toString().startsWith("@") && ConfigurationUtils.isExternalLookup(processingHint)) {
String contents = ConfigurationUtils
- .getFileContents(NonConfigResource.locate(obj.toString().substring(1).trim()));
+ .getFileContents(nonConfigResource.locate(obj.toString().substring(1).trim()));
if (contents == null) {
contents = ConfigurationUtils.getFileContents(obj.toString().substring(1).trim());
}
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/java/org/onap/config/type/NonConfigResourceTest.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/java/org/onap/config/type/NonConfigResourceTest.java
new file mode 100644
index 0000000000..0671996fb5
--- /dev/null
+++ b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/java/org/onap/config/type/NonConfigResourceTest.java
@@ -0,0 +1,82 @@
+package org.onap.config.type;
+
+import com.google.common.collect.ImmutableMap;
+import org.junit.Test;
+import org.onap.config.NonConfigResource;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Map;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class NonConfigResourceTest {
+
+ private final URL sampleUrlResource = NonConfigResourceTest.class.getResource("NonConfigResourceTest.class");
+ private final String sampleResourcePath = sampleUrlResource.getPath();
+ private final File sampleResourceFile = new File(sampleResourcePath);
+
+ @Test
+ public void testShouldLocateResourceWhenAbsPathProvided2() {
+ Map<String, String> properties = ImmutableMap.of();
+ Path actualResourcePath = NonConfigResource.create(properties::get).locate(sampleResourceFile.toString());
+
+ assertTrue(actualResourcePath.compareTo(sampleResourceFile.toPath()) == 0);
+ }
+
+ @Test
+ public void testShouldLocateResourceWhenPresentInFiles2() {
+ Map<String, String> properties = ImmutableMap.of();
+ NonConfigResource testedObject = NonConfigResource.create(properties::get);
+ testedObject.add(sampleResourceFile);
+
+ Path thisFilePath = testedObject.locate("NonConfigResourceTest.class");
+
+ assertTrue(thisFilePath.compareTo(sampleResourceFile.toPath()) == 0);
+ }
+
+ @Test
+ public void testShouldLocateResourceWhenNodeConfigPropertyIsSet2() throws URISyntaxException, MalformedURLException {
+ Map<String, String> properties = ImmutableMap.of("node.config.location", new File(sampleResourcePath).getParentFile().getPath());
+ NonConfigResource testedNonConfigResource = NonConfigResource.create(properties::get);
+ System.getProperties().setProperty("node.config.location", new File(sampleResourcePath).getParentFile().getPath());
+ Path thisFilePath = testedNonConfigResource.locate("NonConfigResourceTest.class");
+
+ assertTrue(thisFilePath.compareTo(new File(sampleResourcePath).toPath()) == 0);
+ }
+
+ @Test
+ public void testShouldLocateResourceWhenConfigPropertyIsSet2() {
+ Map<String, String> properties = ImmutableMap.of("config.location", new File(sampleResourcePath).getParentFile().getPath());
+ NonConfigResource testedNonConfigResource = NonConfigResource.create(properties::get);
+ Path thisFilePath = testedNonConfigResource.locate("NonConfigResourceTest.class");
+
+ assertTrue(thisFilePath.compareTo(new File(sampleResourcePath).toPath()) == 0);
+ }
+
+ @Test
+ public void testShouldLocatePathWhenResourcePresentInUrls2() throws URISyntaxException {
+ Map<String, String> properties = ImmutableMap.of();
+ NonConfigResource testedObject = NonConfigResource.create(properties::get);
+ testedObject.add(sampleUrlResource);
+
+ Path thisFilePath = testedObject.locate("NonConfigResourceTest.class");
+
+ assertTrue(thisFilePath.compareTo(Paths.get(sampleUrlResource.toURI())) == 0);
+ }
+
+ @Test
+ public void testShouldNotLocateResource2() throws URISyntaxException {
+ Map<String, String> properties = ImmutableMap.of();
+ NonConfigResource testedObject = NonConfigResource.create(properties::get);
+
+ Path thisFilePath = testedObject.locate("nonexistingresource");
+
+ assertNull(thisFilePath);
+ }
+}