2 * ============LICENSE_START=======================================================
3 * org.onap.holmes.common.aai
4 * ================================================================================
5 * Copyright (C) 2018-2019 Huawei. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.holmes.common.aai;
23 import com.alibaba.fastjson.JSON;
24 import com.alibaba.fastjson.JSONArray;
25 import com.alibaba.fastjson.JSONObject;
26 import lombok.extern.slf4j.Slf4j;
27 import org.jvnet.hk2.annotations.Service;
28 import org.onap.holmes.common.aai.config.AaiConfig;
29 import org.onap.holmes.common.exception.CorrelationException;
31 import javax.ws.rs.core.MultivaluedHashMap;
32 import javax.ws.rs.core.MultivaluedMap;
33 import javax.ws.rs.core.Response;
34 import java.util.regex.Matcher;
35 import java.util.regex.Pattern;
37 import static org.onap.holmes.common.aai.AaiJsonParserUtil.extractJsonArray;
38 import static org.onap.holmes.common.aai.AaiJsonParserUtil.get;
39 import static org.onap.holmes.common.aai.AaiJsonParserUtil.getHostAddr;
40 import static org.onap.holmes.common.aai.AaiJsonParserUtil.getInfo;
41 import static org.onap.holmes.common.aai.AaiJsonParserUtil.getPath;
45 public class AaiQuery4Ccvpn2 {
47 private MultivaluedMap<String, Object> headers;
49 static public AaiQuery4Ccvpn2 newInstance() {
50 return new AaiQuery4Ccvpn2();
53 private AaiQuery4Ccvpn2() {
54 headers = new MultivaluedHashMap<>();
55 headers.add("X-TransactionId", AaiConfig.X_TRANSACTION_ID);
56 headers.add("X-FromAppId", AaiConfig.X_FROMAPP_ID);
57 headers.add("Authorization", AaiConfig.getAuthenticationCredentials());
58 headers.add("Accept", "application/json");
59 headers.add("Content-Type", "application/json");
62 private String getSiteVNFId(String siteService) throws CorrelationException {
63 Response response = get(getHostAddr(), AaiConfig.MsbConsts.AAI_SITE_RESOURCES_QUERY);
64 String resStr = response.readEntity(String.class);
65 JSONObject resObj = JSON.parseObject(resStr);
66 JSONArray siteResources = extractJsonArray(resObj, "site-resource");
67 if (siteResources != null) {
68 for (int i = 0; i < siteResources.size(); i++) {
69 final JSONObject object = siteResources.getJSONObject(i);
70 if (siteService.equals(object.getString("site-resource-name"))) {
71 JSONObject vnfInfo = getInfo(object.toJSONString(), "generic-vnf");
72 String vnfPath = vnfInfo.getString("related-link");
75 Pattern pattern = Pattern.compile("/aai/v\\d+/network/generic-vnfs/generic-vnf/(.+)");
76 Matcher matcher = pattern.matcher(vnfPath);
78 vnfId = matcher.group(1);
88 private JSONObject getServiceInstanceByVnfId(String vnfId) throws CorrelationException {
89 Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_SITE_VNF_QUERY,
91 String resStr = response.readEntity(String.class);
92 return getInfo(resStr, "service-instance");
95 public JSONObject getSiteServiceInstance(String siteService) throws CorrelationException {
96 String vnfId = getSiteVNFId(siteService);
100 JSONObject serviceInstanceInfo = getServiceInstanceByVnfId(vnfId);
101 String serviceInstancePath = serviceInstanceInfo.getString("related-link");
102 Response response = get(getHostAddr(), getPath(serviceInstancePath));
103 String res = response.readEntity(String.class);
104 JSONObject instance = JSON.parseObject(res);
105 String[] params = new String[2];
106 Pattern pattern = Pattern.compile("/aai/v\\d+/business/customers/customer/(.+)" +
107 "/service-subscriptions/service-subscription/(.+)" +
108 "/service-instances/service-instance/(.+)");
109 Matcher matcher = pattern.matcher(serviceInstancePath);
110 if (matcher.find()) {
111 params[0] = matcher.group(1);
112 params[1] = matcher.group(2);
114 instance.put("globalSubscriberId", params[0]);
115 instance.put("serviceType", params[1]);
116 instance.put("vnfId", vnfId);