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.sa.rest;
23 import java.util.UUID;
24 import javax.servlet.http.HttpServletRequest;
25 import org.onap.aai.cl.mdc.MdcContext;
26 import org.onap.aai.sa.searchdbabstraction.util.SearchDbConstants;
28 import org.springframework.http.HttpHeaders;
29 import org.springframework.http.HttpStatus;
33 public class ApiUtils {
35 public static final String SEARCH_AUTH_POLICY_NAME = "search";
36 public static final String URL_PREFIX = "services/search-data-service/v1/search";
39 POST, GET, PUT, DELETE
43 * This method uses the contents of the supplied HTTP headers and request
44 * structures to populate the MDC Context used for logging purposes.
46 * @param httpReq - HTTP request structure.
47 * @param headers - HTTP headers
49 // protected static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) {
51 // // Auto generate a transaction if we were not provided one.
52 // String transId = null;
53 // if (headers != null) {
54 // // transId = headers.getRequestHeaders().getFirst("X-TransactionId");
55 // transId = headers.getFirst("X-TransactionId");
57 // if ((transId == null) || (transId.equals(""))) {
58 // transId = UUID.randomUUID().toString();
62 // String fromIp = (httpReq != null) ? httpReq.getRemoteAddr() : "";
63 // String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : "";
65 // MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp);
68 protected static void initMdcContext ( HttpServletRequest httpReq, HttpHeaders headers) {
70 // Auto generate a transaction if we were not provided one.
71 String transId = null;
72 if (headers != null) {
73 // transId = headers.getRequestHeaders().getFirst("X-TransactionId");
74 transId = headers.getFirst("X-TransactionId");
76 if ((transId == null) || (transId.equals(""))) {
77 transId = UUID.randomUUID().toString();
82 String fromIp = (httpReq != null) ? httpReq.getRemoteHost () : "";
83 String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : "";
85 MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp);
88 protected static void clearMdcContext() {
92 public static String buildIndexUri(String index) {
94 return (URL_PREFIX + "/indexes/") + index;
97 public static String buildDocumentUri(String index, String documentId) {
99 return buildIndexUri(index) + "/documents/" + documentId;
102 public static boolean validateIndexUri(String uri) {
104 // If the URI starts with a leading '/' character, remove it.
105 uri = uri.startsWith("/") ? uri.substring(1) : uri;
107 // Now, tokenize the URI string.
108 String[] tokens = uri.split("/");
110 return (tokens.length == 6) && (tokens[4].equals("indexes"));
114 public static boolean validateDocumentUri(String uri, boolean requireId) {
116 // If the URI starts with a leading '/' character, remove it.
117 uri = uri.startsWith("/") ? uri.substring(1) : uri;
119 // Now, tokenize the URI string.
120 String[] tokens = uri.split("/");
123 return (tokens.length == 8) && (tokens[4].equals("indexes")
124 && (tokens[6].equals("documents")));
126 return ((tokens.length == 8) || (tokens.length == 7))
127 && (tokens[4].equals("indexes") && (tokens[6].equals("documents")));
131 public static String extractIndexFromUri(String uri) {
133 // If the URI starts with a leading '/' character, remove it.
134 uri = uri.startsWith("/") ? uri.substring(1) : uri;
136 // Now, tokenize the URI string.
137 String[] tokens = uri.split("/");
140 for (String token : tokens) {
141 if (token.equals("indexes")) {
142 if (i + 1 < tokens.length) {
143 return tokens[i + 1];
152 public static String extractIdFromUri(String uri) {
154 // If the URI starts with a leading '/' character, remove it.
155 uri = uri.startsWith("/") ? uri.substring(1) : uri;
157 // Now, tokenize the URI string.
158 String[] tokens = uri.split("/");
161 for (String token : tokens) {
162 if (token.equals("documents")) {
163 if (i + 1 < tokens.length) {
164 return tokens[i + 1];
173 public static String getHttpStatusString(int httpStatusCode) {
174 // Some of the status codes we use are still in draft state in the standards, and are not
175 // recognized in the javax library. We need to manually translate these to human-readable
177 String statusString = "Unknown";
178 HttpStatus status = null;
181 status = HttpStatus.valueOf ( httpStatusCode );
182 } catch (IllegalArgumentException e) {}
185 if (status == null) {
186 switch (httpStatusCode) {
188 statusString = "Multi Status";
193 statusString = status.getReasonPhrase ();