X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fsa%2Frest%2FIndexApi.java;h=4add62c4816fe8a218034c68067176897f75aa82;hb=f637a36c9df966c341727910e30241b63cc49c06;hp=d43fa8bf426bb9660600e7c8de6e4b774ebac7f8;hpb=ce701746049abfd94a87b46e43f296faf32d6213;p=aai%2Fsearch-data-service.git diff --git a/src/main/java/org/onap/aai/sa/rest/IndexApi.java b/src/main/java/org/onap/aai/sa/rest/IndexApi.java index d43fa8b..4add62c 100644 --- a/src/main/java/org/onap/aai/sa/rest/IndexApi.java +++ b/src/main/java/org/onap/aai/sa/rest/IndexApi.java @@ -1,4 +1,4 @@ -/** +/** * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ @@ -21,34 +21,24 @@ package org.onap.aai.sa.rest; import com.fasterxml.jackson.databind.ObjectMapper; - -import org.onap.aai.sa.searchdbabstraction.elasticsearch.dao.DocumentStoreInterface; -import org.onap.aai.sa.searchdbabstraction.elasticsearch.exception.DocumentStoreOperationException; -import org.onap.aai.sa.searchdbabstraction.entity.OperationResult; -import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs; +import java.io.FileNotFoundException; +import java.io.IOException; +import javax.servlet.http.HttpServletRequest; import org.onap.aai.cl.api.LogFields; import org.onap.aai.cl.api.LogLine; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; -import org.onap.aai.sa.rest.DocumentFieldSchema; -import org.onap.aai.sa.rest.DocumentSchema; -import org.slf4j.MDC; - -import java.io.FileNotFoundException; -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; - -// Spring Imports +import org.onap.aai.sa.searchdbabstraction.elasticsearch.dao.DocumentStoreInterface; +import org.onap.aai.sa.searchdbabstraction.elasticsearch.exception.DocumentStoreOperationException; +import org.onap.aai.sa.searchdbabstraction.entity.OperationResult; +import org.onap.aai.sa.searchdbabstraction.logging.SearchDbMsgs; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.HttpStatus; -// import org.springframework.http.server.HttpServletRequest; - /** - * This class encapsulates the REST end points associated with manipulating - * indexes in the document store. + * This class encapsulates the REST end points associated with manipulating indexes in the document store. */ public class IndexApi { @@ -62,10 +52,8 @@ public class IndexApi { protected AnalysisConfiguration analysisConfig; // Set up the loggers. - private static Logger logger = LoggerFactory.getInstance() - .getLogger(IndexApi.class.getName()); - private static Logger auditLogger = LoggerFactory.getInstance() - .getAuditLogger(IndexApi.class.getName()); + private static Logger logger = LoggerFactory.getInstance().getLogger(IndexApi.class.getName()); + private static Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(IndexApi.class.getName()); public IndexApi(SearchServiceApi searchService) { @@ -89,23 +77,17 @@ public class IndexApi { /** - * Processes client requests to create a new index and document type in the - * document store. + * Processes client requests to create a new index and document type in the document store. * - * @param documentSchema - The contents of the request body which is expected - * to be a JSON structure which corresponds to the - * schema defined in document.schema.json + * @param documentSchema - The contents of the request body which is expected to be a JSON structure which + * corresponds to the schema defined in document.schema.json * @param index - The name of the index to create. * @return - A Standard REST response */ - public ResponseEntity processCreateIndex (String documentSchema, - HttpServletRequest request, - HttpHeaders headers, - String index, - DocumentStoreInterface documentStore) { + public ResponseEntity processCreateIndex(String documentSchema, HttpServletRequest request, + HttpHeaders headers, String index, DocumentStoreInterface documentStore) { int resultCode = 500; - String resultString = "Unexpected error"; // Initialize the MDC Context for logging purposes. ApiUtils.initMdcContext(request, headers); @@ -114,8 +96,8 @@ public class IndexApi { // any further. try { - if (!searchService.validateRequest(headers, request, - ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) { + if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST, + ApiUtils.SEARCH_AUTH_POLICY_NAME)) { logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure."); return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request); } @@ -135,8 +117,9 @@ public class IndexApi { return errorResponse(HttpStatus.valueOf(resultCode), "Missing payload", request); } - try { + String resultString; + try { // Marshal the supplied json string into a document schema object. ObjectMapper mapper = new ObjectMapper(); DocumentSchema schema = mapper.readValue(documentSchema, DocumentSchema.class); @@ -151,8 +134,7 @@ public class IndexApi { // create, so if we get back a 200 from the document store, // translate that int a 201. resultCode = (result.getResultCode() == 200) ? 201 : result.getResultCode(); - resultString = (result.getFailureCause() == null) - ? result.getResult() : result.getFailureCause(); + resultString = (result.getFailureCause() == null) ? result.getResult() : result.getFailureCause(); } catch (com.fasterxml.jackson.core.JsonParseException | com.fasterxml.jackson.databind.JsonMappingException e) { @@ -169,7 +151,8 @@ public class IndexApi { resultString = "IO Failure: " + e.getMessage(); } - ResponseEntity response = ResponseEntity.status(resultCode).contentType ( MediaType.APPLICATION_JSON ).body(resultString); + ResponseEntity response = + ResponseEntity.status(resultCode).contentType(MediaType.APPLICATION_JSON).body(resultString); // Log the result. @@ -181,11 +164,9 @@ public class IndexApi { // Generate our audit log. auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST, - new LogFields() - .setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode) - .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, - HttpStatus.valueOf(resultCode).toString()), - (request != null) ? request.getMethod().toString () : "Unknown", + new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, resultCode).setField( + LogLine.DefinedFields.RESPONSE_DESCRIPTION, HttpStatus.valueOf(resultCode).toString()), + (request != null) ? request.getMethod() : "Unknown", (request != null) ? request.getRequestURL ().toString () : "Unknown", (request != null) ? request.getRemoteHost () : "Unknown", Integer.toString(response.getStatusCodeValue ())); @@ -201,11 +182,10 @@ public class IndexApi { } /** - * This function accepts any JSON and will "blindly" write it to the - * document store. + * This function accepts any JSON and will "blindly" write it to the document store. * - * Note, eventually this "dynamic" flow should follow the same JSON-Schema - * validation procedure as the normal create index flow. + * Note, eventually this "dynamic" flow should follow the same JSON-Schema validation procedure as the normal create + * index flow. * * @param dynamicSchema - The JSON string that will be sent to the document store. * @param index - The name of the index to be created. @@ -217,7 +197,8 @@ public class IndexApi { ResponseEntity response = null; - ResponseEntity validationResponse = validateRequest(request, headers, index, SearchDbMsgs.INDEX_CREATE_FAILURE); + ResponseEntity validationResponse = + validateRequest(request, headers, index, SearchDbMsgs.INDEX_CREATE_FAILURE); if (validationResponse.getStatusCodeValue () != HttpStatus.OK.value ()) { @@ -235,27 +216,23 @@ public class IndexApi { } /** - * Processes a client request to remove an index from the document store. - * Note that this implicitly deletes all documents contained within that index. + * Processes a client request to remove an index from the document store. Note that this implicitly deletes all + * documents contained within that index. * * @param index - The index to be deleted. * @return - A standard REST response. */ - public ResponseEntity processDelete(String index, - HttpServletRequest request, - HttpHeaders headers, + public ResponseEntity processDelete(String index, HttpServletRequest request, HttpHeaders headers, DocumentStoreInterface documentStore) { // Initialize the MDC Context for logging purposes. ApiUtils.initMdcContext(request, headers); - // Set a default response in case something unexpected goes wrong. - ResponseEntity response = ResponseEntity.status ( HttpStatus.INTERNAL_SERVER_ERROR ).body ( "Unknown" ); + ResponseEntity response; // Validate that the request is correctly authenticated before going // any further. try { - if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) { logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Authentication failure."); @@ -263,35 +240,31 @@ public class IndexApi { } } catch (Exception e) { - logger.warn(SearchDbMsgs.INDEX_CREATE_FAILURE, index, "Unexpected authentication failure - cause: " + e.getMessage()); return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request); } - try { // Send the request to the document store. response = responseFromOperationResult(documentStore.deleteIndex(index)); - } catch (DocumentStoreOperationException e) { - response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType ( MediaType.APPLICATION_JSON ).body(e.getMessage()); + response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.APPLICATION_JSON) + .body(e.getMessage()); } // Log the result. if ((response.getStatusCodeValue() >= 200) && (response.getStatusCodeValue() < 300)) { logger.info(SearchDbMsgs.DELETED_INDEX, index); } else { - logger.warn(SearchDbMsgs.INDEX_DELETE_FAILURE, index, (String) response.getBody ()); + logger.warn(SearchDbMsgs.INDEX_DELETE_FAILURE, index, response.getBody()); } // Generate our audit log. auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST, - new LogFields() - .setField(LogLine.DefinedFields.RESPONSE_CODE, response.getStatusCodeValue()) - .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, - response.getStatusCode ().getReasonPhrase()), - (request != null) ? request.getMethod().toString () : "Unknown", + new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, response.getStatusCodeValue()).setField( + LogLine.DefinedFields.RESPONSE_DESCRIPTION, response.getStatusCode().getReasonPhrase()), + (request != null) ? request.getMethod() : "Unknown", (request != null) ? request.getRequestURL ().toString () : "Unknown", (request != null) ? request.getRemoteHost () : "Unknown", Integer.toString(response.getStatusCodeValue())); @@ -305,8 +278,8 @@ public class IndexApi { /** - * This method takes a JSON format document schema and produces a set of - * field mappings in the form that Elastic Search expects. + * This method takes a JSON format document schema and produces a set of field mappings in the form that Elastic + * Search expects. * * @param documentSchema - A document schema expressed as a JSON string. * @return - A JSON string expressing an Elastic Search mapping configuration. @@ -314,9 +287,7 @@ public class IndexApi { * @throws com.fasterxml.jackson.databind.JsonMappingException * @throws IOException */ - public String generateDocumentMappings(String documentSchema) - throws com.fasterxml.jackson.core.JsonParseException, - com.fasterxml.jackson.databind.JsonMappingException, IOException { + public String generateDocumentMappings(String documentSchema) throws IOException { // Unmarshal the json content into a document schema object. ObjectMapper mapper = new ObjectMapper(); @@ -343,8 +314,7 @@ public class IndexApi { // If the index field was specified, then append it. if (field.getSearchable() != null) { - sb.append(", \"index\": \"").append(field.getSearchable() - ? "analyzed" : "not_analyzed").append("\""); + sb.append(", \"index\": \"").append(field.getSearchable() ? "analyzed" : "not_analyzed").append("\""); } // If a search analyzer was specified, then append it. @@ -372,8 +342,7 @@ public class IndexApi { /** - * Converts an {@link OperationResult} to a standard REST {@link ResponseEntity} - * object. + * Converts an {@link OperationResult} to a standard REST {@link ResponseEntity} object. * * @param result - The {@link OperationResult} to be converted. * @return - The equivalent {@link ResponseEntity} object. @@ -381,12 +350,15 @@ public class IndexApi { public ResponseEntity responseFromOperationResult(OperationResult result) { if ((result.getResultCode() >= 200) && (result.getResultCode() < 300)) { - return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getResult()); + return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON) + .body(result.getResult()); } else { if (result.getFailureCause() != null) { - return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getFailureCause()); + return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON) + .body(result.getFailureCause()); } else { - return ResponseEntity.status(result.getResultCode()).contentType ( MediaType.APPLICATION_JSON ).body(result.getResult()); + return ResponseEntity.status(result.getResultCode()).contentType(MediaType.APPLICATION_JSON) + .body(result.getResult()); } } } @@ -395,13 +367,11 @@ public class IndexApi { // Generate our audit log. auditLogger.info(SearchDbMsgs.PROCESS_REST_REQUEST, - new LogFields() - .setField(LogLine.DefinedFields.RESPONSE_CODE, status.value ()) + new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, status.value()) .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, status.getReasonPhrase()), - (request != null) ? request.getMethod().toString () : "Unknown", + (request != null) ? request.getMethod() : "Unknown", (request != null) ? request.getRequestURL ().toString () : "Unknown", - (request != null) ? request.getRemoteHost () : "Unknown", - Integer.toString(status.value ())); + (request != null) ? request.getRemoteHost() : "Unknown", Integer.toString(status.value())); // Clear the MDC context so that no other transaction inadvertently // uses our transaction id. @@ -420,9 +390,11 @@ public class IndexApi { * @param failureMsgEnum - The logging message to be used upon validation failure. * @return A success or failure response */ - private ResponseEntity validateRequest(HttpServletRequest request, HttpHeaders headers, String index, SearchDbMsgs failureMsgEnum) { + private ResponseEntity validateRequest(HttpServletRequest request, HttpHeaders headers, String index, + SearchDbMsgs failureMsgEnum) { try { - if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST, ApiUtils.SEARCH_AUTH_POLICY_NAME)) { + if (!searchService.validateRequest(headers, request, ApiUtils.Action.POST, + ApiUtils.SEARCH_AUTH_POLICY_NAME)) { logger.warn(failureMsgEnum, index, "Authentication failure."); return errorResponse(HttpStatus.FORBIDDEN, "Authentication failure.", request); }