Initial search service commit
[aai/search-data-service.git] / src / main / java / org / openecomp / sa / rest / ApiUtils.java
diff --git a/src/main/java/org/openecomp/sa/rest/ApiUtils.java b/src/main/java/org/openecomp/sa/rest/ApiUtils.java
new file mode 100644 (file)
index 0000000..4c043d4
--- /dev/null
@@ -0,0 +1,180 @@
+/**
+ * ============LICENSE_START=======================================================
+ * Search Data Service
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License ati
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.sa.rest;
+
+import org.openecomp.cl.mdc.MdcContext;
+import org.openecomp.sa.searchdbabstraction.util.SearchDbConstants;
+import org.slf4j.MDC;
+
+import java.util.UUID;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+
+
+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
+  }
+
+  ;
+
+
+  /**
+   * 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();
+      }
+    }
+
+    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) {
+
+    // If the URI starts with a leading '/' character, remove it.
+    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+
+    // Now, tokenize the URI string.
+    String[] tokens = uri.split("/");
+
+    return (tokens.length == 6) && (tokens[4].equals("indexes"));
+
+  }
+
+  public static boolean validateDocumentUri(String uri, boolean requireId) {
+
+    // If the URI starts with a leading '/' character, remove it.
+    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+
+    // Now, tokenize the URI string.
+    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")));
+    }
+  }
+
+  public static String extractIndexFromUri(String uri) {
+
+    // If the URI starts with a leading '/' character, remove it.
+    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+
+    // Now, tokenize the URI string.
+    String[] tokens = uri.split("/");
+
+    int i = 0;
+    for (String token : tokens) {
+      if (token.equals("indexes")) {
+        if (i + 1 < tokens.length) {
+          return tokens[i + 1];
+        }
+      }
+      i++;
+    }
+
+    return null;
+  }
+
+  public static String extractIdFromUri(String uri) {
+
+    // If the URI starts with a leading '/' character, remove it.
+    uri = uri.startsWith("/") ? uri.substring(1) : uri;
+
+    // Now, tokenize the URI string.
+    String[] tokens = uri.split("/");
+
+    int i = 0;
+    for (String token : tokens) {
+      if (token.equals("documents")) {
+        if (i + 1 < tokens.length) {
+          return tokens[i + 1];
+        }
+      }
+      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();
+    }
+
+    return statusString;
+  }
+}