aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pom.xml5
-rw-r--r--src/main/java/org/onap/dcae/common/HeaderUtils.java61
-rw-r--r--src/main/java/org/onap/dcae/restapi/ApiException.java1
-rw-r--r--src/main/java/org/onap/dcae/restapi/VesRestController.java40
-rw-r--r--src/main/resources/api_version_config.json7
5 files changed, 102 insertions, 12 deletions
diff --git a/pom.xml b/pom.xml
index 735f7a39..a6bbf337 100644
--- a/pom.xml
+++ b/pom.xml
@@ -415,6 +415,11 @@
<artifactId>crypt-password</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.onap.dcaegen2.services.sdk.standardization</groupId>
+ <artifactId>api-custom-header</artifactId>
+ <version>1.1.4</version>
+ </dependency>
</dependencies>
<repositories>
<repository>
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
index 00000000..a5703091
--- /dev/null
+++ b/src/main/java/org/onap/dcae/common/HeaderUtils.java
@@ -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");
+ }
+}
diff --git a/src/main/java/org/onap/dcae/restapi/ApiException.java b/src/main/java/org/onap/dcae/restapi/ApiException.java
index 53895ffe..5867e52b 100644
--- a/src/main/java/org/onap/dcae/restapi/ApiException.java
+++ b/src/main/java/org/onap/dcae/restapi/ApiException.java
@@ -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;
diff --git a/src/main/java/org/onap/dcae/restapi/VesRestController.java b/src/main/java/org/onap/dcae/restapi/VesRestController.java
index b18eb7bc..b07b58df 100644
--- a/src/main/java/org/onap/dcae/restapi/VesRestController.java
+++ b/src/main/java/org/onap/dcae/restapi/VesRestController.java
@@ -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
index 00000000..23f585f9
--- /dev/null
+++ b/src/main/resources/api_version_config.json
@@ -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"]
+ }
+}