diff options
author | 2017-07-20 13:35:06 -0400 | |
---|---|---|
committer | 2017-07-20 13:36:12 -0400 | |
commit | 629c4dc6e90840f164af0091eb00c4bcf4033f83 (patch) | |
tree | 5ebf43f889dd95c0fc7eb7d91552f4790bec8b75 /src/main/java/org/openecomp/sa/rest | |
parent | 895cd72a962de1868151288d4df1510db5280fab (diff) |
Reject doc create requests if index does not exist
[AAI-62] Search Data Service should not implicitly create indexes on
document write...
Search Data Service will now explicitly block a document create or
update if the associated index does not already exist in the document
store.
Change-Id: Ie96364da754aa6a2cb554b06f62a7a647181bcce
Signed-off-by: gfraboni <gino.fraboni@amdocs.com>
Diffstat (limited to 'src/main/java/org/openecomp/sa/rest')
-rw-r--r-- | src/main/java/org/openecomp/sa/rest/DocumentApi.java | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/main/java/org/openecomp/sa/rest/DocumentApi.java b/src/main/java/org/openecomp/sa/rest/DocumentApi.java index e3c15a5..7e34d86 100644 --- a/src/main/java/org/openecomp/sa/rest/DocumentApi.java +++ b/src/main/java/org/openecomp/sa/rest/DocumentApi.java @@ -49,7 +49,8 @@ import javax.ws.rs.core.Response.Status; public class DocumentApi { private static final String REQUEST_HEADER_RESOURCE_VERSION = "If-Match"; private static final String RESPONSE_HEADER_RESOURCE_VERSION = "ETag"; - + private static final String REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION = "X-CreateIndex"; + protected SearchServiceApi searchService = null; private Logger logger = LoggerFactory.getInstance().getLogger(DocumentApi.class.getName()); @@ -92,7 +93,7 @@ public class DocumentApi { DocumentStoreDataEntityImpl document = new DocumentStoreDataEntityImpl(); document.setContent(content); - DocumentOperationResult result = documentStore.createDocument(index, document); + DocumentOperationResult result = documentStore.createDocument(index, document, implicitlyCreateIndex(headers)); String output = null; if (result.getResultCode() >= 200 && result.getResultCode() <= 299) { output = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(result.getDocument()); @@ -157,9 +158,9 @@ public class DocumentApi { DocumentOperationResult result = null; if (resourceVersion == null) { - result = documentStore.createDocument(index, document); + result = documentStore.createDocument(index, document, implicitlyCreateIndex(headers)); } else { - result = documentStore.updateDocument(index, document); + result = documentStore.updateDocument(index, document, implicitlyCreateIndex(headers)); } String output = null; @@ -463,6 +464,31 @@ public class DocumentApi { } } + + /** + * Checks the supplied HTTP headers to see if we should allow the underlying document + * store to implicitly create the index referenced in a document PUT or POST if it + * does not already exist in the data store. + * + * @param headers - The HTTP headers to examine. + * + * @return - true if the headers indicate that missing indices should be implicitly created, + * false otherwise. + */ + private boolean implicitlyCreateIndex(HttpHeaders headers) { + + boolean createIndexIfNotPresent = false; + String implicitIndexCreationHeader = + headers.getRequestHeaders().getFirst(REQUEST_HEADER_ALLOW_IMPLICIT_INDEX_CREATION); + + if( (implicitIndexCreationHeader != null) && (implicitIndexCreationHeader.equals("true")) ) { + createIndexIfNotPresent = true; + } + + return createIndexIfNotPresent; + } + + private String prepareOutput(ObjectMapper mapper, SearchOperationResult result) throws JsonProcessingException { StringBuffer output = new StringBuffer(); |