Merge "Passing the updated topic parameters to policy-endpoints"
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroup.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroup.java
index f633b0e..eab9c12 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroup.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroup.java
@@ -56,22 +56,38 @@
@Override
public GroupValidationResult validate() {
GroupValidationResult result = super.validate();
- if (result.isValid() && (checkMissingMandatoryParams(topicSources)
- || checkMissingMandatoryParams(topicSinks))) {
- result.setResult(ValidationStatus.INVALID, "Mandatory parameters are missing. topic, servers "
- + "and topicCommInfrastructure must be specified.");
+ if (result.isValid()) {
+ StringBuilder errorMsg = new StringBuilder();
+ StringBuilder missingSourceParams = checkMissingMandatoryParams(topicSources);
+ if (missingSourceParams.length() > 0) {
+ errorMsg.append(missingSourceParams.append("missing in topicSources. "));
+ }
+ StringBuilder missingSinkParams = checkMissingMandatoryParams(topicSinks);
+ if (missingSinkParams.length() > 0) {
+ errorMsg.append(missingSinkParams.append("missing in topicSinks."));
+ }
+
+ if (errorMsg.length() > 0) {
+ errorMsg.insert(0, "Mandatory parameters are missing. ");
+ result.setResult(ValidationStatus.INVALID, errorMsg.toString());
+ }
}
return result;
}
- private boolean checkMissingMandatoryParams(List<TopicParameters> topicParametersList) {
+ private StringBuilder checkMissingMandatoryParams(List<TopicParameters> topicParametersList) {
+ StringBuilder missingParams = new StringBuilder();
for (TopicParameters topicParameters : topicParametersList) {
- if (StringUtils.isBlank(topicParameters.getTopic())
- || StringUtils.isBlank(topicParameters.getTopicCommInfrastructure())
- || topicParameters.getServers().isEmpty()) {
- return true;
+ if (StringUtils.isBlank(topicParameters.getTopic())) {
+ missingParams.append("topic, ");
+ }
+ if (StringUtils.isBlank(topicParameters.getTopicCommInfrastructure())) {
+ missingParams.append("topicCommInfrastructure, ");
+ }
+ if (null == topicParameters.getServers() || topicParameters.getServers().isEmpty()) {
+ missingParams.append("servers, ");
}
}
- return false;
+ return missingParams;
}
}
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/utils/ParameterUtils.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/utils/ParameterUtils.java
index cabfe58..5e93cfa 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/utils/ParameterUtils.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/utils/ParameterUtils.java
@@ -21,12 +21,19 @@
package org.onap.policy.common.endpoints.utils;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Properties;
-
+import org.apache.commons.lang3.StringUtils;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
import org.onap.policy.common.endpoints.parameters.TopicParameterGroup;
import org.onap.policy.common.endpoints.parameters.TopicParameters;
import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This is common utility class with utility methods for parameters.
@@ -36,6 +43,11 @@
public class ParameterUtils {
/**
+ * Logger.
+ */
+ private static final Logger logger = LoggerFactory.getLogger(ParameterUtils.class);
+
+ /**
* Private constructor used to prevent sub class instantiation.
*/
private ParameterUtils() {
@@ -56,12 +68,10 @@
// for each topicCommInfrastructure, there could be multiple topics (specified as comma separated string)
// for each such topics, there could be multiple servers (specified as comma separated string)
for (TopicParameters source : topicSources) {
- updateTopicProperties(topicProperties, "source", source.getTopicCommInfrastructure(), source.getTopic(),
- source.getServers());
+ updateTopicProperties(topicProperties, "source", source);
}
for (TopicParameters sink : topicSinks) {
- updateTopicProperties(topicProperties, "sink", sink.getTopicCommInfrastructure(), sink.getTopic(),
- sink.getServers());
+ updateTopicProperties(topicProperties, "sink", sink);
}
return topicProperties;
@@ -72,19 +82,45 @@
*
* @param topicProperties the topic properties object which is to be updated
* @param keyName either it is source or sink
- * @param topicCommInfra the infra such as dmaap, ueb or noop
- * @param topicName the topic
- * @param servers the list of server names for the topic
+ * @param topicParameters the topic parameters object
*/
- public static void updateTopicProperties(Properties topicProperties, String keyName, String topicCommInfra,
- String topicName, List<String> servers) {
+ public static void updateTopicProperties(Properties topicProperties, String keyName,
+ TopicParameters topicParameters) {
+ String topicCommInfra = topicParameters.getTopicCommInfrastructure();
+ String topicName = topicParameters.getTopic();
+ List<String> servers = topicParameters.getServers();
+
String propKey = topicCommInfra + "." + keyName + PolicyEndPointProperties.PROPERTY_TOPIC_TOPICS_SUFFIX;
if (topicProperties.containsKey(propKey)) {
topicProperties.setProperty(propKey, topicProperties.getProperty(propKey) + "," + topicName);
} else {
topicProperties.setProperty(propKey, topicName);
}
- topicProperties.setProperty(propKey + "." + topicName + PolicyEndPointProperties.PROPERTY_TOPIC_SERVERS_SUFFIX,
+ String propWithTopicKey = propKey + "." + topicName;
+ topicProperties.setProperty(propWithTopicKey + PolicyEndPointProperties.PROPERTY_TOPIC_SERVERS_SUFFIX,
String.join(",", servers));
+
+ Field[] fields = BusTopicParams.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.isSynthetic()) {
+ continue;
+ }
+ try {
+ Object parameter = new PropertyDescriptor(field.getName(), TopicParameters.class)
+ .getReadMethod().invoke(topicParameters);
+ if ((parameter instanceof String && StringUtils.isNotBlank(parameter.toString()))
+ || (parameter instanceof Number && ((Number) parameter).longValue() > 0)) {
+ topicProperties.setProperty(propWithTopicKey + "." + field.getName(), parameter.toString());
+ }
+ if (parameter instanceof Boolean && (Boolean) parameter) {
+ topicProperties.setProperty(propWithTopicKey + "." + field.getName(),
+ Boolean.toString((Boolean) parameter));
+ }
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
+ | IntrospectionException e) {
+ logger.error("Error while creating Properties object from TopicParameters for {}", field.getName(), e);
+ }
+ }
+
}
}
diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/CommonTestData.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/CommonTestData.java
index 346ac5d..e3f0878 100644
--- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/CommonTestData.java
+++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/CommonTestData.java
@@ -53,7 +53,7 @@
public static final String TOPIC_INFRA = "dmaap";
public static final String TOPIC_SERVER = "message-router";
- protected static final List<TopicParameters> TOPIC_PARAMS =
+ public static final List<TopicParameters> TOPIC_PARAMS =
Arrays.asList(getTopicParameters(TOPIC_NAME, TOPIC_INFRA, TOPIC_SERVER));
protected static final Coder coder = new StandardCoder();
diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroupTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroupTest.java
index e288009..f150736 100644
--- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroupTest.java
+++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/parameters/TopicParameterGroupTest.java
@@ -26,10 +26,12 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import java.lang.reflect.Method;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
import org.onap.policy.common.parameters.GroupValidationResult;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
@@ -123,12 +125,14 @@
*/
private boolean checkIfAllParamsNotEmpty(List<TopicParameters> topicParametersList) throws Exception {
for (TopicParameters topicParameters : topicParametersList) {
- for (Method m : topicParameters.getClass().getMethods()) {
- if (m.getName().startsWith("get") && m.getParameterTypes().length == 0) {
- final Object parameter = m.invoke(topicParameters);
+ Field[] fields = BusTopicParams.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (!field.isSynthetic()) {
+ Object parameter = new PropertyDescriptor(field.getName(), TopicParameters.class).getReadMethod()
+ .invoke(topicParameters);
if ((parameter instanceof String && StringUtils.isBlank(parameter.toString()))
|| (parameter instanceof Boolean && !(Boolean) parameter)
- || (parameter instanceof Number && ((Number)parameter).longValue() == 0)) {
+ || (parameter instanceof Number && ((Number) parameter).longValue() == 0)) {
return false;
}
}
diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/ParameterUtilsTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/ParameterUtilsTest.java
index 06c16e9..54a1460 100644
--- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/ParameterUtilsTest.java
+++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/utils/ParameterUtilsTest.java
@@ -23,12 +23,16 @@
package org.onap.policy.common.endpoints.utils;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
-import java.util.Arrays;
import java.util.Properties;
import org.junit.Test;
import org.onap.policy.common.endpoints.parameters.CommonTestData;
import org.onap.policy.common.endpoints.parameters.TopicParameterGroup;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
/**
* Class to perform unit test of {@link ParameterUtils}.
@@ -36,7 +40,11 @@
* @author Ajith Sreekumar (ajith.sreekumar@est.tech)
*/
public class ParameterUtilsTest {
+ private static final String SOURCE_TOPICS_POLICY_PDP_PAP1 = ".source.topics.POLICY-PDP-PAP1.";
+ private static final String SINK_TOPICS_POLICY_PDP_PAP1 = ".sink.topics.POLICY-PDP-PAP1.";
private static final String SERVERS = ".servers";
+ private static CommonTestData testData = new CommonTestData();
+ private static final Coder coder = new StandardCoder();
/**
* Test getTopicProperties from TopicParameterGroup.
@@ -60,17 +68,48 @@
@Test
public void testUpdateTopicProperties() {
Properties topicProperties = new Properties();
- ParameterUtils.updateTopicProperties(topicProperties, "source", CommonTestData.TOPIC_INFRA,
- CommonTestData.TOPIC_NAME, Arrays.asList(CommonTestData.TOPIC_SERVER));
+ ParameterUtils.updateTopicProperties(topicProperties, "source", CommonTestData.TOPIC_PARAMS.get(0));
assertEquals(CommonTestData.TOPIC_NAME,
topicProperties.getProperty(CommonTestData.TOPIC_INFRA + ".source.topics"));
assertEquals(CommonTestData.TOPIC_SERVER, topicProperties
.getProperty(CommonTestData.TOPIC_INFRA + ".source.topics." + CommonTestData.TOPIC_NAME + SERVERS));
- ParameterUtils.updateTopicProperties(topicProperties, "sink", CommonTestData.TOPIC_INFRA,
- CommonTestData.TOPIC_NAME, Arrays.asList(CommonTestData.TOPIC_SERVER));
+ ParameterUtils.updateTopicProperties(topicProperties, "sink", CommonTestData.TOPIC_PARAMS.get(0));
assertEquals(CommonTestData.TOPIC_NAME,
topicProperties.getProperty(CommonTestData.TOPIC_INFRA + ".sink.topics"));
assertEquals(CommonTestData.TOPIC_SERVER, topicProperties
.getProperty(CommonTestData.TOPIC_INFRA + ".sink.topics." + CommonTestData.TOPIC_NAME + SERVERS));
}
+
+ @Test
+ public void testGetTopicProperties_all_props() throws Exception {
+ String json = testData.getParameterGroupAsString(
+ "src/test/resources/org/onap/policy/common/endpoints/parameters/TopicParameters_all_params.json");
+ TopicParameterGroup topicParameterGroup = coder.decode(json, TopicParameterGroup.class);
+ final GroupValidationResult result = topicParameterGroup.validate();
+ assertNull(result.getResult());
+ assertTrue(result.isValid());
+ Properties topicProperties = ParameterUtils.getTopicProperties(topicParameterGroup);
+ assertEquals("true", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "managed"));
+ assertEquals("true", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SINK_TOPICS_POLICY_PDP_PAP1 + "managed"));
+ assertEquals("123", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "port"));
+ assertEquals("123", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SINK_TOPICS_POLICY_PDP_PAP1 + "port"));
+ assertEquals("my-api-key", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "apiKey"));
+ assertEquals("my-api-key", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SINK_TOPICS_POLICY_PDP_PAP1 + "apiKey"));
+ assertEquals("my-effective-topic", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "effectiveTopic"));
+ assertEquals("true", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "useHttps"));
+ assertEquals("username", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "userName"));
+ assertEquals("password", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "password"));
+ assertEquals("true", topicProperties.getProperty(
+ CommonTestData.TOPIC_INFRA + SOURCE_TOPICS_POLICY_PDP_PAP1 + "allowSelfSignedCerts"));
+ }
}