diff options
author | Michael Arrastia <MArrasti@amdocs.com> | 2018-03-28 17:22:56 +0100 |
---|---|---|
committer | Michael Arrastia <MArrasti@amdocs.com> | 2018-03-29 18:38:17 +0100 |
commit | 837cbcdc2562c0cd041ed558d05bb7dbba4be603 (patch) | |
tree | 370e72f52e0420e0fa633de73a6fd47d03d17422 /src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java | |
parent | 0c19b1386259b7144bc6c95954f965c469835522 (diff) |
Update published event to include header and body
Originally, the published event only contained the raw graph
request payload.
This has now been updated to include the following changes:
- encapsulate the graph request in a body property
- add new event header with details such as timestamp, request-id,
event-type
Issue-ID: AAI-954
Change-Id: I780b6f52a01aafdcd7d09156e9d3a99c25be90a3
Signed-off-by: Michael Arrastia <MArrasti@amdocs.com>
Diffstat (limited to 'src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java')
-rw-r--r-- | src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java b/src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java new file mode 100644 index 0000000..13370a2 --- /dev/null +++ b/src/main/java/org/onap/crud/event/envelope/GraphEventEnvelope.java @@ -0,0 +1,130 @@ +/** + * ============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.envelope; + +import javax.ws.rs.core.Response; +import org.onap.crud.event.GraphEvent; +import org.onap.crud.event.GraphEventEdge; +import org.onap.crud.event.GraphEventVertex; +import org.onap.crud.exception.CrudException; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; + +/** + * Defines the top-level structure of the Gizmo events. Primarily serves as a wrapper for the graph details and includes + * an event header to describe and identify the event. + */ +public class GraphEventEnvelope { + + private GraphEventHeader header; + private GraphEvent body; + private JsonElement policyViolations; + + private static final Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create(); + + /** + * Construct the event. + * + * @param header the event header to describe the event + * @param body the body of the event with graph details + */ + public GraphEventEnvelope(GraphEventHeader header, GraphEvent body) { + this.header = header; + this.body = body; + } + + /** + * Construct the envelope header from the provided GraphEvent. + * + * @param event the graph event for a vertex or edge operation + */ + public GraphEventEnvelope(GraphEvent event) { + this.header = new GraphEventHeader.Builder().requestId(event.getTransactionId()) + .validationEntityType(getType(event)).build(); + this.body = event; + } + + public GraphEvent getBody() { + return body; + } + + public GraphEventHeader getHeader() { + return header; + } + + public JsonElement getPolicyViolations() { + return policyViolations != null ? policyViolations : new JsonArray(); + } + + /** + * Serializes this object into a JSON string representation. + * + * @return a JSON format string representation of this object. + */ + public String toJson() { + return gson.toJson(this); + } + + /** + * Deserializes a JSON string into a GraphEventEnvelope object. + * + * @param json the JSON string + * @return a GraphEventEnvelope object + * @throws CrudException + */ + public static GraphEventEnvelope fromJson(String json) throws CrudException { + try { + if (json == null || json.isEmpty()) { + throw new CrudException("Empty or null JSON string.", Response.Status.BAD_REQUEST); + } + return gson.fromJson(json, GraphEventEnvelope.class); + } catch (Exception ex) { + throw new CrudException("Unable to parse JSON string: " + json, Response.Status.BAD_REQUEST); + } + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return this.toJson(); + } + + private String getType(GraphEvent event) { + GraphEventVertex vertex = event.getVertex(); + GraphEventEdge edge = event.getEdge(); + if (vertex != null) { + return vertex.getType(); + } else if (edge != null) { + return edge.getType(); + } + return null; + } + +} |