2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
22 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
24 package org.onap.crud.event.response;
26 import javax.ws.rs.core.Response.Status;
27 import org.onap.aai.cl.api.Logger;
28 import org.onap.aai.cl.eelf.LoggerFactory;
29 import org.onap.crud.event.GraphEvent;
30 import org.onap.crud.event.GraphEvent.GraphEventResult;
31 import org.onap.crud.event.envelope.GraphEventEnvelope;
32 import org.onap.crud.exception.CrudException;
33 import org.onap.crud.logging.CrudServiceMsgs;
34 import org.onap.crud.parser.CrudResponseBuilder;
35 import org.onap.schema.OxmModelValidator;
36 import org.onap.schema.RelationshipSchemaValidator;
39 * Reads event responses, logs and generates exceptions if errors are found.
42 public class GraphEventResponseHandler {
44 private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
46 public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
47 throws CrudException {
48 handlePolicyViolations(event, response);
49 logResponse(event, response.getBody());
51 if (isErrorResponse(response.getBody())) {
52 throwOperationException(response);
55 return CrudResponseBuilder.buildUpsertVertexResponse(
56 OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
59 public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
60 throws CrudException {
61 handlePolicyViolations(event, response);
62 logResponse(event, response.getBody());
64 if (isErrorResponse(response.getBody())) {
65 throwOperationException(response);
68 return CrudResponseBuilder.buildUpsertEdgeResponse(
69 RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
73 public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
74 handlePolicyViolations(event, response);
75 logResponse(event, response.getBody());
77 if (isErrorResponse(response.getBody())) {
78 throwOperationException(response);
84 public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
85 handlePolicyViolations(event, response);
86 logResponse(event, response.getBody());
88 if (isErrorResponse(response.getBody())) {
89 throwOperationException(response);
93 public boolean hasPolicyViolations(GraphEventEnvelope event) {
94 return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
95 && event.getPolicyViolations().getAsJsonArray().size() != 0;
98 private void handlePolicyViolations(GraphEvent event, GraphEventEnvelope response) throws CrudException {
99 if (hasPolicyViolations(response)) {
100 logPolicyViolation(event, response);
101 throw new CrudException(GraphEventResponseMessage.POLICY_VIOLATION_EXCEPTION_MESSAGE.getMessage(
102 response.getBody().getTransactionId(), response.getPolicyViolations()), Status.BAD_REQUEST);
106 private void logResponse(GraphEvent event, GraphEvent response) {
107 String message = GraphEventResponseMessage.BASE_OPERATION_LOG_MESSAGE.getMessage(response.getObjectType(),
108 response.getObjectKey(), response.getTransactionId(), event.getOperation().toString(),
109 response.getResult());
110 if (isErrorResponse(response)) {
111 message = GraphEventResponseMessage.OPERATION_ERROR_LOG_MESSAGE.getMessage(message,
112 response.getErrorMessage());
115 logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
118 private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
120 logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO,
121 GraphEventResponseMessage.POLICY_VIOLATION_LOG_MESSAGE.getMessage(
122 response.getBody().getTransactionId(),
123 response.getHeader().getSourceName(),
124 response.getHeader().getEventType(),
125 response.getBody().getObjectKey(),
126 response.getBody().getObjectType(),
127 event.getOperation().toString(),
128 response.getPolicyViolations().toString()));
132 private void throwOperationException(GraphEventEnvelope response) throws CrudException {
133 throw new CrudException(
134 GraphEventResponseMessage.OPERATION_ERROR_EXCEPTION_MESSAGE
135 .getMessage(response.getBody().getTransactionId(), response.getBody().getErrorMessage()),
136 response.getBody().getHttpErrorStatus());
139 private boolean isErrorResponse(GraphEvent response) {
140 return GraphEventResult.FAILURE.equals(response.getResult());