Update published event to include header and body
[aai/gizmo.git] / src / main / java / org / onap / crud / event / response / GraphEventResponseHandler.java
1 /**
2  * ============LICENSE_START=======================================================
3  * Gizmo
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
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
12  *
13  *    http://www.apache.org/licenses/LICENSE-2.0
14  *
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=========================================================
21  *
22  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23  */
24 package org.onap.crud.event.response;
25
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;
37
38 /**
39  * Reads event responses, logs and generates exceptions if errors are found.
40  *
41  */
42 public class GraphEventResponseHandler {
43
44     private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
45
46     public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
47             throws CrudException {
48         handlePolicyViolations(event, response);
49         logResponse(event, response.getBody());
50
51         if (isErrorResponse(response.getBody())) {
52             throwOperationException(response);
53         }
54
55         return CrudResponseBuilder.buildUpsertVertexResponse(
56                 OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
57     }
58
59     public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
60             throws CrudException {
61         handlePolicyViolations(event, response);
62         logResponse(event, response.getBody());
63
64         if (isErrorResponse(response.getBody())) {
65             throwOperationException(response);
66         }
67
68         return CrudResponseBuilder.buildUpsertEdgeResponse(
69                 RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
70                 version);
71     }
72
73     public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
74         handlePolicyViolations(event, response);
75         logResponse(event, response.getBody());
76
77         if (isErrorResponse(response.getBody())) {
78             throwOperationException(response);
79         }
80
81         return "";
82     }
83
84     public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
85         handlePolicyViolations(event, response);
86         logResponse(event, response.getBody());
87
88         if (isErrorResponse(response.getBody())) {
89             throwOperationException(response);
90         }
91     }
92
93     public boolean hasPolicyViolations(GraphEventEnvelope event) {
94         return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
95                 && event.getPolicyViolations().getAsJsonArray().size() != 0;
96     }
97
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);
103         }
104     }
105
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());
113         }
114
115         logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
116     }
117
118     private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
119         //@formatter:off
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()));
129         //@formatter:on
130     }
131
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());
137     }
138
139     private boolean isErrorResponse(GraphEvent response) {
140         return GraphEventResult.FAILURE.equals(response.getResult());
141     }
142 }