X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fsa%2Frest%2FApiUtils.java;h=f2405614eabbd6792062319d5670b1073605cc39;hb=ecd35f117eb0118f9cbd96fe132a1c359214bfc7;hp=fc464104ea83e6e33952d80860c051499b4cd93e;hpb=50becb8a60c614344c85cccb20830395283a4454;p=aai%2Fsearch-data-service.git diff --git a/src/main/java/org/onap/aai/sa/rest/ApiUtils.java b/src/main/java/org/onap/aai/sa/rest/ApiUtils.java index fc46410..f240561 100644 --- a/src/main/java/org/onap/aai/sa/rest/ApiUtils.java +++ b/src/main/java/org/onap/aai/sa/rest/ApiUtils.java @@ -1,9 +1,9 @@ -/** +/** * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017 Amdocs + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 Amdocs * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,162 +17,137 @@ * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. */ package org.onap.aai.sa.rest; -import org.onap.aai.sa.searchdbabstraction.util.SearchDbConstants; -import org.onap.aai.cl.mdc.MdcContext; -import org.slf4j.MDC; - +import com.google.common.base.Strings; import java.util.UUID; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; - +import javax.ws.rs.core.Response.Status.Family; +import org.onap.aai.cl.mdc.MdcContext; +import org.onap.aai.sa.searchdbabstraction.util.SearchDbConstants; +import org.slf4j.MDC; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +/** + * Spring Imports. + * + */ public class ApiUtils { - public static final String SEARCH_AUTH_POLICY_NAME = "search"; - public static final String URL_PREFIX = "services/search-data-service/v1/search"; - - public enum Action { - POST, GET, PUT, DELETE - } - - ; + public static final String URL_PREFIX = "services/search-data-service/v1/search"; + public static final String SEARCH_AUTH_POLICY_NAME = "search"; + private static final String URI_SEGMENT_INDEXES = "indexes"; + private static final String URI_SEGMENT_DOCUMENTS = "documents"; - /** - * This method uses the contents of the supplied HTTP headers and request - * structures to populate the MDC Context used for logging purposes. - * - * @param httpReq - HTTP request structure. - * @param headers - HTTP headers - */ - protected static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) { - - // Auto generate a transaction if we were not provided one. - String transId = null; - if (headers != null) { - transId = headers.getRequestHeaders().getFirst("X-TransactionId"); - - if ((transId == null) || (transId.equals(""))) { - transId = UUID.randomUUID().toString(); - } + public enum Action { + POST, + GET, + PUT, + DELETE } - String fromIp = (httpReq != null) ? httpReq.getRemoteAddr() : ""; - String fromApp = (headers != null) ? headers.getRequestHeaders().getFirst("X-FromAppId") : ""; - - MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp); - } - - - protected static void clearMdcContext() { - MDC.clear(); - } - - public static String buildIndexUri(String index) { - - return (URL_PREFIX + "/indexes/") + index; - } - - public static String buildDocumentUri(String index, String documentId) { - - return buildIndexUri(index) + "/documents/" + documentId; - } - - public static boolean validateIndexUri(String uri) { + /** + * This method uses the contents of the supplied HTTP headers and request structures to populate the MDC Context + * used for logging purposes. + * + * @param httpReq - HTTP request structure. + * @param headers - HTTP headers + */ + protected static void initMdcContext(HttpServletRequest httpReq, HttpHeaders headers) { + // Auto generate a transaction if we were not provided one. + String transId = null; + if (headers != null) { + transId = headers.getFirst("X-TransactionId"); + if (Strings.isNullOrEmpty(transId)) { + transId = UUID.randomUUID().toString(); + } + } - // If the URI starts with a leading '/' character, remove it. - uri = uri.startsWith("/") ? uri.substring(1) : uri; + String fromIp = (httpReq != null) ? httpReq.getRemoteHost() : ""; + String fromApp = (headers != null) ? headers.getFirst("X-FromAppId") : ""; - // Now, tokenize the URI string. - String[] tokens = uri.split("/"); + MdcContext.initialize(transId, SearchDbConstants.SDB_SERVICE_NAME, "", fromApp, fromIp); + } - return (tokens.length == 6) && (tokens[4].equals("indexes")); + protected static void clearMdcContext() { + MDC.clear(); + } - } + public static String buildIndexUri(String index) { + return (URL_PREFIX + "/indexes/") + index; + } - public static boolean validateDocumentUri(String uri, boolean requireId) { + public static String buildDocumentUri(String index, String documentId) { + return buildIndexUri(index) + "/documents/" + documentId; + } - // If the URI starts with a leading '/' character, remove it. - uri = uri.startsWith("/") ? uri.substring(1) : uri; + public static boolean validateIndexUri(String uri) { + uri = uri.startsWith("/") ? uri.substring(1) : uri; + String[] tokens = uri.split("/"); + return (tokens.length == 6) && (tokens[4].equals(URI_SEGMENT_INDEXES)); + } - // Now, tokenize the URI string. - String[] tokens = uri.split("/"); + public static boolean validateDocumentUri(String uri, boolean requireId) { + uri = uri.startsWith("/") ? uri.substring(1) : uri; + String[] tokens = uri.split("/"); - if (requireId) { - return (tokens.length == 8) && (tokens[4].equals("indexes") - && (tokens[6].equals("documents"))); - } else { - return ((tokens.length == 8) || (tokens.length == 7)) - && (tokens[4].equals("indexes") && (tokens[6].equals("documents"))); + if (requireId) { + return (tokens.length == 8) + && (tokens[4].equals(URI_SEGMENT_INDEXES) && (tokens[6].equals(URI_SEGMENT_DOCUMENTS))); + } else { + return ((tokens.length == 8) || (tokens.length == 7)) + && (tokens[4].equals(URI_SEGMENT_INDEXES) && (tokens[6].equals(URI_SEGMENT_DOCUMENTS))); + } } - } - - public static String extractIndexFromUri(String uri) { - // If the URI starts with a leading '/' character, remove it. - uri = uri.startsWith("/") ? uri.substring(1) : uri; + public static String extractIndexFromUri(String uri) { + uri = uri.startsWith("/") ? uri.substring(1) : uri; - // Now, tokenize the URI string. - String[] tokens = uri.split("/"); + String[] tokens = uri.split("/"); - int i = 0; - for (String token : tokens) { - if (token.equals("indexes")) { - if (i + 1 < tokens.length) { - return tokens[i + 1]; + int i = 0; + for (String token : tokens) { + if (token.equals(URI_SEGMENT_INDEXES) && i + 1 < tokens.length) { + return tokens[i + 1]; + } + i++; } - } - i++; + + return null; } - return null; - } + public static String extractIdFromUri(String uri) { + uri = uri.startsWith("/") ? uri.substring(1) : uri; - public static String extractIdFromUri(String uri) { + String[] tokens = uri.split("/"); - // If the URI starts with a leading '/' character, remove it. - uri = uri.startsWith("/") ? uri.substring(1) : uri; + int i = 0; + for (String token : tokens) { + if (token.equals(URI_SEGMENT_DOCUMENTS) && i + 1 < tokens.length) { + return tokens[i + 1]; + } + i++; + } - // Now, tokenize the URI string. - String[] tokens = uri.split("/"); + return null; + } - int i = 0; - for (String token : tokens) { - if (token.equals("documents")) { - if (i + 1 < tokens.length) { - return tokens[i + 1]; + public static String getHttpStatusString(int httpStatusCode) { + try { + return HttpStatus.valueOf(httpStatusCode).getReasonPhrase(); + } catch (IllegalArgumentException e) { + if (207 == httpStatusCode) { + return "Multi-Status"; + } else { + return "Unknown"; + } } - } - i++; } - return null; - } - - public static String getHttpStatusString(int httpStatusCode) { - // Some of the status codes we use are still in draft state in the standards, and are not - // recognized in the javax library. We need to manually translate these to human-readable - // strings. - String statusString = "Unknown"; - Response.Status status = Response.Status.fromStatusCode(httpStatusCode); - - if (status == null) { - switch (httpStatusCode) { - case 207: - statusString = "Multi Status"; - break; - default: - } - } else { - statusString = status.toString(); + public static boolean isSuccessStatusCode(int statusCode) { + return Family.familyOf(statusCode).equals(Family.SUCCESSFUL); } - - return statusString; - } }