valid api version 15/85415/6
authorluna <nil@vmware.com>
Tue, 16 Apr 2019 05:54:28 +0000 (13:54 +0800)
committerZlatko Murgoski <zlatko.murgoski@nokia.com>
Thu, 27 Jun 2019 15:41:01 +0000 (17:41 +0200)
Issue-ID: DCAEGEN2-897

Change-Id: I77f015dadb03159a1c2cf43cf6a8a782d7a2e27a
Signed-off-by: luna <nil@vmware.com>
pom.xml
src/main/java/org/onap/dcae/common/HeaderUtils.java [new file with mode: 0644]
src/main/java/org/onap/dcae/restapi/ApiException.java
src/main/java/org/onap/dcae/restapi/VesRestController.java
src/main/resources/api_version_config.json [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index 735f7a3..a6bbf33 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                        <artifactId>crypt-password</artifactId>\r
                        <version>1.0.0-SNAPSHOT</version>\r
                </dependency>\r
+        <dependency>\r
+            <groupId>org.onap.dcaegen2.services.sdk.standardization</groupId>\r
+            <artifactId>api-custom-header</artifactId>\r
+            <version>1.1.4</version>\r
+        </dependency>\r
        </dependencies>\r
        <repositories>\r
                <repository>\r
diff --git a/src/main/java/org/onap/dcae/common/HeaderUtils.java b/src/main/java/org/onap/dcae/common/HeaderUtils.java
new file mode 100644 (file)
index 0000000..a570309
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PROJECT
+ * ================================================================================
+ * Copyright (C) 2019 VMware, Inc. All rights reserved.
+ * Copyright (C) 2019 Nokia. All rights reserved.s
+ * ================================================================================
+ * 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 at
+ *
+ *      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=========================================================
+ */
+
+package org.onap.dcae.common;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author nil
+ */
+@Component
+public final class HeaderUtils {
+
+  public String getApiVerFilePath(String fileName) {
+    return Objects.requireNonNull(ClassLoader.getSystemClassLoader().getResource(fileName))
+        .getPath();
+  }
+
+  public String getRestApiIdentify(String uri) {
+    return isBatchRequest(uri) ? "eventListener_eventBatch" : "eventListener";
+  }
+
+  public Map<String, String> extractHeaders(HttpServletRequest request) {
+    return Collections.list(request.getHeaderNames()).stream()
+        .collect(Collectors.toMap(h -> h, request::getHeader));
+  }
+
+  public HttpHeaders fillHeaders(Map<String, String> headers) {
+    HttpHeaders httpHeaders = new HttpHeaders();
+    httpHeaders.setAll(headers);
+    return httpHeaders;
+  }
+
+  private boolean isBatchRequest(String request) {
+    return request.contains("eventBatch");
+  }
+}
index 53895ff..5867e52 100644 (file)
@@ -31,6 +31,7 @@ public enum ApiException {
     SCHEMA_VALIDATION_FAILED(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (JSON does not conform to schema)", 400),
     INVALID_CONTENT_TYPE(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request Content-Type)", 400),
     UNAUTHORIZED_USER(ExceptionType.POLICY_EXCEPTION, "POL2000", "Unauthorized user", 401),
+    INVALID_CUSTOM_HEADER(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request api version)", 400),
     NO_SERVER_RESOURCES(ExceptionType.SERVICE_EXCEPTION, "SVC1000", "No server resources (internal processing queue full)", 503);
 
     public final int httpStatusCode;
index b18eb7b..b07b58d 100644 (file)
@@ -36,6 +36,8 @@ import org.onap.dcae.ApplicationSettings;
 import org.onap.dcae.common.EventSender;
 import org.onap.dcae.common.VESLogger;
 import org.onap.dcae.common.EventUpdater;
+import org.onap.dcae.common.HeaderUtils;
+import org.onap.dcaegen2.services.sdk.standardization.header.CustomHeaderUtils;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -55,14 +57,16 @@ public class VesRestController {
     private final ApplicationSettings settings;
     private final Logger requestLogger;
     private EventSender eventSender;
+    private final HeaderUtils headerUtils;
 
     @Autowired
     VesRestController(ApplicationSettings settings,
-                      @Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger,
-                      @Qualifier("eventSender") EventSender eventSender) {
+        @Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger,
+        @Qualifier("eventSender") EventSender eventSender, HeaderUtils headerUtils) {
         this.settings = settings;
         this.requestLogger = incomingRequestsLogger;
         this.eventSender = eventSender;
+        this.headerUtils = headerUtils;
     }
 
     @PostMapping(value = {"/eventListener/{version}"}, consumes = "application/json")
@@ -83,19 +87,31 @@ public class VesRestController {
     }
 
     private ResponseEntity<String> process(String events, String version, HttpServletRequest request, String type) {
+        CustomHeaderUtils headerUtils = createHeaderUtils(version, request);
+        if(headerUtils.isOkCustomHeaders()){
+            JSONObject jsonObject = new JSONObject(events);
 
-        JSONObject jsonObject = new JSONObject(events);
+            EventValidator eventValidator = new EventValidator(settings);
+            Optional<ResponseEntity<String>> validationResult = eventValidator.validate(jsonObject, type, version);
 
-        EventValidator eventValidator = new EventValidator(settings);
-        Optional<ResponseEntity<String>> validationResult = eventValidator.validate(jsonObject, type, version);
-
-        if (validationResult.isPresent()){
-            return validationResult.get();
+            if (validationResult.isPresent()){
+                return validationResult.get();
+            }
+            JSONArray arrayOfEvents = new EventUpdater(settings).convert(jsonObject,version, generateUUID(version, request.getRequestURI(), jsonObject), type);
+            eventSender.send(arrayOfEvents);
+            // TODO call service and return status, replace CambriaClient, split event to single object and list of them
+            return accepted().headers(this.headerUtils.fillHeaders(headerUtils.getRspCustomHeader()))
+                .contentType(MediaType.APPLICATION_JSON).body("Accepted");
         }
-        JSONArray arrayOfEvents = new EventUpdater(settings).convert(jsonObject,version, generateUUID(version, request.getRequestURI(), jsonObject), type);
-        eventSender.send(arrayOfEvents);
-        // TODO call service and return status, replace CambriaClient, split event to single object and list of them
-        return accepted().contentType(MediaType.APPLICATION_JSON).body("Accepted");
+        return badRequest().body(String.format(ApiException.INVALID_CUSTOM_HEADER.toString()));
+    }
+
+    private CustomHeaderUtils createHeaderUtils(String version, HttpServletRequest request){
+        return  new CustomHeaderUtils(version.toLowerCase().replace("v", ""),
+            headerUtils.extractHeaders(request),
+            headerUtils.getApiVerFilePath("api_version_config.json"),
+            headerUtils.getRestApiIdentify(request.getRequestURI()));
+
     }
 
     private UUID generateUUID(String version, String uri, JSONObject jsonObject) {
diff --git a/src/main/resources/api_version_config.json b/src/main/resources/api_version_config.json
new file mode 100644 (file)
index 0000000..23f585f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "apiVersion": 
+  {
+    "eventListener": ["4.7.2","5.4.1","7.0.1"],
+    "eventListener_eventBatch": ["4.7.2","5.4.1","7.0.1"]
+  }
+}