2 * Copyright © 2019 Bell Canada
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.ccsdk.cds.sdclistener.status;
19 import org.onap.ccsdk.cds.sdclistener.dto.SdcListenerDto;
20 import org.onap.ccsdk.cds.sdclistener.util.BuilderUtil;
21 import org.onap.sdc.api.IDistributionClient;
22 import org.onap.sdc.api.consumer.IComponentDoneStatusMessage;
23 import org.onap.sdc.api.consumer.IDistributionStatusMessage;
24 import org.onap.sdc.api.results.IDistributionClientResult;
25 import org.onap.sdc.utils.DistributionStatusEnum;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.springframework.beans.factory.annotation.Autowired;
29 import org.springframework.beans.factory.annotation.Value;
30 import org.springframework.boot.context.properties.ConfigurationProperties;
31 import org.springframework.context.annotation.ComponentScan;
32 import org.springframework.stereotype.Component;
34 import java.util.Objects;
36 import static org.onap.sdc.utils.DistributionActionResultEnum.SUCCESS;
39 @ConfigurationProperties("listenerservice")
40 @ComponentScan("org.onap.ccsdk.cds.cdssdclistener.dto")
41 public class SdcListenerStatus {
43 private static final Logger LOGGER = LoggerFactory.getLogger(SdcListenerStatus.class);
44 private static final String COMPONENT_NAME = "cds";
46 @Value("${listenerservice.config.consumerId}")
47 private String consumerId;
50 private SdcListenerDto sdcListenerDto;
53 public enum NotificationType {
55 SDC_LISTENER_COMPONENT;
59 * Send the component status back to SDC.
61 * @param distributionID SDC Distribution ID
62 * @param status Distribution status
63 * @param errorReason Reason of failure if present
64 * @param url Artifact URL
65 * @param type - NotificationType(Download or Component)
67 public void sendResponseBackToSdc(String distributionID, DistributionStatusEnum status, String errorReason,
68 String url, NotificationType type) {
69 final IDistributionClient distributionClient = sdcListenerDto.getDistributionClient();
72 case SDC_LISTENER_COMPONENT:
73 IComponentDoneStatusMessage componentStatusMessage = buildStatusMessage(distributionID, status, url,
76 if (errorReason == null) {
77 checkResponseStatusFromSdc(distributionClient.sendComponentDoneStatus(componentStatusMessage));
79 checkResponseStatusFromSdc(
80 distributionClient.sendComponentDoneStatus(componentStatusMessage, errorReason));
85 IDistributionStatusMessage downloadStatusMessage = buildStatusMessage(distributionID, status, url,
88 if (errorReason == null) {
89 checkResponseStatusFromSdc(distributionClient.sendDownloadStatus(downloadStatusMessage));
91 checkResponseStatusFromSdc(
92 distributionClient.sendDownloadStatus(downloadStatusMessage, errorReason));
99 private ComponentStatusMessage buildStatusMessage(String distributionId, DistributionStatusEnum status, String url,
100 String componentName) {
101 return new BuilderUtil<>(new ComponentStatusMessage()).build(builder -> {
102 builder.setDistributionID(distributionId);
103 builder.setStatus(status);
104 builder.setConsumerID(consumerId);
105 builder.setComponentName(componentName);
106 builder.setTimeStamp(System.currentTimeMillis());
107 builder.setArtifactUrl(url);
111 private void checkResponseStatusFromSdc(IDistributionClientResult result) {
112 if (!Objects.equals(result.getDistributionActionResult(), SUCCESS)) {
113 LOGGER.error("SDC failed to receive the response from cds-sdc listener due to {}",
114 result.getDistributionMessageResult());
116 LOGGER.info("SDC successfully received the response");