0b300c416d832cabe198ed0d772f9b48c2cf36e7
[so/adapters/so-cnf-adapter.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2021 Samsung Electronics Co. Ltd. All rights reserved.
6  * Modifications Copyright (C) 2021 Orange.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22
23 package org.onap.so.adapters.cnf.service.aai;
24
25 import org.apache.http.client.utils.URIBuilder;
26 import org.onap.so.adapters.cnf.model.aai.AaiRequest;
27 import org.onap.so.adapters.cnf.model.statuscheck.K8sRbInstanceGvk;
28 import org.onap.so.adapters.cnf.model.statuscheck.K8sRbInstanceResourceStatus;
29 import org.onap.so.adapters.cnf.model.statuscheck.K8sStatus;
30 import org.onap.so.adapters.cnf.model.statuscheck.K8sStatusMetadata;
31 import org.springframework.stereotype.Component;
32
33 import java.net.URISyntaxException;
34 import java.util.ArrayList;
35 import java.util.List;
36 import java.util.Map;
37
38 @Component
39 public class AaiResponseParser {
40
41     private final static String INSTANCE_ID = "k8splugin.io/rb-instance-id";
42
43     private final AaiIdGeneratorService aaiIdGeneratorService;
44
45     public AaiResponseParser(AaiIdGeneratorService aaiIdGeneratorService) {
46         this.aaiIdGeneratorService = aaiIdGeneratorService;
47     }
48
49     KubernetesResource parse(K8sRbInstanceResourceStatus status, AaiRequest aaiRequest) {
50         KubernetesResource result = new KubernetesResource();
51         K8sRbInstanceGvk gvk = status.getGvk();
52         K8sStatus k8sStatus = status.getStatus();
53         K8sStatusMetadata metadata = k8sStatus.getK8sStatusMetadata();
54         String id = aaiIdGeneratorService.generateId(status, aaiRequest);
55         result.setId(id);
56         result.setName(status.getName());
57         result.setGroup(gvk.getGroup());
58         result.setVersion(gvk.getVersion());
59         result.setKind(gvk.getKind());
60         result.setDataOwner("CnfAdapter");
61         result.setDataSource("K8sPlugin");
62         result.setDataSourceVersion(metadata.getResourceVersion());
63         if (metadata.getNamespace() != null)
64             result.setNamespace(metadata.getNamespace());
65         else
66             result.setNamespace("");
67         List<String> labels = parseLabels(metadata.getLabels());
68         result.setLabels(labels);
69         URIBuilder uriBuilder = new URIBuilder();
70         String selfLink;
71         try {
72             selfLink = uriBuilder
73                     .setScheme("http")
74                     .setHost("so-cnf-adapter")
75                     .setPort(8090)
76                     .setPath("/api/cnf-adapter/v1/instance/" + aaiRequest.getInstanceId() + "/query")
77                     .setParameter("ApiVersion", gvk.getVersion())
78                     .setParameter("Kind", gvk.getKind())
79                     .setParameter("Name", status.getName())
80                     .setParameter("Namespace", result.getNamespace())
81                     .build()
82                     .toString();
83         } catch (URISyntaxException e) {
84             throw new RuntimeException(e);
85         }
86         result.setSelflink(selfLink);
87         return result;
88     }
89
90     private List<String> parseLabels(Map<String, String> labels) {
91         List<String> result = new ArrayList<>();
92         labels.entrySet().stream()
93                 .filter(i -> i.getKey().equals(INSTANCE_ID))
94                 .findFirst()
95                 .ifPresent(i -> addLabelEntry(i, result));
96         labels.entrySet().stream()
97                 .filter(i -> !i.getKey().equals(INSTANCE_ID))
98                 .forEach(i -> addLabelEntry(i, result));
99         return result;
100     }
101
102     private void addLabelEntry(Map.Entry<String, String> label, List<String> labels) {
103         labels.add(label.getKey() + "=" + label.getValue());
104     }
105 }