aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java
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/reception/handling/sdc/SdcReceptionHandler.java
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/reception/handling/sdc/SdcReceptionHandler.java')
-rw-r--r--plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java128
1 files changed, 119 insertions, 9 deletions
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);
+ }
}