Removed support of dynamic configuration 61/71361/1
authorvempo <vitaliy.emporopulo@amdocs.com>
Sun, 28 Oct 2018 12:45:46 +0000 (14:45 +0200)
committervempo <vitaliy.emporopulo@amdocs.com>
Sun, 28 Oct 2018 12:45:46 +0000 (14:45 +0200)
Configuration framework will not poll configuration
for changes, and will not notify client code of them.
Also minor cleanup, added unit tests.

Change-Id: I428b23f7acb13c6610390f46aae6e011d6b0ee80
Issue-ID: SDC-1867
Signed-off-by: vempo <vitaliy.emporopulo@amdocs.com>
30 files changed:
common/onap-common-configuration-management/onap-configuration-management-api/pom.xml
common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/Configuration.java
common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/ConfigurationChangeListener.java [deleted file]
common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/ConfigurationManager.java
common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/DynamicConfiguration.java [deleted file]
common/onap-common-configuration-management/onap-configuration-management-api/src/test/java/org/onap/config/api/ConfigurationTest.java [new file with mode: 0644]
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/ConfigurationUtils.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/Constants.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/AggregateConfiguration.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/CliConfigurationImpl.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationChangeNotifier.java [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationImpl.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationRepository.java
common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/type/ConfigurationUpdate.java [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/main/resources/config-system.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/LoadOrderConfiguration/config.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config-NS.properties [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.json [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.properties [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.xml [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.yaml [deleted file]
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/XMLConfiguration/config.xml
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/YAMLConfiguration/config.yaml
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/config-system.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/fallback/config-fallback.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/java-properties/config.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/multitenancy/config-at.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/multitenancy/config-tf.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/multitenancy/config-vf.properties
common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/multitenancy/config.properties

index 08be65a..e402be2 100644 (file)
         <version>1.3.1-SNAPSHOT</version>
     </parent>
 
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
 </project>
index 3232d49..d5b5a10 100644 (file)
@@ -161,35 +161,6 @@ public interface Configuration {
         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);
     }
@@ -294,28 +265,6 @@ public interface Configuration {
         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);
     }
diff --git a/common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/ConfigurationChangeListener.java b/common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/ConfigurationChangeListener.java
deleted file mode 100644 (file)
index dddd751..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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;
-
-public interface ConfigurationChangeListener {
-
-    default void notify(String tenantId, String component, String key, Object oldValue, Object newValue) {
-    }
-
-    default void notify(String component, String key, Object oldValue, Object newValue) {
-    }
-
-    default void notify(String key, Object oldValue, Object newValue) {
-    }
-}
index d91fdb1..0bb3359 100644 (file)
@@ -38,12 +38,8 @@ public interface ConfigurationManager extends Configuration {
 
     String getConfigurationValue(Map<String, Object> queryData);
 
-    void updateConfigurationValue(Map<String, Object> updateData);
-
     Map<String, String> listConfiguration(Map<String, Object> query);
 
-    boolean updateConfigurationValues(String tenant, String namespace, Map configKeyValueStore);
-
     Collection<String> getTenants();
 
     Collection<String> getNamespaces();
diff --git a/common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/DynamicConfiguration.java b/common/onap-common-configuration-management/onap-configuration-management-api/src/main/java/org/onap/config/api/DynamicConfiguration.java
deleted file mode 100644 (file)
index c2973a4..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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;
-
-
-public class DynamicConfiguration<T> {
-
-    private String tenant;
-
-    private String namespace;
-
-    private String key;
-
-    private Configuration configuration;
-
-    private Class clazz;
-
-    private T defaultValue;
-
-    public static <K> DynamicConfiguration<List<K>> getDynConfiguration(String tenant, String namespace, String key,
-            Class<K> clazz, K defaultValue, Configuration configuration) {
-        if (clazz.isPrimitive()) {
-            throw new RuntimeException("Only Wrapper classes like Integer, Long, Double, "
-                                               + "Boolean etc including String are supported.");
-        }
-        return getDynamicConfiguration(tenant, namespace, key, getArrayClass(clazz),
-                Collections.singletonList(defaultValue), configuration);
-    }
-
-    public static <T> DynamicConfiguration<T> getDynamicConfiguration(String tenant, String namespace, String key,
-            Class<T> clazz, T defaultValue, Configuration configuration) {
-        DynamicConfiguration<T> dynamicConfiguration = new DynamicConfiguration<>();
-        dynamicConfiguration.tenant = tenant;
-        dynamicConfiguration.namespace = namespace;
-        dynamicConfiguration.key = key;
-        dynamicConfiguration.clazz = clazz;
-        dynamicConfiguration.defaultValue = defaultValue;
-        dynamicConfiguration.configuration = configuration;
-        return dynamicConfiguration;
-    }
-
-    public static Class getArrayClass(Class clazz) {
-        Class arrayClass = null;
-        switch (clazz.getName()) {
-            case "java.lang.Byte":
-                arrayClass = Byte[].class;
-                break;
-            case "java.lang.Short":
-                arrayClass = Short[].class;
-                break;
-            case "java.lang.Integer":
-                arrayClass = Integer[].class;
-                break;
-            case "java.lang.Long":
-                arrayClass = Long[].class;
-                break;
-            case "java.lang.Float":
-                arrayClass = Float[].class;
-                break;
-            case "java.lang.Double":
-                arrayClass = Double[].class;
-                break;
-            case "java.lang.Boolean":
-                arrayClass = Boolean[].class;
-                break;
-            case "java.lang.Character":
-                arrayClass = Character[].class;
-                break;
-            case "java.lang.String":
-                arrayClass = String[].class;
-                break;
-            default:
-        }
-        return arrayClass;
-    }
-
-    public T get() {
-        Object toReturn = configuration.get(tenant, namespace, key, clazz, Hint.LATEST_LOOKUP, Hint.EXTERNAL_LOOKUP,
-                Hint.NODE_SPECIFIC);
-        if (toReturn != null && toReturn.getClass().isArray()) {
-            toReturn = Arrays.asList((Object[]) toReturn);
-        }
-        return toReturn == null ? defaultValue : (T) toReturn;
-    }
-
-}
diff --git a/common/onap-common-configuration-management/onap-configuration-management-api/src/test/java/org/onap/config/api/ConfigurationTest.java b/common/onap-common-configuration-management/onap-configuration-management-api/src/test/java/org/onap/config/api/ConfigurationTest.java
new file mode 100644 (file)
index 0000000..9945a93
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * 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.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author evitaliy
+ * @since 28 Oct 2018
+ */
+public class ConfigurationTest {
+
+    @After
+    public void cleanUp() {
+        Configuration.TENANT.remove();
+    }
+
+    @Test
+    public void tenantRetrievedWhenPreviouslySet() {
+        final String tenantId = "abc";
+        Configuration.setTenantId(tenantId);
+        Assert.assertEquals(tenantId, Configuration.TENANT.get());
+    }
+
+    @Test
+    public void tenantEmptyWhenNeverSet() {
+        Assert.assertNull(Configuration.TENANT.get());
+    }
+
+    @Test
+    public void tenantNullWhenNullSet() {
+        Configuration.setTenantId("xyz");
+        Configuration.setTenantId(null);
+        Assert.assertNull(Configuration.TENANT.get());
+    }
+
+    @Test
+    public void tenantNullWhenEmptySet() {
+        Configuration.setTenantId("xyz");
+        Configuration.setTenantId("");
+        Assert.assertNull(Configuration.TENANT.get());
+    }
+
+    @Test
+    public void tenantDoesNotPropagateToAnotherThread() throws ExecutionException, InterruptedException {
+        final String currentTenant = "xyz";
+        Configuration.setTenantId(currentTenant);
+        CompletableFuture<String> result = new CompletableFuture<>();
+        Thread otherThread = new Thread(() -> result.complete(Configuration.TENANT.get()));
+        otherThread.start();
+        Assert.assertNull("Tenant in the other thread expected to be null", result.get());
+        Assert.assertEquals(currentTenant, Configuration.TENANT.get());
+    }
+}
\ No newline at end of file
index 528941b..dcdf17a 100644 (file)
@@ -48,10 +48,8 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.LinkedTransferQueue;
-import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TransferQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -102,14 +100,7 @@ public class ConfigurationUtils {
     }
 
     private ConfigurationUtils() {
-    }
-
-    public static ThreadFactory getThreadFactory() {
-        return r1 -> {
-            Thread thread = Executors.privilegedThreadFactory().newThread(r1);
-            thread.setDaemon(true);
-            return thread;
-        };
+        // prevent instantiation
     }
 
     public static Collection<File> getAllFiles(File file, boolean recursive, boolean onlyDirectory) {
@@ -303,8 +294,9 @@ public class ConfigurationUtils {
     }
 
     public static boolean isWrapperClass(Class clazz) {
-        return clazz == String.class || clazz == Boolean.class || clazz == Character.class
-                       || Number.class.isAssignableFrom(clazz);
+        return clazz == String.class || clazz == Boolean.class || clazz == Character.class || Number.class
+                                                                                                      .isAssignableFrom(
+                                                                                                              clazz);
     }
 
     public static Class getArrayClass(Class clazz) {
@@ -324,8 +316,8 @@ public class ConfigurationUtils {
         return builder;
     }
 
-    private static ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration>
-            getFileBasedConfigurationReloadingFileBasedConfigurationBuilder(ConfigurationType configType) {
+    private static ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> getFileBasedConfigurationReloadingFileBasedConfigurationBuilder(
+            ConfigurationType configType) {
 
         ReloadingFileBasedConfigurationBuilder<FileBasedConfiguration> builder;
         switch (configType) {
@@ -569,7 +561,7 @@ public class ConfigurationUtils {
             stack.push(element);
         }
         String toReturn = stack.pop();
-        return stack.pop() + Constants.KEY_ELEMENTS_DELIMETER + toReturn;
+        return stack.pop() + Constants.KEY_ELEMENTS_DELIMITER + toReturn;
     }
 
     public static String getNamespace(File file) {
index 290a7a5..97963c4 100644 (file)
@@ -21,7 +21,7 @@ public class Constants {
     public static final String DEFAULT_TENANT = "GLOBAL";
     public static final String DEFAULT_NAMESPACE = "COMMON";
     public static final String DB_NAMESPACE = "SYSTEM";
-    public static final String KEY_ELEMENTS_DELIMETER = "-";
+    public static final String KEY_ELEMENTS_DELIMITER = "-";
     public static final String TENANT_NAMESPACE_SEPARATOR = ":";
     public static final String NAMESPACE_KEY = "_config.namespace";
     public static final String MODE_KEY = "_config.mergeStrategy";
index 80fbaf8..32a1902 100644 (file)
@@ -40,18 +40,6 @@ public final class AggregateConfiguration {
     private final Map<String, Configuration> mergeConfig = new HashMap<>();
     private final Map<String, Configuration> overrideConfig = new LinkedHashMap<>();
 
-    public AggregateConfiguration() {
-
-        try {
-            Class clazz = Class.forName(Thread.currentThread().getStackTrace()[2].getClassName());
-            if (!clazz.getCanonicalName().equals(ConfigurationImpl.class.getCanonicalName())) {
-                throw new RuntimeException("Illegal access.");
-            }
-        } catch (ClassNotFoundException cfe) {
-            throw new RuntimeException("Class not found while loading change notifier");
-        }
-    }
-
     public void addConfig(File file) throws Exception {
         addConfig(file.getAbsolutePath().toUpperCase(), ConfigurationUtils.getMergeStrategy(file),
                 ConfigurationUtils.getConfigurationBuilder(file, false).getConfiguration());
index 7f753fd..77d0c11 100644 (file)
 
 package org.onap.config.impl;
 
-import static org.onap.config.Constants.DB_NAMESPACE;
 import static org.onap.config.Constants.DEFAULT_NAMESPACE;
 import static org.onap.config.Constants.DEFAULT_TENANT;
-import static org.onap.config.Constants.KEY_ELEMENTS_DELIMETER;
 import static org.onap.config.Constants.LOAD_ORDER_KEY;
 import static org.onap.config.Constants.MBEAN_NAME;
 import static org.onap.config.Constants.MODE_KEY;
 import static org.onap.config.Constants.NAMESPACE_KEY;
 
-import java.io.File;
-import java.io.PrintWriter;
 import java.lang.management.ManagementFactory;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -39,22 +35,12 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import javax.management.MBeanServer;
-import javax.management.MBeanServerDelegate;
-import javax.management.MBeanServerNotification;
-import javax.management.Notification;
 import javax.management.ObjectName;
 import javax.management.StandardMBean;
-import org.apache.commons.configuration2.CombinedConfiguration;
-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.onap.config.ConfigurationUtils;
-import org.onap.config.Constants;
 import org.onap.config.api.ConfigurationManager;
 import org.onap.config.api.Hint;
 import org.onap.config.type.ConfigurationQuery;
-import org.onap.config.type.ConfigurationUpdate;
 
 public final class CliConfigurationImpl extends ConfigurationImpl implements ConfigurationManager {
 
@@ -65,27 +51,6 @@ public final class CliConfigurationImpl extends ConfigurationImpl implements Con
             mbs.unregisterMBean(name);
         }
         mbs.registerMBean(new StandardMBean(this, ConfigurationManager.class), name);
-        mbs.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME,
-                (notification, handback) -> handleNotification(notification), null, null);
-    }
-
-    public void handleNotification(Notification notification) {
-        if (notification instanceof MBeanServerNotification) {
-            MBeanServerNotification mbs = (MBeanServerNotification) notification;
-            if (MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(mbs.getType())) {
-                try {
-                    String mbean = ConfigurationRepository.lookup().getConfigurationFor(DEFAULT_TENANT, DB_NAMESPACE)
-                                           .getString("shutdown.mbean");
-                    if (mbs.getMBeanName().equals(mbean == null ? new ObjectName(MBEAN_NAME) : new ObjectName(mbean))) {
-                        changeNotifier.shutdown();
-                    }
-                } catch (Exception exception) {
-                    //do nothing.
-                }
-            } else if (MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(mbs.getType())) {
-                mbs.getMBeanName();
-            }
-        }
     }
 
     public String getConfigurationValue(Map<String, Object> input) {
@@ -116,7 +81,9 @@ public final class CliConfigurationImpl extends ConfigurationImpl implements Con
     }
 
     private Object getInput(Map<String, Object> input) {
+
         Object toReturn = null;
+
         try {
             toReturn = Class.forName(input.get("ImplClass").toString()).newInstance();
             Method[] methods = toReturn.getClass().getMethods();
@@ -132,111 +99,6 @@ public final class CliConfigurationImpl extends ConfigurationImpl implements Con
         return toReturn;
     }
 
-    public void updateConfigurationValue(Map<String, Object> input) {
-        updateConfigurationValue((ConfigurationUpdate) getInput(input));
-    }
-
-    private void updateConfigurationValue(ConfigurationUpdate updateData) {
-
-        try {
-            if (!ConfigurationRepository.lookup().isValidTenant(updateData.getTenant())) {
-                throw new RuntimeException("Invalid tenantId.");
-            }
-            if (!ConfigurationRepository.lookup().isValidNamespace(updateData.getNamespace())) {
-                throw new RuntimeException("Invalid Namespace.");
-            }
-        } catch (NullPointerException e1) {
-            e1.printStackTrace();
-        }
-
-        try {
-            boolean keyPresent = isKeyExists(updateData.getTenant(), updateData.getNamespace(), updateData.getKey());
-            if (keyPresent) {
-                boolean isUpdated = false;
-                Object[] paramArray =
-                        new Object[] {updateData.getTenant() + KEY_ELEMENTS_DELIMETER + updateData.getNamespace(),
-                                System.currentTimeMillis(), updateData.getKey(), getConfigurationValue(updateData),
-                                updateData.getValue()};
-                Configuration config = ConfigurationRepository.lookup()
-                                               .getConfigurationFor(updateData.getTenant(), updateData.getNamespace());
-                if (config instanceof AgglomerateConfiguration || config instanceof CombinedConfiguration) {
-                    CompositeConfiguration cc = new CompositeConfiguration();
-                    cc.addConfiguration(config);
-                    config = cc;
-                }
-                CompositeConfiguration configuration = (CompositeConfiguration) config;
-                int overrideIndex = -1;
-                for (int i = 0; i < configuration.getNumberOfConfigurations(); i++) {
-                    if (!updateData.isNodeOverride() && (
-                            configuration.getConfiguration(i) instanceof AgglomerateConfiguration
-                                    || configuration.getConfiguration(i) instanceof CombinedConfiguration)) {
-                        configuration.getConfiguration(i).setProperty(updateData.getKey(), updateData.getValue());
-                        isUpdated = true;
-                        break;
-                    } else if (updateData.isNodeOverride() && configuration.getConfiguration(
-                            i) instanceof FileBasedConfiguration) {
-                        configuration.getConfiguration(i).setProperty(updateData.getKey(), updateData.getValue());
-                        isUpdated = true;
-                        overrideIndex = i;
-                        break;
-                    }
-                }
-                if (!isUpdated) {
-                    if (updateData.isNodeOverride()) {
-                        PropertiesConfiguration pc = new PropertiesConfiguration();
-                        pc.setProperty(NAMESPACE_KEY,
-                                updateData.getTenant() + Constants.TENANT_NAMESPACE_SEPARATOR
-                                        + updateData.getNamespace());
-                        pc.setProperty(MODE_KEY, "OVERRIDE");
-                        pc.setProperty(updateData.getKey(), updateData.getValue());
-                        String nodeConfigLocation = System.getProperty("node.config.location");
-                        if (nodeConfigLocation != null && nodeConfigLocation.trim().length() > 0) {
-                            File file = new File(nodeConfigLocation,
-                                    updateData.getTenant() + File.separator + updateData.getNamespace() + File.separator
-                                            + "config.properties");
-                            file.getParentFile().mkdirs();
-                            PrintWriter out = new PrintWriter(file);
-                            pc.write(out);
-                            out.close();
-                            ConfigurationRepository.lookup().populateOverrideConfiguration(
-                                    updateData.getTenant() + KEY_ELEMENTS_DELIMETER + updateData.getNamespace(), file);
-                        }
-                    } else {
-                        configuration.getConfiguration(0).setProperty(updateData.getKey(), updateData.getValue());
-                    }
-                }
-                if (updateData.isNodeOverride()) {
-                    ConfigurationRepository.lookup().refreshOverrideConfigurationFor(
-                            updateData.getTenant() + KEY_ELEMENTS_DELIMETER + updateData.getNamespace(), overrideIndex);
-                }
-            }
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
-    private boolean isKeyExists(String tenant, String namespace, String key) {
-        boolean keyExist = false;
-        try {
-            keyExist = ConfigurationRepository.lookup().getConfigurationFor(tenant, namespace).containsKey(key);
-            if (!keyExist && !DEFAULT_TENANT.equals(tenant)) {
-                keyExist = ConfigurationRepository.lookup().getConfigurationFor(DEFAULT_TENANT, namespace)
-                                   .containsKey(key);
-            }
-            if (!keyExist && !DEFAULT_NAMESPACE.equals(namespace)) {
-                keyExist = ConfigurationRepository.lookup().getConfigurationFor(tenant, DEFAULT_NAMESPACE)
-                                   .containsKey(key);
-            }
-            if (!keyExist && !DEFAULT_TENANT.equals(tenant) && !DEFAULT_NAMESPACE.equals(namespace)) {
-                keyExist = ConfigurationRepository.lookup().getConfigurationFor(DEFAULT_TENANT, DEFAULT_NAMESPACE)
-                                   .containsKey(key);
-            }
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-        return keyExist;
-    }
-
     public Map<String, String> listConfiguration(Map<String, Object> input) {
         return listConfiguration((ConfigurationQuery) getInput(input));
     }
@@ -256,6 +118,7 @@ public final class CliConfigurationImpl extends ConfigurationImpl implements Con
     }
 
     private ArrayList<String> getInMemoryKeys(String tenant, String namespace) {
+
         ArrayList<String> keys = new ArrayList<>();
 
         try {
@@ -273,24 +136,6 @@ public final class CliConfigurationImpl extends ConfigurationImpl implements Con
         return keys;
     }
 
-    @Override
-    public boolean updateConfigurationValues(String tenant, String namespace, Map configKeyValueStore) {
-        boolean valueToReturn = true;
-        for (String s : (Iterable<String>) configKeyValueStore.keySet()) {
-            try {
-                String key = s;
-                ConfigurationUpdate updateData = new ConfigurationUpdate();
-                updateData.tenant(tenant).namespace(namespace).key(key);
-                updateData.value(configKeyValueStore.get(key).toString());
-                updateConfigurationValue(updateData);
-            } catch (Exception exception) {
-                exception.printStackTrace();
-                valueToReturn = false;
-            }
-        }
-        return valueToReturn;
-    }
-
     @Override
     public Collection<String> getTenants() {
         return ConfigurationRepository.lookup().getTenants();
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationChangeNotifier.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/impl/ConfigurationChangeNotifier.java
deleted file mode 100644 (file)
index cd6481f..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * 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.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.lang.reflect.Method;
-import java.nio.file.ClosedWatchServiceException;
-import java.nio.file.FileSystems;
-import java.nio.file.Path;
-import java.nio.file.StandardWatchEventKinds;
-import java.nio.file.WatchEvent;
-import java.nio.file.WatchKey;
-import java.nio.file.WatchService;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.Vector;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import javax.management.JMX;
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import org.onap.config.ConfigurationUtils;
-import org.onap.config.Constants;
-import org.onap.config.api.ConfigurationChangeListener;
-import org.onap.config.api.ConfigurationManager;
-import org.onap.config.api.Hint;
-
-
-public final class ConfigurationChangeNotifier {
-
-    static {
-        if (!Thread.currentThread().getStackTrace()[2].getClassName().equals(ConfigurationImpl.class.getName())) {
-            throw new RuntimeException("Illegal access.");
-        }
-    }
-
-    private final HashMap<String, List<NotificationData>> store = new HashMap<>();
-    private final ScheduledExecutorService executor =
-            Executors.newScheduledThreadPool(5, ConfigurationUtils.getThreadFactory());
-    private final ExecutorService notificationExecutor =
-            Executors.newCachedThreadPool(ConfigurationUtils.getThreadFactory());
-    private final Map<String, WatchService> watchServiceCollection = Collections.synchronizedMap(new HashMap<>());
-
-    public ConfigurationChangeNotifier(Map<String, AggregateConfiguration> inMemoryConfig) {
-        executor.scheduleWithFixedDelay(() -> this.pollFilesystemAndUpdateConfigurationIfRequired(inMemoryConfig,
-                System.getProperty("config.location"), false), 1, 1, TimeUnit.MILLISECONDS);
-        executor.scheduleWithFixedDelay(() -> this.pollFilesystemAndUpdateConfigurationIfRequired(inMemoryConfig,
-                System.getProperty("tenant.config.location"), true), 1, 1, TimeUnit.MILLISECONDS);
-        executor.scheduleWithFixedDelay(() -> this.pollFilesystemAndUpdateNodeSpecificConfigurationIfRequired(
-                System.getProperty("node.config.location")), 1, 1, TimeUnit.MILLISECONDS);
-    }
-
-    public void pollFilesystemAndUpdateConfigurationIfRequired(Map<String, AggregateConfiguration> inMemoryConfig,
-            String location, boolean isTenantLocation) {
-        try {
-            Set<Path> paths = watchForChange(location);
-            if (paths != null) {
-                for (Path path : paths) {
-                    File file = path.toAbsolutePath().toFile();
-                    String repositoryKey = null;
-                    if (ConfigurationUtils.isConfig(file) && file.isFile()) {
-                        if (isTenantLocation) {
-                            Collection<File> tenantsRoot =
-                                    ConfigurationUtils.getAllFiles(new File(location), false, true);
-                            for (File tenantRoot : tenantsRoot) {
-                                if (file.getAbsolutePath().startsWith(tenantRoot.getAbsolutePath())) {
-                                    repositoryKey = ConfigurationUtils.getConfigurationRepositoryKey(
-                                            (tenantRoot.getName() + Constants.TENANT_NAMESPACE_SEPARATOR
-                                                     + ConfigurationUtils.getNamespace(file))
-                                                    .split(Constants.TENANT_NAMESPACE_SEPARATOR));
-                                }
-                            }
-                        } else {
-                            repositoryKey = ConfigurationUtils.getConfigurationRepositoryKey(file);
-                        }
-                        AggregateConfiguration config = inMemoryConfig.get(repositoryKey);
-                        if (config != null) {
-                            LinkedHashMap origConfig = ConfigurationUtils.toMap(config.getFinalConfiguration());
-                            config.addConfig(file);
-                            LinkedHashMap latestConfig = ConfigurationUtils.toMap(config.getFinalConfiguration());
-                            Map map = ConfigurationUtils.diff(origConfig, latestConfig);
-                            String[] tenantNamespaceArray = repositoryKey.split(Constants.KEY_ELEMENTS_DELIMETER);
-                            updateConfigurationValues(tenantNamespaceArray[0], tenantNamespaceArray[1], map);
-                        }
-                    } else {
-                        for (String configKey : inMemoryConfig.keySet()) {
-                            repositoryKey = configKey;
-                            AggregateConfiguration config = inMemoryConfig.get(repositoryKey);
-                            if (config.containsConfig(file)) {
-                                LinkedHashMap origConfig = ConfigurationUtils.toMap(config.getFinalConfiguration());
-                                config.removeConfig(file);
-                                LinkedHashMap latestConfig = ConfigurationUtils.toMap(config.getFinalConfiguration());
-                                Map map = ConfigurationUtils.diff(origConfig, latestConfig);
-                                String[] tenantNamespaceArray = repositoryKey.split(Constants.KEY_ELEMENTS_DELIMETER);
-                                updateConfigurationValues(tenantNamespaceArray[0], tenantNamespaceArray[1], map);
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (ClosedWatchServiceException exception) {
-            // do nothing.
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
-    public void pollFilesystemAndUpdateNodeSpecificConfigurationIfRequired(String location) {
-        try {
-            Set<Path> paths = watchForChange(location);
-            if (paths != null) {
-                for (Path path : paths) {
-                    File file = path.toAbsolutePath().toFile();
-
-                    if (ConfigurationUtils.isConfig(file)) {
-                        String repositoryKey = ConfigurationUtils.getConfigurationRepositoryKey(file);
-                        ConfigurationRepository.lookup().populateOverrideConfiguration(repositoryKey, file);
-                    } else {
-                        ConfigurationRepository.lookup().removeOverrideConfiguration(file);
-                    }
-                }
-            }
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
-    private Set<Path> watchForChange(String location) throws Exception {
-        if (location == null || location.trim().length() == 0) {
-            return Collections.emptySet();
-        }
-        File file = new File(location);
-        if (!file.exists()) {
-            return Collections.emptySet();
-        }
-        Path path = file.toPath();
-        Set<Path> toReturn = new HashSet<>();
-        try (final WatchService watchService = FileSystems.getDefault().newWatchService()) {
-            watchServiceCollection.put(location, watchService);
-            path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE,
-                    StandardWatchEventKinds.ENTRY_DELETE);
-            for (File dir : ConfigurationUtils.getAllFiles(file, true, true)) {
-                dir.toPath().register(watchService, StandardWatchEventKinds.ENTRY_MODIFY,
-                        StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
-            }
-            while (true) {
-                final WatchKey wk = watchService.take();
-                Thread.sleep(ConfigurationRepository.lookup()
-                                     .getConfigurationFor(Constants.DEFAULT_TENANT, Constants.DB_NAMESPACE)
-                                     .getLong("event.fetch.delay"));
-                for (WatchEvent<?> event : wk.pollEvents()) {
-                    Object context = event.context();
-                    if (context instanceof Path) {
-                        File newFile = new File(((Path) wk.watchable()).toFile(), context.toString());
-                        if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
-                            if (newFile.isDirectory()) {
-                                newFile.toPath().register(watchService, StandardWatchEventKinds.ENTRY_MODIFY,
-                                        StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
-                                continue;
-                            }
-                        } else if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
-                            if (newFile.isDirectory()) {
-                                continue;
-                            }
-                        }
-                        toReturn.add(newFile.toPath());
-                    }
-                }
-                if (toReturn.isEmpty()) {
-                    continue;
-                }
-                break;
-            }
-        }
-        return toReturn;
-    }
-
-    private void updateConfigurationValues(String tenant, String namespace, Map map) throws Exception {
-        MBeanServerConnection mbsc = ManagementFactory.getPlatformMBeanServer();
-        ObjectName mbeanName = new ObjectName(Constants.MBEAN_NAME);
-        ConfigurationManager conf = JMX.newMBeanProxy(mbsc, mbeanName, ConfigurationManager.class, true);
-        conf.updateConfigurationValues(tenant, namespace, map);
-    }
-
-    public void shutdown() {
-        for (WatchService watch : watchServiceCollection.values()) {
-            try {
-                watch.close();
-            } catch (IOException exception) {
-                //do nothing
-            }
-        }
-        executor.shutdownNow();
-    }
-
-    public void notifyChangesTowards(String tenant, String component, String key, ConfigurationChangeListener myself)
-            throws Exception {
-        List<NotificationData> notificationList = store.get(tenant + Constants.KEY_ELEMENTS_DELIMETER + component);
-        if (notificationList == null) {
-            notificationList = Collections.synchronizedList(new ArrayList<>());
-            store.put(tenant + Constants.KEY_ELEMENTS_DELIMETER + component, notificationList);
-            executor.scheduleWithFixedDelay(
-                    () -> triggerScanning(tenant + Constants.KEY_ELEMENTS_DELIMETER + component), 1, 30000,
-                    TimeUnit.MILLISECONDS);
-        }
-        notificationList.add(new NotificationData(tenant, component, key, myself));
-    }
-
-    private void triggerScanning(String key) {
-        if (store.get(key) != null) {
-            notificationExecutor.submit(() -> scanForChanges(key));
-        } else {
-            throw new IllegalArgumentException("Notification service for " + key + " is suspended.");
-        }
-    }
-
-    private void scanForChanges(String key) {
-        List<NotificationData> list = store.get(key);
-        if (list != null) {
-            list.stream().filter(NotificationData::isChanged)
-                    .forEach(notificationData -> notificationExecutor.submit(() -> sendNotification(notificationData)));
-        }
-    }
-
-    private void sendNotification(NotificationData notificationData) {
-        try {
-            notificationData.dispatchNotification();
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
-    public void stopNotificationTowards(String tenant, String component, String key, ConfigurationChangeListener myself)
-            throws Exception {
-        List<NotificationData> notificationList = store.get(tenant + Constants.KEY_ELEMENTS_DELIMETER + component);
-        if (notificationList != null) {
-            boolean removed = notificationList.remove(new NotificationData(tenant, component, key, myself));
-            if (removed && notificationList.isEmpty()) {
-                store.remove(tenant + Constants.KEY_ELEMENTS_DELIMETER + component);
-            }
-        }
-
-    }
-
-    static class NotificationData {
-
-        final String tenant;
-
-        final String namespace;
-
-        final String key;
-
-        final ConfigurationChangeListener myself;
-
-        Object currentValue;
-
-        boolean isArray;
-
-        public NotificationData(String tenant, String component, String key, ConfigurationChangeListener myself)
-                throws Exception {
-            this.tenant = tenant;
-            this.namespace = component;
-            this.key = key;
-            this.myself = myself;
-            if (!ConfigurationRepository.lookup().getConfigurationFor(tenant, component).containsKey(key)) {
-                throw new RuntimeException("Key[" + key + "] not found.");
-            }
-            isArray = ConfigurationUtils.isArray(tenant, component, key, Hint.DEFAULT.value());
-            if (isArray) {
-                currentValue = ConfigurationManager.lookup().getAsStringValues(tenant, component, key);
-            } else {
-                currentValue = ConfigurationManager.lookup().getAsString(tenant, component, key);
-            }
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(tenant, namespace, key, myself, currentValue, isArray);
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (!(obj instanceof NotificationData)) {
-                return false;
-            }
-            NotificationData nd = (NotificationData) obj;
-            return Objects.equals(tenant, nd.tenant) && Objects.equals(namespace, nd.namespace) && Objects.equals(key,
-                    nd.key) && Objects.equals(myself, nd.myself) && Objects.equals(currentValue, nd.currentValue)
-                           // it's either String or List<String>
-                           && isArray == nd.isArray;
-        }
-
-        public boolean isChanged() {
-            Object latestValue;
-            try {
-                if (isArray) {
-                    latestValue = ConfigurationManager.lookup().getAsStringValues(tenant, namespace, key);
-                } else {
-                    latestValue = ConfigurationManager.lookup().getAsString(tenant, namespace, key);
-                }
-                if (!isArray) {
-                    return !currentValue.equals(latestValue);
-                } else {
-                    Collection<String> oldCollection = (Collection<String>) currentValue;
-                    Collection<String> newCollection = (Collection<String>) latestValue;
-                    for (String val : oldCollection) {
-                        if (!newCollection.remove(val)) {
-                            return true;
-                        }
-                    }
-                    return !newCollection.isEmpty();
-                }
-            } catch (Exception exception) {
-                return false;
-            }
-        }
-
-        public void dispatchNotification() throws Exception {
-            Method method = null;
-            Vector<Object> parameters = null;
-            try {
-                Object latestValue;
-                if (isArray) {
-                    latestValue = ConfigurationManager.lookup().getAsStringValues(tenant, namespace, key);
-                } else {
-                    latestValue = ConfigurationManager.lookup().getAsString(tenant, namespace, key);
-                }
-                Method[] methods = myself.getClass().getDeclaredMethods();
-                if (methods != null && methods.length > 0) {
-                    method = methods[0];
-                    int paramCount = method.getParameterCount();
-                    parameters = new Vector<>();
-                    if (paramCount > 4) {
-                        if (tenant.equals(Constants.DEFAULT_TENANT)) {
-                            parameters.add(null);
-                        } else {
-                            parameters.add(tenant);
-                        }
-                    }
-                    if (paramCount > 3) {
-                        if (namespace.equals(Constants.DEFAULT_NAMESPACE)) {
-                            parameters.add(null);
-                        } else {
-                            parameters.add(namespace);
-                        }
-                    }
-                    parameters.add(key);
-                    parameters.add(currentValue);
-                    parameters.add(latestValue);
-                    method.setAccessible(true);
-                }
-            } catch (Exception exception) {
-                exception.printStackTrace();
-            } finally {
-                isArray = ConfigurationUtils.isArray(tenant, namespace, key, Hint.DEFAULT.value());
-                if (isArray) {
-                    currentValue = ConfigurationManager.lookup().getAsStringValues(tenant, namespace, key);
-                } else {
-                    currentValue = ConfigurationManager.lookup().getAsString(tenant, namespace, key);
-                }
-                if (method != null && parameters != null) {
-                    method.invoke(myself, parameters.toArray());
-                }
-            }
-        }
-    }
-}
index 58720fc..af5ae04 100644 (file)
@@ -34,7 +34,6 @@ import org.onap.config.ConfigurationUtils;
 import org.onap.config.Constants;
 import org.onap.config.NonConfigResource;
 import org.onap.config.api.Config;
-import org.onap.config.api.ConfigurationChangeListener;
 import org.onap.config.api.Hint;
 
 public class ConfigurationImpl implements org.onap.config.api.Configuration {
@@ -44,8 +43,6 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
 
     private static boolean instantiated = false;
 
-    ConfigurationChangeNotifier changeNotifier;
-
     public ConfigurationImpl() throws Exception {
         if (instantiated || !CliConfigurationImpl.class.isAssignableFrom(this.getClass())) {
             throw new RuntimeException("Illegal access to configuration.");
@@ -126,15 +123,14 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
             }
         }
         instantiated = true;
-        changeNotifier = new ConfigurationChangeNotifier(moduleConfigStore);
     }
 
     private void populateFinalConfigurationIncrementally(Map<String, AggregateConfiguration> configs) {
 
-        if (configs.get(Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMETER + Constants.DB_NAMESPACE) != null) {
+        if (configs.get(Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + Constants.DB_NAMESPACE) != null) {
             ConfigurationRepository.lookup().populateConfiguration(
-                    Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMETER + Constants.DB_NAMESPACE,
-                    configs.remove(Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMETER + Constants.DB_NAMESPACE)
+                    Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + Constants.DB_NAMESPACE,
+                    configs.remove(Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + Constants.DB_NAMESPACE)
                             .getFinalConfiguration());
         }
 
@@ -188,43 +184,6 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
         }
     }
 
-    @Override
-    public void addConfigurationChangeListener(String tenant, String namespace, String key,
-            ConfigurationChangeListener myself) {
-        tenant = ConfigurationRepository.lookup().isValidTenant(tenant) ? tenant.toUpperCase()
-                         : Constants.DEFAULT_TENANT;
-        namespace = ConfigurationRepository.lookup().isValidNamespace(namespace) ? namespace.toUpperCase()
-                            : Constants.DEFAULT_NAMESPACE;
-        if (key == null || key.trim().length() == 0) {
-            throw new IllegalArgumentException(KEY_CANNOT_BE_NULL);
-        }
-        if (myself == null) {
-            throw new IllegalArgumentException("ConfigurationChangeListener instance is null.");
-        }
-        try {
-            changeNotifier.notifyChangesTowards(tenant, namespace, key, myself);
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
-    @Override
-    public void removeConfigurationChangeListener(String tenant, String namespace, String key,
-            ConfigurationChangeListener myself) {
-        tenant = ConfigurationRepository.lookup().isValidTenant(tenant) ? tenant.toUpperCase()
-                         : Constants.DEFAULT_TENANT;
-        namespace = ConfigurationRepository.lookup().isValidNamespace(namespace) ? namespace.toUpperCase()
-                            : Constants.DEFAULT_NAMESPACE;
-        if (key == null || key.trim().length() == 0) {
-            throw new IllegalArgumentException(KEY_CANNOT_BE_NULL);
-        }
-        try {
-            changeNotifier.stopNotificationTowards(tenant, namespace, key, myself);
-        } catch (Exception exception) {
-            exception.printStackTrace();
-        }
-    }
-
     @Override
     public <T> Map<String, T> populateMap(String tenantId, String namespace, String key, Class<T> clazz) {
         if (tenantId == null || tenantId.trim().length() == 0) {
@@ -574,16 +533,4 @@ public class ConfigurationImpl implements org.onap.config.api.Configuration {
         }
         return collection;
     }
-
-    public void shutdown() {
-        if (changeNotifier != null) {
-            try {
-                changeNotifier.shutdown();
-            } catch (Exception exception) {
-                exception.printStackTrace();
-            }
-        }
-    }
-
-
 }
index 276dbe2..132043d 100644 (file)
@@ -19,9 +19,7 @@ package org.onap.config.impl;
 import java.io.File;
 import java.sql.Timestamp;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -38,16 +36,7 @@ import org.onap.config.Constants;
 
 public final class ConfigurationRepository {
 
-    private static final ConfigurationRepository repo;
-
-    private static final Set<String> validCallers = Collections.unmodifiableSet(new HashSet<>(
-            Arrays.asList(ConfigurationChangeNotifier.NotificationData.class.getName(),
-                    ConfigurationUtils.class.getName(), CliConfigurationImpl.class.getName(),
-                    ConfigurationChangeNotifier.class.getName(), ConfigurationImpl.class.getName())));
-
-    static {
-        repo = new ConfigurationRepository();
-    }
+    private static final ConfigurationRepository repo = new ConfigurationRepository();
 
     private final Set<String> tenants = new HashSet<>();
     private final Set<String> namespaces = new HashSet<>();
@@ -65,18 +54,12 @@ public final class ConfigurationRepository {
             };
 
     private ConfigurationRepository() {
-        if (repo != null) {
-            throw new RuntimeException("Illegal access to configuration.");
-        }
         tenants.add(Constants.DEFAULT_TENANT);
         namespaces.add(Constants.DEFAULT_NAMESPACE);
     }
 
     public static ConfigurationRepository lookup() {
-        if (validCallers.contains(Thread.currentThread().getStackTrace()[2].getClassName())) {
-            return repo;
-        }
-        return null;
+        return repo;
     }
 
     public Set<String> getTenants() {
@@ -98,22 +81,22 @@ public final class ConfigurationRepository {
 
     public Configuration getConfigurationFor(String tenant, String namespace) throws Exception {
         ConfigurationHolder config;
-        String module = tenant + Constants.KEY_ELEMENTS_DELIMETER + namespace;
+        String module = tenant + Constants.KEY_ELEMENTS_DELIMITER + namespace;
         config = store.get(module);
         if (config == null) {
             config = new ConfigurationHolder(new BasicConfigurationBuilder<>(AgglomerateConfiguration.class));
             store.put(module, config);
         }
-        return config.getConfiguration(tenant + Constants.KEY_ELEMENTS_DELIMETER + namespace);
+        return config.getConfiguration(tenant + Constants.KEY_ELEMENTS_DELIMITER + namespace);
     }
 
     public void populateConfiguration(String key, Configuration builder) {
         store.put(key, new ConfigurationHolder(builder));
-        populateTenantsNamespace(key, false);
+        populateTenantsNamespace(key);
     }
 
-    private void populateTenantsNamespace(String key, boolean sourcedFromDb) {
-        String[] array = key.split(Constants.KEY_ELEMENTS_DELIMETER);
+    private void populateTenantsNamespace(String key) {
+        String[] array = key.split(Constants.KEY_ELEMENTS_DELIMITER);
         if (!array[1].equalsIgnoreCase(Constants.DB_NAMESPACE)) {
             tenants.add(array[0]);
             namespaces.add(array[1]);
@@ -127,7 +110,7 @@ public final class ConfigurationRepository {
             store.put(key, holder);
         }
         holder.addOverrideConfiguration(file.getAbsolutePath(), ConfigurationUtils.getConfigurationBuilder(file, true));
-        populateTenantsNamespace(key, true);
+        populateTenantsNamespace(key);
     }
 
     public void refreshOverrideConfigurationFor(String key, int index) {
@@ -207,6 +190,7 @@ public final class ConfigurationRepository {
         }
 
         public Configuration getConfiguration(String namespace) throws Exception {
+
             if (config == null) {
                 config = builder.getConfiguration();
                 lastConfigurationBuildTime = new Timestamp(System.currentTimeMillis());
@@ -216,9 +200,11 @@ public final class ConfigurationRepository {
                                                     .getInt("config.refresh.interval")) {
                 lastConfigurationBuildTime = new Timestamp(System.currentTimeMillis());
             }
+
             if (composite == null && overrideConfiguration.size() != 0) {
                 composite = getEffectiveConfiguration(config, overrideConfiguration.values());
             }
+
             return overrideConfiguration.size() == 0 ? config : composite;
         }
     }
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/type/ConfigurationUpdate.java b/common/onap-common-configuration-management/onap-configuration-management-core/src/main/java/org/onap/config/type/ConfigurationUpdate.java
deleted file mode 100644 (file)
index f14b4ec..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.type;
-
-public class ConfigurationUpdate extends ConfigurationQuery {
-
-    private String value;
-    private boolean nodeOverride;
-
-    public ConfigurationUpdate value(String val) {
-        value = val;
-        return this;
-    }
-
-    public ConfigurationUpdate nodeOverride(boolean val) {
-        nodeOverride = val;
-        return this;
-    }
-
-    public String getValue() {
-        if (value != null && value.split(",").length > 1 && !value.matches("^\\[.*\\]$")) {
-            return "[" + value + "]";
-        }
-        return value;
-    }
-
-    public boolean isNodeOverride() {
-        return nodeOverride;
-    }
-
-}
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config-NS.properties b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config-NS.properties
deleted file mode 100644 (file)
index 87e98be..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-artifact.name.maxlength=14
-artifact.extension=pdf, zip, xml
-artifact.supportedEncryption=Base64
-artifact.supportedEncryption=MD5
-artifact.name.allowedChar=a-zA-Z
-artifact.name.allowedchar=a-zA-Z
-artifact.status=deleted
-artifact.status=Deleted
-artifact.persistLocation=/opt/spool, ${sys:user.home}/asdc
-artifact.jsonSchema=@GeneratorsList.json
-artifact.xmlSchema=@${env:PATH}/myschema.json
-artifact.consumerAPPC=${artifact.consumer}
-_config.namespace=UnregisterNotification
\ No newline at end of file
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.json b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.json
deleted file mode 100644 (file)
index 998bba0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-       "artifact": {
-               "name": {
-                       "minlength": "6"
-               },
-               "extension": "pdf,tgz,xls"
-       },
-       "_config": {
-               "mergeStrategy": "union",
-               "namespace": "UnregisterNotification"
-       }
-}
\ No newline at end of file
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.properties b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.properties
deleted file mode 100644 (file)
index 4daad19..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-maxCachedBufferSize=1024
-artifact.maxsize=1024
-artifact.name.maxlength=28
\ No newline at end of file
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.xml b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.xml
deleted file mode 100644 (file)
index 7f929af..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-       <artifact>
-               <name>
-                       <maxlength>28</maxlength>
-               </name>
-               <extension>gz,tgz</extension>
-               <supportedencryption>Base64</supportedencryption>
-               <status>deleted</status>
-               <mandatory>
-                       <name>true</name>
-               </mandatory>
-       </artifact>
-       <_config>
-               <namespace>UnregisterNotification</namespace>
-               <mergeStrategy>merge</mergeStrategy>
-       </_config>
-</configuration>
\ No newline at end of file
diff --git a/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.yaml b/common/onap-common-configuration-management/onap-configuration-management-core/src/test/resources/UnregisterNotification/config.yaml
deleted file mode 100644 (file)
index 1deb37a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
- artifact:
-  name:
-   allowedChar: "a-zA-Z_0-9"
-  encoded: true
-  consumer: "appc,catalog"
-  _config:
-   mergeStrategy: "override"
-   namespace: "UnregisterNotification"
\ No newline at end of file
index 10c7c20..d1441ef 100644 (file)
@@ -6,7 +6,6 @@
                        <allowedChar>a-zA-Z</allowedChar>
                        <allowedchar>a-zA-Z</allowedchar>
                </name>
-               <!-- <maxsize></maxsize> -->
                <extension>pdf</extension>
                <extension>zip,xml</extension>