Fixed the CLM Issues
[holmes/common.git] / holmes-actions / src / main / java / org / onap / holmes / common / aai / AaiResponseUtil.java
1 /**
2  * Copyright 2017-2020 ZTE Corporation.
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.holmes.common.aai;
17
18 import com.google.gson.JsonArray;
19 import com.google.gson.JsonObject;
20 import com.google.gson.JsonParser;
21 import org.jvnet.hk2.annotations.Service;
22 import org.onap.holmes.common.aai.entity.RelationshipList;
23 import org.onap.holmes.common.aai.entity.RelationshipList.RelatedToProperty;
24 import org.onap.holmes.common.aai.entity.RelationshipList.Relationship;
25 import org.onap.holmes.common.aai.entity.RelationshipList.RelationshipData;
26 import org.onap.holmes.common.aai.entity.VmEntity;
27 import org.onap.holmes.common.aai.entity.VmResourceLink;
28 import org.onap.holmes.common.aai.entity.VnfEntity;
29
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
33
34 @Service
35 public class AaiResponseUtil {
36
37     public static final String RELATIONSHIP_LIST = "relationship-list";
38
39     public List<VmResourceLink> convertJsonToVmResourceLink(String responseJson)
40             {
41         List<VmResourceLink> vmResourceLinkList = new ArrayList<>();
42         String resultDataKey = "result-data";
43                 JsonObject jsonNode = JsonParser.parseString(responseJson).getAsJsonObject();
44         if (jsonNode != null && jsonNode.get(resultDataKey) != null) {
45             JsonArray resultData = jsonNode.getAsJsonArray(resultDataKey);
46             vmResourceLinkList = convertResultDataList(resultData);
47         }
48         return vmResourceLinkList;
49     }
50
51     public VmEntity convertJsonToVmEntity(String responseJson) {
52         JsonObject jsonObject = JsonParser.parseString(responseJson).getAsJsonObject();
53         if (jsonObject == null ||jsonObject.size() == 0) {
54             return null;
55         }
56         VmEntity vmEntity = new VmEntity();
57         vmEntity.setInMaint(getBooleanElementByNode(jsonObject, "in-maint"));
58         vmEntity.setClosedLoopDisable(
59                 getBooleanElementByNode(jsonObject, "is-closed-loop-disabled"));
60         vmEntity.setProvStatus(getTextElementByNode(jsonObject, "prov-status"));
61         vmEntity.setResourceVersion(getTextElementByNode(jsonObject, "resource-version"));
62         vmEntity.setVserverId(getTextElementByNode(jsonObject, "vserver-id"));
63         vmEntity.setVserverName(getTextElementByNode(jsonObject, "vserver-name"));
64         vmEntity.setVserverName2(getTextElementByNode(jsonObject, "vserver-name2"));
65         vmEntity.setVserverSelflink(getTextElementByNode(jsonObject, "vserver-selflink"));
66
67         setRelationShips(jsonObject, vmEntity.getRelationshipList());
68         if (vmEntity.getRelationshipList().getRelationships() == null) {
69             vmEntity.getRelationshipList().setRelationships(Collections.emptyList());
70         }
71         return vmEntity;
72     }
73
74     public VnfEntity convertJsonToVnfEntity(String responseJson) {
75         JsonObject jsonObject = JsonParser.parseString(responseJson).getAsJsonObject();
76
77         if (jsonObject.size() == 0) {
78             return null;
79         }
80
81         VnfEntity vnfEntity = new VnfEntity();
82         vnfEntity.setInMaint(getBooleanElementByNode(jsonObject, "in-maint"));
83         vnfEntity.setClosedLoopDisabled(
84                 getBooleanElementByNode(jsonObject, "is-closed-loop-disabled"));
85         vnfEntity.setOrchestrationStatus(getTextElementByNode(jsonObject, "orchestration-status"));
86         vnfEntity.setProvStatus(getTextElementByNode(jsonObject, "prov-status"));
87         vnfEntity.setResourceVersion(getTextElementByNode(jsonObject, "resource-version"));
88         vnfEntity.setServiceId(getTextElementByNode(jsonObject, "service-id"));
89         vnfEntity.setVnfId(getTextElementByNode(jsonObject, "vnf-id"));
90         vnfEntity.setVnfName(getTextElementByNode(jsonObject, "vnf-name"));
91         vnfEntity.setVnfType(getTextElementByNode(jsonObject, "vnf-type"));
92
93         setRelationShips(jsonObject, vnfEntity.getRelationshipList());
94         if (vnfEntity.getRelationshipList().getRelationships() == null) {
95             vnfEntity.getRelationshipList().setRelationships(Collections.emptyList());
96         }
97         return vnfEntity;
98     }
99
100     private void setRelationShips(JsonObject jsonObject, RelationshipList relationshipList) {
101         if (jsonObject.get(RELATIONSHIP_LIST) != null) {
102             JsonObject relationshipListNode = jsonObject.getAsJsonObject(RELATIONSHIP_LIST);
103             String relationship = "relationship";
104             if (relationshipListNode.get(relationship) != null) {
105                 JsonArray relationshipNode = relationshipListNode.getAsJsonArray(relationship);
106                 relationshipList
107                         .setRelationships(convertRelationships(relationshipNode));
108             }
109         }
110     }
111
112     private List<VmResourceLink> convertResultDataList(JsonArray resultData) {
113         List<VmResourceLink> vmResourceLinkList = new ArrayList<>();
114         String resourceLink = "resource-link";
115         String resourceType = "resource-type";
116         for (int i = 0; i < resultData.size(); i++) {
117             JsonObject jsonObject = resultData.get(i).getAsJsonObject();
118             if (jsonObject.get(resourceLink) != null
119                     && jsonObject.get(resourceType) != null) {
120                 VmResourceLink vmResourceLink = new VmResourceLink();
121                 vmResourceLink.setResourceLink(getTextElementByNode(jsonObject, resourceLink));
122                 vmResourceLink.setResourceType(getTextElementByNode(jsonObject, resourceType));
123                 vmResourceLinkList.add(vmResourceLink);
124             }
125         }
126         return vmResourceLinkList;
127     }
128
129     private List<Relationship> convertRelationships(JsonArray relationshipNode) {
130         List<Relationship> relationshipList = new ArrayList<>();
131         for (int i = 0; i < relationshipNode.size(); i++) {
132             Relationship relationship = new Relationship();
133             JsonObject jsonObject = relationshipNode.get(i).getAsJsonObject();
134
135             relationship.setRelatedLink(getTextElementByNode(jsonObject, "related-link"));
136             relationship.setRelatedTo(getTextElementByNode(jsonObject, "related-to"));
137             if (jsonObject.get("related-to-property") != null) {
138                 JsonArray relatedToPropertyNode = jsonObject.getAsJsonArray("related-to-property");
139                 relationship.setRelatedToPropertyList(
140                         convertRelatedToProperty(relatedToPropertyNode));
141             } else {
142                 relationship.setRelatedToPropertyList(Collections.emptyList());
143             }
144             if (jsonObject.get("relationship-data") != null) {
145                 JsonArray relationshipDataNode = jsonObject.getAsJsonArray("relationship-data");
146                 relationship
147                         .setRelationshipDataList(convertRelationshipDate(relationshipDataNode));
148             } else {
149                 relationship.setRelationshipDataList(Collections.emptyList());
150             }
151             relationshipList.add(relationship);
152         }
153
154         return relationshipList;
155     }
156
157     private List<RelationshipData> convertRelationshipDate(JsonArray relationshipDataNode) {
158         List<RelationshipData> relationshipDataList = new ArrayList<>();
159         for (int i = 0; i < relationshipDataNode.size(); i++) {
160             JsonObject jsonObject = relationshipDataNode.get(i).getAsJsonObject();
161             RelationshipData relationshipData = new RelationshipData();
162             relationshipData.setRelationshipKey(
163                     getTextElementByNode(jsonObject, "relationship-key"));
164             relationshipData.setRelationshipValue(
165                     getTextElementByNode(jsonObject, "relationship-value"));
166             relationshipDataList.add(relationshipData);
167             relationshipDataList.add(relationshipData);
168
169         }
170         return relationshipDataList;
171     }
172
173     private List<RelatedToProperty> convertRelatedToProperty(JsonArray relatedToPropertyNode) {
174         List<RelatedToProperty> relatedToPropertyList = new ArrayList<>();
175         for (int i = 0; i < relatedToPropertyNode.size(); i++) {
176             JsonObject jsonObject = relatedToPropertyNode.get(i).getAsJsonObject();
177             RelatedToProperty relatedToProperty = new RelatedToProperty();
178             relatedToProperty
179                     .setPropertyKey(getTextElementByNode(jsonObject, "property-key"));
180             relatedToProperty.setPropertyValue(
181                     getTextElementByNode(jsonObject, "property-value"));
182             relatedToPropertyList.add(relatedToProperty);
183         }
184         return relatedToPropertyList;
185     }
186
187     private String getTextElementByNode(JsonObject jsonNode, String name) {
188         if (jsonNode.get(name) != null) {
189             return jsonNode.get(name).getAsString();
190         }
191         return null;
192     }
193
194     private Boolean getBooleanElementByNode(JsonObject jsonNode, String name) {
195         if (jsonNode.get(name) != null) {
196             return jsonNode.get(name).getAsBoolean();
197         }
198         return null;
199     }
200 }