aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/crud/event/response
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/crud/event/response')
-rw-r--r--src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java142
-rw-r--r--src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java56
2 files changed, 198 insertions, 0 deletions
diff --git a/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
new file mode 100644
index 0000000..1fa056e
--- /dev/null
+++ b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
@@ -0,0 +1,142 @@
+/**
+ * ============LICENSE_START=======================================================
+ * Gizmo
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.crud.event.response;
+
+import javax.ws.rs.core.Response.Status;
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.crud.event.GraphEvent;
+import org.onap.crud.event.GraphEvent.GraphEventResult;
+import org.onap.crud.event.envelope.GraphEventEnvelope;
+import org.onap.crud.exception.CrudException;
+import org.onap.crud.logging.CrudServiceMsgs;
+import org.onap.crud.parser.CrudResponseBuilder;
+import org.onap.schema.OxmModelValidator;
+import org.onap.schema.RelationshipSchemaValidator;
+
+/**
+ * Reads event responses, logs and generates exceptions if errors are found.
+ *
+ */
+public class GraphEventResponseHandler {
+
+ private static Logger logger = LoggerFactory.getInstance().getLogger(GraphEventResponseHandler.class.getName());
+
+ public String handleVertexResponse(String version, GraphEvent event, GraphEventEnvelope response)
+ throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return CrudResponseBuilder.buildUpsertVertexResponse(
+ OxmModelValidator.validateOutgoingPayload(version, response.getBody().getVertex().toVertex()), version);
+ }
+
+ public String handleEdgeResponse(String version, GraphEvent event, GraphEventEnvelope response)
+ throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return CrudResponseBuilder.buildUpsertEdgeResponse(
+ RelationshipSchemaValidator.validateOutgoingPayload(version, response.getBody().getEdge().toEdge()),
+ version);
+ }
+
+ public String handleDeletionResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+
+ return "";
+ }
+
+ public void handleBulkEventResponse(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ handlePolicyViolations(event, response);
+ logResponse(event, response.getBody());
+
+ if (isErrorResponse(response.getBody())) {
+ throwOperationException(response);
+ }
+ }
+
+ public boolean hasPolicyViolations(GraphEventEnvelope event) {
+ return event.getPolicyViolations() != null && event.getPolicyViolations().isJsonArray()
+ && event.getPolicyViolations().getAsJsonArray().size() != 0;
+ }
+
+ private void handlePolicyViolations(GraphEvent event, GraphEventEnvelope response) throws CrudException {
+ if (hasPolicyViolations(response)) {
+ logPolicyViolation(event, response);
+ throw new CrudException(GraphEventResponseMessage.POLICY_VIOLATION_EXCEPTION_MESSAGE.getMessage(
+ response.getBody().getTransactionId(), response.getPolicyViolations()), Status.BAD_REQUEST);
+ }
+ }
+
+ private void logResponse(GraphEvent event, GraphEvent response) {
+ String message = GraphEventResponseMessage.BASE_OPERATION_LOG_MESSAGE.getMessage(response.getObjectType(),
+ response.getObjectKey(), response.getTransactionId(), event.getOperation().toString(),
+ response.getResult());
+ if (isErrorResponse(response)) {
+ message = GraphEventResponseMessage.OPERATION_ERROR_LOG_MESSAGE.getMessage(message,
+ response.getErrorMessage());
+ }
+
+ logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO, message);
+ }
+
+ private void logPolicyViolation(GraphEvent event, GraphEventEnvelope response) {
+ //@formatter:off
+ logger.info(CrudServiceMsgs.ASYNC_DATA_SERVICE_INFO,
+ GraphEventResponseMessage.POLICY_VIOLATION_LOG_MESSAGE.getMessage(
+ response.getBody().getTransactionId(),
+ response.getHeader().getSourceName(),
+ response.getHeader().getEventType(),
+ response.getBody().getObjectKey(),
+ response.getBody().getObjectType(),
+ event.getOperation().toString(),
+ response.getPolicyViolations().toString()));
+ //@formatter:on
+ }
+
+ private void throwOperationException(GraphEventEnvelope response) throws CrudException {
+ throw new CrudException(
+ GraphEventResponseMessage.OPERATION_ERROR_EXCEPTION_MESSAGE
+ .getMessage(response.getBody().getTransactionId(), response.getBody().getErrorMessage()),
+ response.getBody().getHttpErrorStatus());
+ }
+
+ private boolean isErrorResponse(GraphEvent response) {
+ return GraphEventResult.FAILURE.equals(response.getResult());
+ }
+}
diff --git a/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java b/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java
new file mode 100644
index 0000000..5e4c6bd
--- /dev/null
+++ b/src/main/java/org/onap/crud/event/response/GraphEventResponseMessage.java
@@ -0,0 +1,56 @@
+/**
+ * ============LICENSE_START=======================================================
+ * Gizmo
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.crud.event.response;
+
+import java.text.MessageFormat;
+
+/**
+ * Graph event handling messages, including logging and exceptions.
+ */
+public enum GraphEventResponseMessage {
+
+ //@formatter:off
+ BASE_OPERATION_LOG_MESSAGE("Event response received: {0} with key: {1}, transaction-id: {2}, operation: {3}, result: {4}"),
+ OPERATION_ERROR_LOG_MESSAGE("{0}, error: {1}"),
+ OPERATION_ERROR_EXCEPTION_MESSAGE("Operation Failed with transaction-id: {0}. Error: {1}"),
+ POLICY_VIOLATION_LOG_MESSAGE("Event response received: transaction-id: {0}, event source: {1}, event type: {2}, object key: {3}, object type: {4}, operation: {5}, result: policy violations detected in request, error: {6}"),
+ POLICY_VIOLATION_EXCEPTION_MESSAGE("Operation Failed with transaction-id {0}. Error: policy violations detected in request, {1}");
+ //@formatter:on
+
+ private String message;
+
+ private GraphEventResponseMessage(String message) {
+ this.message = message;
+ }
+
+ /**
+ * @param args to be formatted
+ * @return the formatted error message
+ */
+ public String getMessage(Object... args) {
+ MessageFormat formatter = new MessageFormat("");
+ formatter.applyPattern(this.message);
+ return formatter.format(args);
+ }
+}