Apply multiplicity Rule upon Edge creation
[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.validation.OxmModelValidator;
33 import org.onap.schema.validation.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         handlePolicyViolations(event, response);
46         logResponse(event, response.getBody());
47
48         if (isErrorResponse(response.getBody())) {
49             throwOperationException(response);
50         }
51
52         return CrudResponseBuilder.buildUpsertVertexResponse(
53                 OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
54     }
55
56     public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
57             throws CrudException {
58         handlePolicyViolations(event, response);
59         logResponse(event, response.getBody());
60
61         if (isErrorResponse(response.getBody())) {
62             throwOperationException(response);
63         }
64
65         return CrudResponseBuilder.buildUpsertEdgeResponse(
66                 RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
67                 version);
68     }
69
70     public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
71         handlePolicyViolations(event, response);
72         logResponse(event, response.getBody());
73
74         if (isErrorResponse(response.getBody())) {
75             throwOperationException(response);
76         }
77
78         return "";
79     }
80
81     public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
82         handlePolicyViolations(event, response);
83         logResponse(event, response.getBody());
84
85         if (isErrorResponse(response.getBody())) {
86             throwOperationException(response);
87         }
88     }
89
90     public boolean hasPolicyViolations(GraphEventEnvelope event) {
91         return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
92                 && event.getPolicyViolations().getAsJsonArray().size() != 0;
93     }
94
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);
100         }
101     }
102
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());
110         }
111
112         logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
113     }
114
115     private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
116         //@formatter:off
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()));
126         //@formatter:on
127     }
128
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());
134     }
135
136     private boolean isErrorResponse(GraphEvent response) {
137         return GraphEventResult.FAILURE.equals(response.getResult());
138     }
139 }