summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/crud/event/response
diff options
context:
space:
mode:
authorMichael Arrastia <MArrasti@amdocs.com>2018-03-28 17:22:56 +0100
committerMichael Arrastia <MArrasti@amdocs.com>2018-03-29 18:38:17 +0100
commit837cbcdc2562c0cd041ed558d05bb7dbba4be603 (patch)
tree370e72f52e0420e0fa633de73a6fd47d03d17422 /src/main/java/org/onap/crud/event/response
parent0c19b1386259b7144bc6c95954f965c469835522 (diff)
Update published event to include header and body
Originally, the published event only contained the raw graph request payload. This has now been updated to include the following changes: - encapsulate the graph request in a body property - add new event header with details such as timestamp, request-id, event-type Issue-ID: AAI-954 Change-Id: I780b6f52a01aafdcd7d09156e9d3a99c25be90a3 Signed-off-by: Michael Arrastia <MArrasti@amdocs.com>
Diffstat (limited to 'src/main/java/org/onap/crud/event/response')
-rw-r--r--src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java142
-rw-r--r--src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java56
2 files changed, 198 insertions, 0 deletions
diff --git a/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
new file mode 100644
index 0000000..1fa056e
--- /dev/null
+++ b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
@@ -0,0 +1,142 @@
+/**
+ * ============LICENSE_START=======================================================
+ * Gizmo
+ * ================================================================================
+ * 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 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.crud.event.response;
+
+import javax.ws.rs.core.Response.Status;
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.crud.event.GraphEvent;
+import org.onap.crud.event.GraphEvent.GraphEventResult;
+import org.onap.crud.event.envelope.GraphEventEnvelope;
+import org.onap.crud.exception.CrudException;
+import org.onap.crud.logging.CrudServiceMsgs;
+import org.onap.crud.parser.CrudResponseBuilder;
+import org.onap.schema.OxmModelValidator;
+import org.onap.schema.RelationshipSchemaValidator;
+
+/**
+ * Reads event responses, logs and generates exceptions if errors are found.
+ *
+ */
+public class GraphEventResponseHandler {
+
+ private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
+
+ public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
+ throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return CrudResponseBuilder.buildUpsertVertexResponse(
+ OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
+ }
+
+ public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
+ throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return CrudResponseBuilder.buildUpsertEdgeResponse(
+ RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
+ version);
+ }
+
+ public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return "";
+ }
+
+ public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+ }
+
+ public boolean hasPolicyViolations(GraphEventEnvelope event) {
+ return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
+ && event.getPolicyViolations().getAsJsonArray().size() != 0;
+ }
+
+ private void handlePolicyViolations(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ if (hasPolicyViolations(response)) {
+ logPolicyViolation(event, response);
+ throw new CrudException(GraphEventResponseMessage.POLICY_VIOLATION_EXCEPTION_MESSAGE.getMessage(
+ response.getBody().getTransactionId(), response.getPolicyViolations()), Status.BAD_REQUEST);
+ }
+ }
+
+ private void logResponse(GraphEvent event, GraphEvent response) {
+ String message = GraphEventResponseMessage.BASE_OPERATION_LOG_MESSAGE.getMessage(response.getObjectType(),
+ response.getObjectKey(), response.getTransactionId(), event.getOperation().toString(),
+ response.getResult());
+ if (isErrorResponse(response)) {
+ message = GraphEventResponseMessage.OPERATION_ERROR_LOG_MESSAGE.getMessage(message,
+ response.getErrorMessage());
+ }
+
+ logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
+ }
+
+ private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
+ //@formatter:off
+ logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO,
+ GraphEventResponseMessage.POLICY_VIOLATION_LOG_MESSAGE.getMessage(
+ response.getBody().getTransactionId(),
+ response.getHeader().getSourceName(),
+ response.getHeader().getEventType(),
+ response.getBody().getObjectKey(),
+ response.getBody().getObjectType(),
+ event.getOperation().toString(),
+ response.getPolicyViolations().toString()));
+ //@formatter:on
+ }
+
+ private void throwOperationException(GraphEventEnvelope response) throws CrudException {
+ throw new CrudException(
+ GraphEventResponseMessage.OPERATION_ERROR_EXCEPTION_MESSAGE
+ .getMessage(response.getBody().getTransactionId(), response.getBody().getErrorMessage()),
+ response.getBody().getHttpErrorStatus());
+ }
+
+ private boolean isErrorResponse(GraphEvent response) {
+ return GraphEventResult.FAILURE.equals(response.getResult());
+ }
+}
diff --git a/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java b/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java
new file mode 100644
index 0000000..5e4c6bd
--- /dev/null
+++ b/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java
@@ -0,0 +1,56 @@
+/**
+ * ============LICENSE_START=======================================================
+ * Gizmo
+ * ================================================================================
+ * 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 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.crud.event.response;
+
+import java.text.MessageFormat;
+
+/**
+ * Graph event handling messages, including logging and exceptions.
+ */
+public enum GraphEventResponseMessage {
+
+ //@formatter:off
+ BASE_OPERATION_LOG_MESSAGE("Event response received: {0} with key: {1}, transaction-id: {2}, operation: {3}, result: {4}"),
+ OPERATION_ERROR_LOG_MESSAGE("{0}, error: {1}"),
+ OPERATION_ERROR_EXCEPTION_MESSAGE("Operation Failed with transaction-id: {0}. Error: {1}"),
+ POLICY_VIOLATION_LOG_MESSAGE("Event response received: transaction-id: {0}, event source: {1}, event type: {2}, object key: {3}, object type: {4}, operation: {5}, result: policy violations detected in request, error: {6}"),
+ POLICY_VIOLATION_EXCEPTION_MESSAGE("Operation Failed with transaction-id {0}. Error: policy violations detected in request, {1}");
+ //@formatter:on
+
+ private String message;
+
+ private GraphEventResponseMessage(String message) {
+ this.message = message;
+ }
+
+ /**
+ * @param args to be formatted
+ * @return the formatted error message
+ */
+ public String getMessage(Object... args) {
+ MessageFormat formatter = new MessageFormat("");
+ formatter.applyPattern(this.message);
+ return formatter.format(args);
+ }
+}