2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 package org.onap.crud.event.response;
23 import javax.ws.rs.core.Response.Status;
24 import org.onap.aai.cl.api.Logger;
25 import org.onap.aai.cl.eelf.LoggerFactory;
26 import org.onap.crud.event.GraphEvent;
27 import org.onap.crud.event.GraphEvent.GraphEventResult;
28 import org.onap.crud.event.envelope.GraphEventEnvelope;
29 import org.onap.crud.exception.CrudException;
30 import org.onap.crud.logging.CrudServiceMsgs;
31 import org.onap.crud.parser.CrudResponseBuilder;
32 import org.onap.schema.OxmModelValidator;
33 import org.onap.schema.RelationshipSchemaValidator;
36 * Reads event responses, logs and generates exceptions if errors are found.
39 public class GraphEventResponseHandler {
41 private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
43 public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
44 throws CrudException {
45 handlePolicyViolations(event, response);
46 logResponse(event, response.getBody());
48 if (isErrorResponse(response.getBody())) {
49 throwOperationException(response);
52 return CrudResponseBuilder.buildUpsertVertexResponse(
53 OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
56 public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
57 throws CrudException {
58 handlePolicyViolations(event, response);
59 logResponse(event, response.getBody());
61 if (isErrorResponse(response.getBody())) {
62 throwOperationException(response);
65 return CrudResponseBuilder.buildUpsertEdgeResponse(
66 RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
70 public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
71 handlePolicyViolations(event, response);
72 logResponse(event, response.getBody());
74 if (isErrorResponse(response.getBody())) {
75 throwOperationException(response);
81 public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
82 handlePolicyViolations(event, response);
83 logResponse(event, response.getBody());
85 if (isErrorResponse(response.getBody())) {
86 throwOperationException(response);
90 public boolean hasPolicyViolations(GraphEventEnvelope event) {
91 return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
92 && event.getPolicyViolations().getAsJsonArray().size() != 0;
95 private void handlePolicyViolations(GraphEvent event, GraphEventEnvelope response) throws CrudException {
96 if (hasPolicyViolations(response)) {
97 logPolicyViolation(event, response);
98 throw new CrudException(GraphEventResponseMessage.POLICY_VIOLATION_EXCEPTION_MESSAGE.getMessage(
99 response.getBody().getTransactionId(), response.getPolicyViolations()), Status.BAD_REQUEST);
103 private void logResponse(GraphEvent event, GraphEvent response) {
104 String message = GraphEventResponseMessage.BASE_OPERATION_LOG_MESSAGE.getMessage(response.getObjectType(),
105 response.getObjectKey(), response.getTransactionId(), event.getOperation().toString(),
106 response.getResult());
107 if (isErrorResponse(response)) {
108 message = GraphEventResponseMessage.OPERATION_ERROR_LOG_MESSAGE.getMessage(message,
109 response.getErrorMessage());
112 logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
115 private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
117 logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO,
118 GraphEventResponseMessage.POLICY_VIOLATION_LOG_MESSAGE.getMessage(
119 response.getBody().getTransactionId(),
120 response.getHeader().getSourceName(),
121 response.getHeader().getEventType(),
122 response.getBody().getObjectKey(),
123 response.getBody().getObjectType(),
124 event.getOperation().toString(),
125 response.getPolicyViolations().toString()));
129 private void throwOperationException(GraphEventEnvelope response) throws CrudException {
130 throw new CrudException(
131 GraphEventResponseMessage.OPERATION_ERROR_EXCEPTION_MESSAGE
132 .getMessage(response.getBody().getTransactionId(), response.getBody().getErrorMessage()),
133 response.getBody().getHttpErrorStatus());
136 private boolean isErrorResponse(GraphEvent response) {
137 return GraphEventResult.FAILURE.equals(response.getResult());