aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/reception-plugins/src/main/java/org/onap/policy/distribution
diff options
context:
space:
mode:
authorramverma <ram.krishna.verma@ericsson.com>2018-08-31 17:16:01 +0100
committerramverma <ram.krishna.verma@ericsson.com>2018-09-04 09:58:38 +0100
commitecc059f29f8da065356571ef00c6cad595e298b3 (patch)
treee69272c979178b1d8f17ce7ca0700dc25addd0a0 /plugins/reception-plugins/src/main/java/org/onap/policy/distribution
parente705197bb18af558fb7ea853b01e1297521763f2 (diff)
Adding code for managing life cycle of SDC Client
* Adding init/start/stop methods in SDCReceptionHandler for managing lifecycle of SDC Client. * Adding a handler status enum to hold all the possible status values. * Adding test cases to cover code changes fully. Change-Id: Ib6f370485ff330538bfada6030c592629ed3fd1c Issue-ID: POLICY-956 Signed-off-by: ramverma <ram.krishna.verma@ericsson.com>
Diffstat (limited to 'plugins/reception-plugins/src/main/java/org/onap/policy/distribution')
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java (renamed from plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/PssdConfiguration.java)19
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java45
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java128
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java49
4 files changed, 219 insertions, 22 deletions
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/PssdConfiguration.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java
index c5c877e1..945670b9 100644
--- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/PssdConfiguration.java
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java
@@ -22,31 +22,26 @@ package org.onap.policy.distribution.reception.handling.sdc;
import java.util.List;
-import org.onap.sdc.api.consumer.IConfiguration;
import org.onap.policy.distribution.reception.parameters.PssdConfigurationParametersGroup;
+import org.onap.sdc.api.consumer.IConfiguration;
/**
- * Properties for the handling Sdc
+ * This class represents the configurations needed for SDC Client.
*
*/
-public class PssdConfiguration implements IConfiguration {
+public class SdcConfiguration implements IConfiguration {
- // Configuration file structure
-
- // Configuration file properties
private PssdConfigurationParametersGroup configParameters = null;
/**
- * Original constructor
+ * Constructor for instantiating {@link SdcConfiguration}.
*
- * @param configParameters properties needed to be configured for the model loader
+ * @param configParameters the SDC Client configuration parameters
*/
- public PssdConfiguration(final PssdConfigurationParametersGroup configParameters) {
+ public SdcConfiguration(final PssdConfigurationParametersGroup configParameters) {
this.configParameters = configParameters;
-
}
-
@Override
public String getAsdcAddress() {
return configParameters.getAsdcAddress();
@@ -121,6 +116,4 @@ public class PssdConfiguration implements IConfiguration {
public Boolean isUseHttpsWithDmaap() {
return configParameters.isUseHttpsWithDmaap();
}
-
-
}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java
new file mode 100644
index 00000000..0ea57799
--- /dev/null
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcNotificationCallBack.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.distribution.reception.handling.sdc;
+
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.sdc.api.consumer.INotificationCallback;
+import org.onap.sdc.api.notification.INotificationData;
+
+/**
+ * Class to provide an implementation of INotificationCallback interface for receiving the incoming distribution
+ * notifications from SDC.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public class SdcNotificationCallBack implements INotificationCallback {
+
+ private static final Logger LOGGER = FlexLogger.getLogger(SdcNotificationCallBack.class);
+
+ @Override
+ public void activateCallback(final INotificationData notificationData) {
+
+ LOGGER.debug("Got the message from SDC:" + notificationData.getDistributionID());
+ // Code for handling notification will come here
+ }
+
+}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
index 494f47f6..60c94e2b 100644
--- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
@@ -5,40 +5,150 @@
* 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.
- *
+ *
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
package org.onap.policy.distribution.reception.handling.sdc;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.distribution.reception.decoding.PluginInitializationException;
+import org.onap.policy.distribution.reception.decoding.PluginTerminationException;
import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
+import org.onap.policy.distribution.reception.parameters.PssdConfigurationParametersGroup;
+import org.onap.sdc.api.IDistributionClient;
+import org.onap.sdc.api.results.IDistributionClientResult;
+import org.onap.sdc.impl.DistributionClientFactory;
+import org.onap.sdc.utils.DistributionActionResultEnum;
/**
- * Handles reception of inputs from ONAP Service Design and Creation (SDC) from which policies may
- * be decoded.
+ * Handles reception of inputs from ONAP Service Design and Creation (SDC) from which policies may be decoded.
*/
public class SdcReceptionHandler extends AbstractReceptionHandler {
+ private static final Logger LOGGER = FlexLogger.getLogger(SdcReceptionHandler.class);
+ private SdcReceptionHandlerStatus sdcReceptionHandlerStatus = SdcReceptionHandlerStatus.STOPPED;
+ private PssdConfigurationParametersGroup handlerParameters;
+ private IDistributionClient distributionClient;
+ private volatile int nbOfNotificationsOngoing = 0;
+
@Override
- protected void initializeReception(String parameterGroupName) {
- // Set up subscription to SDC
+ protected void initializeReception(final String parameterGroupName) throws PluginInitializationException {
+ handlerParameters = (PssdConfigurationParametersGroup) ParameterService.get(parameterGroupName);
+ initializeSdcClient();
+ startSdcClient();
}
// Add functionality for receiving SDC distibutions and invoking AbstractReceptionHandler
// inputReceived()
@Override
- public void destroy() {
- // Tear down subscription etc
+ public void destroy() throws PluginTerminationException {
+ LOGGER.debug("Going to stop the SDC Client...");
+ if (distributionClient != null) {
+ final IDistributionClientResult clientResult = distributionClient.stop();
+ if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
+ final String message =
+ "SDC client stop failed with reason:" + clientResult.getDistributionMessageResult();
+ LOGGER.error(message);
+ throw new PluginTerminationException(message);
+ }
+ }
+ changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.STOPPED);
+ LOGGER.debug("SDC Client is stopped successfully");
+ }
+
+ /**
+ * Method to change the status of this reception handler instance.
+ *
+ * @param newStatus the new status
+ */
+ protected synchronized final void changeSdcReceptionHandlerStatus(final SdcReceptionHandlerStatus newStatus) {
+ switch (newStatus) {
+ case INIT:
+ case STOPPED:
+ sdcReceptionHandlerStatus = newStatus;
+ break;
+ case IDLE:
+ if (nbOfNotificationsOngoing > 1) {
+ --nbOfNotificationsOngoing;
+ } else {
+ nbOfNotificationsOngoing = 0;
+ sdcReceptionHandlerStatus = newStatus;
+ }
+ break;
+ case BUSY:
+ ++nbOfNotificationsOngoing;
+ sdcReceptionHandlerStatus = newStatus;
+ break;
+ }
+ }
+
+ /**
+ * Creates an instance of {@link IDistributionClient} from {@link DistributionClientFactory}.
+ *
+ * @return the {@link IDistributionClient} instance
+ */
+ protected IDistributionClient createSdcDistributionClient() {
+ return DistributionClientFactory.createDistributionClient();
}
+ /**
+ * Method to initialize the SDC client.
+ *
+ * @throws PluginInitializationException if the initialization of SDC Client fails
+ */
+ private void initializeSdcClient() throws PluginInitializationException {
+
+ LOGGER.debug("Going to initialize the SDC Client...");
+ if (sdcReceptionHandlerStatus != SdcReceptionHandlerStatus.STOPPED) {
+ final String message = "The SDC Client is already initialized";
+ LOGGER.error(message);
+ throw new PluginInitializationException(message);
+ }
+ final SdcConfiguration sdcConfig = new SdcConfiguration(handlerParameters);
+ distributionClient = createSdcDistributionClient();
+ final IDistributionClientResult clientResult =
+ distributionClient.init(sdcConfig, new SdcNotificationCallBack());
+ if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
+ changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.STOPPED);
+ final String message =
+ "SDC client initialization failed with reason:" + clientResult.getDistributionMessageResult();
+ LOGGER.error(message);
+ throw new PluginInitializationException(message);
+ }
+ LOGGER.debug("SDC Client is initialized successfully");
+ this.changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.INIT);
+ }
+
+ /**
+ * Method to start the SDC client.
+ *
+ * @param configParameter the configuration parameters
+ * @throws PluginInitializationException if the start of SDC Client fails
+ */
+ private void startSdcClient() throws PluginInitializationException {
+
+ LOGGER.debug("Going to start the SDC Client...");
+ final IDistributionClientResult clientResult = distributionClient.start();
+ if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) {
+ changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.STOPPED);
+ final String message = "SDC client start failed with reason:" + clientResult.getDistributionMessageResult();
+ LOGGER.error(message);
+ throw new PluginInitializationException(message);
+ }
+ LOGGER.debug("SDC Client is started successfully");
+ this.changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.IDLE);
+ }
}
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java
new file mode 100644
index 00000000..d0e04c78
--- /dev/null
+++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.distribution.reception.handling.sdc;
+
+/**
+ * Class to hold the possible values for status of {@link SdcReceptionHandler}.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public enum SdcReceptionHandlerStatus {
+
+ /**
+ * The SdcReceptionHandler is not alive.
+ */
+ STOPPED,
+
+ /**
+ * The SdcReceptionHandler is initialized but not started yet.
+ */
+ INIT,
+
+ /**
+ * The SdcReceptionHandler is initialized, started & ready to handle incoming notifications.
+ */
+ IDLE,
+
+ /**
+ * The SdcReceptionHandler is currently busy in handling notifications.
+ */
+ BUSY
+}