a24c0ddadd19c3d338dc6985dd7f79ef0f0bf94c
[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
17 package org.onap.ccsdk.cds.sdclistener.status;
18
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;
33
34 import java.util.Objects;
35
36 import static org.onap.sdc.utils.DistributionActionResultEnum.SUCCESS;
37
38 @Component
39 @ConfigurationProperties("listenerservice")
40 @ComponentScan("org.onap.ccsdk.cds.cdssdclistener.dto")
41 public class SdcListenerStatus {
42
43     private static final Logger LOGGER = LoggerFactory.getLogger(SdcListenerStatus.class);
44     private static final String COMPONENT_NAME = "cds";
45
46     @Value("${listenerservice.config.consumerId}")
47     private String consumerId;
48
49     @Autowired
50     private SdcListenerDto sdcListenerDto;
51
52
53     public enum NotificationType {
54         DOWNLOAD,
55         SDC_LISTENER_COMPONENT;
56     }
57
58     /**
59      * Send the component status back to SDC.
60      *
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)
66      */
67     public void sendResponseBackToSdc(String distributionID, DistributionStatusEnum status, String errorReason,
68                                       String url, NotificationType type) {
69         final IDistributionClient distributionClient = sdcListenerDto.getDistributionClient();
70
71         switch (type) {
72             case SDC_LISTENER_COMPONENT:
73                 IComponentDoneStatusMessage componentStatusMessage = buildStatusMessage(distributionID, status, url,
74                         COMPONENT_NAME);
75
76                 if (errorReason == null) {
77                     checkResponseStatusFromSdc(distributionClient.sendComponentDoneStatus(componentStatusMessage));
78                 } else {
79                     checkResponseStatusFromSdc(
80                             distributionClient.sendComponentDoneStatus(componentStatusMessage, errorReason));
81                 }
82                 break;
83
84             case DOWNLOAD:
85                 IDistributionStatusMessage downloadStatusMessage = buildStatusMessage(distributionID, status, url,
86                         null);
87
88                 if (errorReason == null) {
89                     checkResponseStatusFromSdc(distributionClient.sendDownloadStatus(downloadStatusMessage));
90                 } else {
91                     checkResponseStatusFromSdc(
92                             distributionClient.sendDownloadStatus(downloadStatusMessage, errorReason));
93                 }
94             default:
95                 break;
96         }
97     }
98
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);
108         }).create();
109     }
110
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());
115         } else {
116             LOGGER.info("SDC successfully received the response");
117         }
118     }
119
120 }