2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.aai.sparky.search;
23 import java.util.Arrays;
24 import java.util.HashMap;
25 import java.util.List;
28 import javax.ws.rs.core.MediaType;
30 import org.onap.aai.cl.mdc.MdcContext;
31 import org.onap.aai.restclient.client.Headers;
32 import org.onap.aai.restclient.client.OperationResult;
33 import org.onap.aai.restclient.client.RestClient;
34 import org.onap.aai.sparky.dal.rest.RestClientFactory;
35 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
40 * The Class SearchServiceAdapter.
42 public class SearchServiceAdapter {
44 private static final String VALUE_QUERY = "query";
45 private static final String SUGGEST_QUERY = "suggest";
46 private static final String BULK_API = "bulk";
47 private static final String DOCUMENT_EDNPOINT = "documents";
48 private static final String SEARH_SERVICE_BULK_TEMPLATE =
49 "{\"create\":{\"metaData\":{\"url\":\"%s\"},\"document\":\"%s\"}}\n";
51 private static final String SEARH_SERVICE_SINGLE_ENTITY_TEMPLATE =
52 "{\"queries\":[{\"must\":{\"match\":{\"field\":\"_id\",\"value\":\"%s\"}}}]}\n";
54 private RestClient client;
55 private RestEndpointConfig endpointConfig;
56 private String serviceApiVersion;
57 private String appPartnerName = "";
59 private Map<String, List<String>> commonHeaders;
62 * Instantiates a new search adapter.
66 public SearchServiceAdapter(RestEndpointConfig endpointConfig, String serviceApiVersion)
69 client = RestClientFactory.buildClient(endpointConfig);
71 commonHeaders = new HashMap<String, List<String>>();
72 commonHeaders.put("Accept", Arrays.asList("application/json"));
73 commonHeaders.put(Headers.FROM_APP_ID, Arrays.asList(appPartnerName));
75 this.serviceApiVersion = serviceApiVersion;
76 this.endpointConfig = endpointConfig;
79 public String getAppPartnerName() {
80 return appPartnerName;
83 public void setAppPartnerName(String appPartnerName) {
84 this.appPartnerName = appPartnerName;
87 public String getServiceApiVersion() {
88 return serviceApiVersion;
91 public void setServiceApiVersion(String serviceApiVersion) {
92 this.serviceApiVersion = serviceApiVersion;
95 public RestEndpointConfig getEndpointConfig() {
96 return endpointConfig;
99 public void setEndpointConfig(RestEndpointConfig endpointConfig) {
100 this.endpointConfig = endpointConfig;
103 public OperationResult doPost(String url, String jsonPayload) {
104 OperationResult or = client.post(url, jsonPayload, getTxnHeader(),
105 MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);
106 return new OperationResult(or.getResultCode(), or.getResult());
110 public OperationResult doPost(String url, String jsonPayload, String acceptContentType) {
111 OperationResult or = client.post(url, jsonPayload, getTxnHeader(),
112 MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);
113 return new OperationResult(or.getResultCode(), or.getResult());
116 public OperationResult doGet(String url, String acceptContentType) {
117 OperationResult or = client.get(url, getTxnHeader(), MediaType.APPLICATION_JSON_TYPE);
118 return new OperationResult(or.getResultCode(), or.getResult());
121 public OperationResult doPut(String url, String payload, String acceptContentType) {
122 OperationResult or = client.put(url, payload, getTxnHeader(), MediaType.APPLICATION_JSON_TYPE,
123 MediaType.APPLICATION_JSON_TYPE);
124 return new OperationResult(or.getResultCode(), or.getResult());
127 public OperationResult doDelete(String url, String acceptContentType) {
129 OperationResult or = client.delete(url, getTxnHeader(), MediaType.APPLICATION_JSON_TYPE);
130 return new OperationResult(or.getResultCode(), or.getResult());
133 public OperationResult doBulkOperation(String url, String jsonPayload) {
135 OperationResult or = client.post(url, jsonPayload, getTxnHeader(),
136 MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);
137 return new OperationResult(or.getResultCode(), or.getResult());
140 public Map<String, List<String>> getTxnHeader() {
141 HashMap<String, List<String>> headers = new HashMap<String, List<String>>();
142 headers.putAll(this.commonHeaders);
143 headers.put("X-TransactionId", Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID)));
144 headers.put("X-FromAppId", Arrays.asList(MDC.get(MdcContext.MDC_PARTNER_NAME)));
148 public String buildBulkImportOperationRequest(String indexName, String id, String payload){
150 StringBuilder requestPayload = new StringBuilder(128);
151 String SearchTarget = buildSearchServiceDocUrl(indexName,id);
153 requestPayload.append(String.format(SEARH_SERVICE_BULK_TEMPLATE,SearchTarget,payload));
154 return requestPayload.toString();
158 * Get Full URL for search
162 * @return the full url
164 public String buildSearchServiceQueryUrl(String indexName) {
165 return buildSearchServiceUrlForApi(indexName, VALUE_QUERY);
169 * Get Full URL for search
173 * @return the full url
175 public String buildSuggestServiceQueryUrl(String indexName) {
176 return buildSearchServiceUrlForApi(indexName, SUGGEST_QUERY);
179 public String buildSearchServiceDocUrl(String indexName,String api) {
181 return String.format("https://%s:%s/services/search-data-service/%s/search/indexes/%s/%s/%s",
182 endpointConfig.getEndpointIpAddress(), endpointConfig.getEndpointServerPort(),
183 serviceApiVersion, indexName,DOCUMENT_EDNPOINT, api);
187 public String buildSearchServiceCreateDocApi(String indexName){
189 return String.format("https://%s:%s/services/search-data-service/%s/search/indexes/%s/%s",
190 endpointConfig.getEndpointIpAddress(), endpointConfig.getEndpointServerPort(),
191 serviceApiVersion, indexName,DOCUMENT_EDNPOINT );
194 public String buildSearchServiceUrlForApi(String indexName, String api) {
196 return String.format("https://%s:%s/services/search-data-service/%s/search/indexes/%s/%s",
197 endpointConfig.getEndpointIpAddress(), endpointConfig.getEndpointServerPort(),
198 serviceApiVersion, indexName, api);
201 public String buildSearchServiceBulkUrl() {
203 return String.format("https://%s:%s/services/search-data-service/%s/search/%s", endpointConfig.getEndpointIpAddress(),
204 endpointConfig.getEndpointServerPort(),serviceApiVersion,BULK_API);
207 public OperationResult retrieveEntityById(String entityId,String indexName) {
209 StringBuilder requestPayload = new StringBuilder(128);
210 requestPayload.append(String.format(SEARH_SERVICE_SINGLE_ENTITY_TEMPLATE,entityId));
211 String payload = requestPayload.toString();
212 String searchServiceUrl = buildSearchServiceQueryUrl(indexName);
214 return this.doPost(searchServiceUrl,payload);
217 public String buildSearchServiceCreateIndexUrl(String indexName) {
219 return String.format("https://%s:%s/services/search-data-service/%s/search/indexes/dynamic/%s", endpointConfig.getEndpointIpAddress(),
220 endpointConfig.getEndpointServerPort(),serviceApiVersion,indexName);