From 837cbcdc2562c0cd041ed558d05bb7dbba4be603 Mon Sep 17 00:00:00 2001 From: Michael Arrastia Date: Wed, 28 Mar 2018 17:22:56 +0100 Subject: 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 --- .../event/response/GraphEventResponseHandler.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java (limited to 'src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java') 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()); + } +} -- cgit 1.2.3-korg