1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/*
* Copyright (C) 2019 Bell Canada. All rights reserved.
*
* NOTICE: All the intellectual and technical concepts contained herein are
* proprietary to Bell Canada and are protected by trade secret or copyright law.
* Unauthorized copying of this file, via any medium is strictly prohibited.
*/
package org.onap.ccsdk.cds.cdssdclistener;
import static org.onap.sdc.utils.DistributionActionResultEnum.SUCCESS;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.onap.ccsdk.cds.cdssdclistener.dto.CdsSdcListenerDto;
import org.onap.ccsdk.cds.cdssdclistener.service.ListenerServiceImpl;
import org.onap.sdc.api.IDistributionClient;
import org.onap.sdc.api.consumer.INotificationCallback;
import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.notification.INotificationData;
import org.onap.sdc.api.results.IDistributionClientDownloadResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
@ConfigurationProperties("listenerservice")
@Component
@ComponentScan("org.onap.ccsdk.cds.cdssdclistener.dto")
public class CdsSdcListenerNotificationCallback implements INotificationCallback {
@Autowired
private CdsSdcListenerDto cdsSdcListenerDto;
@Autowired
private ListenerServiceImpl listenerService;
@Value("${listenerservice.config.archivePath}")
private String pathToStoreArchives;
private static final Logger LOGGER = LoggerFactory.getLogger(CdsSdcListenerNotificationCallback.class);
@Override
public void activateCallback(INotificationData notificationData) {
LOGGER.info(notificationData.getDistributionID(), "The UUID generated by SDC {}");
processNotification(notificationData);
}
private void processNotification(INotificationData notificationData) {
final IDistributionClient distributionClient = cdsSdcListenerDto.getDistributionClient();
notificationData.getServiceArtifacts()
.forEach(artifactInfo -> downloadCsarArtifacts(artifactInfo, distributionClient));
}
/**
* Download the TOSCA CSAR artifact and process it.
*
* @param info - Artifact information
* @param distributionClient - SDC distribution client
*/
private void downloadCsarArtifacts(IArtifactInfo info, IDistributionClient distributionClient) {
final String url = info.getArtifactURL();
final String id = info.getArtifactUUID();
if (Objects.equals(info.getArtifactType(), CdsSdcListenerConfiguration.TOSCA_CSAR)) {
LOGGER.info("Trying to download the artifact from : {} and UUID is {} ", url, id);
// Download the artifact
IDistributionClientDownloadResult result = distributionClient.download(info);
if (!Objects.equals(result.getDistributionActionResult(), SUCCESS)) {
LOGGER.error("Failed to download the artifact from : {} due to {} ", url,
result.getDistributionActionResult());
} else {
LOGGER.info("Trying to write CSAR artifact to file with URL {} and UUID {}", url, id);
processCsarArtifact(result);
}
}
}
public void processCsarArtifact(IDistributionClientDownloadResult result) {
Path cbaArchivePath = Paths.get(pathToStoreArchives, "cba-archive");
Path csarArchivePath = Paths.get(pathToStoreArchives, "csar-archive");
// extract and store the CSAR archive into local disk.
listenerService.extractCsarAndStore(result, csarArchivePath.toString());
Optional<List<File>> csarFiles = listenerService.getFilesFromDisk(csarArchivePath);
if (csarFiles.isPresent()) {
//Extract CBA archive from CSAR package and and store it into CDS Database.
csarFiles.get()
.forEach(file -> listenerService.extractBluePrint(file.getAbsolutePath(), cbaArchivePath.toString()));
listenerService.saveBluePrintToCdsDatabase(cbaArchivePath);
} else {
LOGGER.error("The CSAR file is not present at this location {}", csarArchivePath);
}
}
}
|