Remove Multiplicity feature
[aai/gizmo.git] / src / main / java / org / onap / crud / event / response / GraphEventResponseHandler.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21 package org.onap.crud.event.response;
22
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;
34
35 /**
36  * Reads event responses, logs and generates exceptions if errors are found.
37  *
38  */
39 public class GraphEventResponseHandler {
40
41     private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
42
43     public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
44             throws CrudException {
45         validate(event, response);
46
47         return CrudResponseBuilder.buildUpsertVertexResponse(
48                 OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
49     }
50
51     public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
52             throws CrudException {
53         validate(event, response);
54
55         return CrudResponseBuilder.buildUpsertEdgeResponse(
56                 RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
57                 version);
58     }
59
60     public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
61         validate(event, response);
62         return "";
63     }
64
65     public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
66         validate(event, response);
67     }
68
69     public boolean hasPolicyViolations(GraphEventEnvelope event) {
70         return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
71                 && event.getPolicyViolations().getAsJsonArray().size() != 0;
72     }
73
74     private void validate(GraphEvent event, GraphEventEnvelope response) throws CrudException {
75         handlePolicyViolations(event, response);
76         logResponse(event, response.getBody());
77
78         if (isErrorResponse(response.getBody())) {
79             throw new CrudException(
80                     GraphEventResponseMessage.OPERATION_ERROR_EXCEPTION_MESSAGE
81                             .getMessage(response.getBody().getTransactionId(), response.getBody().getErrorMessage()),
82                     response.getBody().getHttpErrorStatus());
83         }
84     }
85
86     private void handlePolicyViolations(GraphEvent event, GraphEventEnvelope response) throws CrudException {
87         if (hasPolicyViolations(response)) {
88             logPolicyViolation(event, response);
89             throw new CrudException(GraphEventResponseMessage.POLICY_VIOLATION_EXCEPTION_MESSAGE.getMessage(
90                     response.getBody().getTransactionId(), response.getPolicyViolations()), Status.BAD_REQUEST);
91         }
92     }
93
94     private void logResponse(GraphEvent event, GraphEvent response) {
95         String message = GraphEventResponseMessage.BASE_OPERATION_LOG_MESSAGE.getMessage(response.getObjectType(),
96                 response.getObjectKey(), response.getTransactionId(), event.getOperation().toString(),
97                 response.getResult());
98         if (isErrorResponse(response)) {
99             message = GraphEventResponseMessage.OPERATION_ERROR_LOG_MESSAGE.getMessage(message,
100                     response.getErrorMessage());
101         }
102
103         logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
104     }
105
106     private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
107         //@formatter:off
108         logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO,
109                 GraphEventResponseMessage.POLICY_VIOLATION_LOG_MESSAGE.getMessage(
110                         response.getBody().getTransactionId(),
111                         response.getHeader().getSourceName(),
112                         response.getHeader().getEventType(),
113                         response.getBody().getObjectKey(),
114                         response.getBody().getObjectType(),
115                         event.getOperation().toString(),
116                         response.getPolicyViolations().toString()));
117         //@formatter:on
118     }
119
120     private boolean isErrorResponse(GraphEvent response) {
121         return GraphEventResult.FAILURE.equals(response.getResult());
122     }
123 }