a8e60c29a13d4eedf4478fc8eee13b540e279b45
[ccsdk/cds.git] / ms / sdclistener / application / src / main / java / org / onap / ccsdk / cds / sdclistener / status / SdcListenerStatus.java
1 /*
2  * Copyright © 2019 Bell Canada
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.onap.ccsdk.cds.sdclistener.status;
17
18 import static org.onap.sdc.utils.DistributionActionResultEnum.SUCCESS;
19 import java.util.Objects;
20 import org.onap.ccsdk.cds.sdclistener.dto.SdcListenerDto;
21 import org.onap.ccsdk.cds.sdclistener.util.BuilderUtil;
22 import org.onap.sdc.api.IDistributionClient;
23 import org.onap.sdc.api.consumer.IComponentDoneStatusMessage;
24 import org.onap.sdc.api.consumer.IDistributionStatusMessage;
25 import org.onap.sdc.api.results.IDistributionClientResult;
26 import org.onap.sdc.utils.DistributionStatusEnum;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import org.springframework.beans.factory.annotation.Autowired;
30 import org.springframework.beans.factory.annotation.Value;
31 import org.springframework.boot.context.properties.ConfigurationProperties;
32 import org.springframework.context.annotation.ComponentScan;
33 import org.springframework.stereotype.Component;
34
35 @Component
36 @ConfigurationProperties("listenerservice")
37 @ComponentScan("org.onap.ccsdk.cds.cdssdclistener.dto")
38 public class SdcListenerStatus {
39
40     private static final Logger LOGGER = LoggerFactory.getLogger(SdcListenerStatus.class);
41     private static final String COMPONENT_NAME = "cds";
42
43     @Value("${listenerservice.config.consumerId}")
44     private String consumerId;
45
46     @Autowired
47     private SdcListenerDto sdcListenerDto;
48
49     public enum NotificationType {
50         DOWNLOAD, SDC_LISTENER_COMPONENT;
51     }
52
53     /**
54      * Send the component status back to SDC.
55      * @param distributionID SDC Distribution ID
56      * @param status Distribution status
57      * @param errorReason Reason of failure if present
58      * @param url Artifact URL
59      * @param type - NotificationType(Download or Component)
60      */
61     public void sendResponseBackToSdc(String distributionID, DistributionStatusEnum status, String errorReason,
62         String url, NotificationType type) {
63         final IDistributionClient distributionClient = sdcListenerDto.getDistributionClient();
64
65         switch (type) {
66             case SDC_LISTENER_COMPONENT:
67                 IComponentDoneStatusMessage componentStatusMessage = buildStatusMessage(distributionID, status, url,
68                     COMPONENT_NAME);
69
70                 if (errorReason == null) {
71                     checkResponseStatusFromSdc(distributionClient.sendComponentDoneStatus(componentStatusMessage));
72                 } else {
73                     checkResponseStatusFromSdc(
74                         distributionClient.sendComponentDoneStatus(componentStatusMessage, errorReason));
75                 }
76                 break;
77
78             case DOWNLOAD:
79                 IDistributionStatusMessage downloadStatusMessage = buildStatusMessage(distributionID, status, url,
80                     null);
81
82                 if (errorReason == null) {
83                     checkResponseStatusFromSdc(distributionClient.sendDownloadStatus(downloadStatusMessage));
84                 } else {
85                     checkResponseStatusFromSdc(
86                         distributionClient.sendDownloadStatus(downloadStatusMessage, errorReason));
87                 }
88             default:
89                 break;
90         }
91     }
92
93     private ComponentStatusMessage buildStatusMessage(String distributionId, DistributionStatusEnum status, String url,
94         String componentName) {
95         return new BuilderUtil<>(new ComponentStatusMessage()).build(builder -> {
96             builder.setDistributionID(distributionId);
97             builder.setStatus(status);
98             builder.setConsumerID(consumerId);
99             builder.setComponentName(componentName);
100             builder.setTimeStamp(System.currentTimeMillis());
101             builder.setArtifactUrl(url);
102         }).create();
103     }
104
105     private void checkResponseStatusFromSdc(IDistributionClientResult result) {
106         if (!Objects.equals(result.getDistributionActionResult(), SUCCESS)) {
107             LOGGER.error("SDC failed to receive the response from cds-sdc listener due to {}",
108                 result.getDistributionMessageResult());
109         } else {
110             LOGGER.info("SDC successfully received the response");
111         }
112     }
113 }