2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 package org.onap.aai.util;
24 import java.io.StringWriter;
25 import java.util.Iterator;
26 import java.util.UUID;
28 import javax.xml.bind.Marshaller;
30 import org.eclipse.persistence.dynamic.DynamicEntity;
31 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
32 import org.json.JSONException;
33 import org.json.JSONObject;
34 import org.onap.aai.dmaap.AAIDmaapEventJMSProducer;
35 import org.onap.aai.domain.notificationEvent.NotificationEvent;
36 import org.onap.aai.exceptions.AAIException;
37 import org.onap.aai.introspection.Introspector;
38 import org.onap.aai.introspection.Loader;
39 import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
41 public class StoreNotificationEvent {
43 private AAIDmaapEventJMSProducer messageProducer;
44 private String fromAppId = "";
45 private String transId = "";
46 private final String transactionId;
47 private final String sourceOfTruth;
49 * Instantiates a new store notification event.
51 public StoreNotificationEvent(String transactionId, String sourceOfTruth) {
52 this(new AAIDmaapEventJMSProducer(), transactionId, sourceOfTruth);
55 public StoreNotificationEvent(AAIDmaapEventJMSProducer producer, String transactionId, String sourceOfTruth) {
56 this.messageProducer = producer;
57 this.transactionId = transactionId;
58 this.sourceOfTruth = sourceOfTruth;
68 * @throws AAIException
71 public String storeEvent(NotificationEvent.EventHeader eh, Object obj) throws AAIException {
74 throw new AAIException("AAI_7350");
77 org.onap.aai.domain.notificationEvent.ObjectFactory factory = new org.onap.aai.domain.notificationEvent.ObjectFactory();
79 org.onap.aai.domain.notificationEvent.NotificationEvent ne = factory.createNotificationEvent();
81 if (eh.getId() == null) {
82 eh.setId(genDate2() + "-" + UUID.randomUUID().toString());
84 if (eh.getTimestamp() == null) {
85 eh.setTimestamp(genDate());
88 // there's no default, but i think we want to put this in hbase?
90 if (eh.getEntityLink() == null) {
91 eh.setEntityLink("UNK");
94 if (eh.getAction() == null) {
98 if (eh.getEventType() == null) {
99 eh.setEventType(AAIConfig.get("aai.notificationEvent.default.eventType", "UNK"));
102 if (eh.getDomain() == null) {
103 eh.setDomain(AAIConfig.get("aai.notificationEvent.default.domain", "UNK"));
106 if (eh.getSourceName() == null) {
107 eh.setSourceName(AAIConfig.get("aai.notificationEvent.default.sourceName", "UNK"));
110 if (eh.getSequenceNumber() == null) {
111 eh.setSequenceNumber(AAIConfig.get("aai.notificationEvent.default.sequenceNumber", "UNK"));
114 if (eh.getSeverity() == null) {
115 eh.setSeverity(AAIConfig.get("aai.notificationEvent.default.severity", "UNK"));
118 if (eh.getVersion() == null) {
119 eh.setVersion(AAIConfig.get("aai.notificationEvent.default.version", "UNK"));
122 ne.setCambriaPartition(AAIConstants.UEB_PUB_PARTITION_AAI);
123 ne.setEventHeader(eh);
127 PojoUtils pu = new PojoUtils();
128 String entityJson = pu.getJsonFromObject(ne);
129 sendToDmaapJmsQueue(entityJson);
131 } catch (Exception e) {
132 throw new AAIException("AAI_7350", e);
137 * Store dynamic event.
139 * @param notificationJaxbContext
140 * the notification jaxb context
141 * @param notificationVersion
142 * the notification version
147 * @throws AAIException
150 public void storeDynamicEvent(DynamicJAXBContext notificationJaxbContext, String notificationVersion, DynamicEntity eventHeader, DynamicEntity obj) throws AAIException {
153 throw new AAIException("AAI_7350");
156 DynamicEntity notificationEvent = notificationJaxbContext.getDynamicType("inventory.aai.onap.org." + notificationVersion + ".NotificationEvent").newDynamicEntity();
158 if (eventHeader.get("id") == null) {
159 eventHeader.set("id", genDate2() + "-" + UUID.randomUUID().toString());
162 if (eventHeader.get("timestamp") == null) {
163 eventHeader.set("timestamp", genDate());
166 if (eventHeader.get("entityLink") == null) {
167 eventHeader.set("entityLink", "UNK");
170 if (eventHeader.get("action") == null) {
171 eventHeader.set("action", "UNK");
174 if (eventHeader.get("eventType") == null) {
175 eventHeader.set("eventType", AAIConfig.get("aai.notificationEvent.default.eventType", "UNK"));
178 if (eventHeader.get("domain") == null) {
179 eventHeader.set("domain", AAIConfig.get("aai.notificationEvent.default.domain", "UNK"));
182 if (eventHeader.get("sourceName") == null) {
183 eventHeader.set("sourceName", AAIConfig.get("aai.notificationEvent.default.sourceName", "UNK"));
186 if (eventHeader.get("sequenceNumber") == null) {
187 eventHeader.set("sequenceNumber", AAIConfig.get("aai.notificationEvent.default.sequenceNumber", "UNK"));
190 if (eventHeader.get("severity") == null) {
191 eventHeader.set("severity", AAIConfig.get("aai.notificationEvent.default.severity", "UNK"));
194 if (eventHeader.get("version") == null) {
195 eventHeader.set("version", AAIConfig.get("aai.notificationEvent.default.version", "UNK"));
198 if (notificationEvent.get("cambriaPartition") == null) {
199 notificationEvent.set("cambriaPartition", AAIConstants.UEB_PUB_PARTITION_AAI);
202 notificationEvent.set("eventHeader", eventHeader);
203 notificationEvent.set("entity", obj);
206 StringWriter result = new StringWriter();
208 Marshaller marshaller = notificationJaxbContext.createMarshaller();
209 marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.MEDIA_TYPE, "application/json");
210 marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.JSON_INCLUDE_ROOT, false);
211 marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, false);
212 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
213 marshaller.marshal(notificationEvent, result);
215 this.sendToDmaapJmsQueue(result.toString());
217 } catch (Exception e) {
218 throw new AAIException("AAI_7350", e);
222 public String storeEvent(Loader loader, Introspector eventHeader, Introspector obj) throws AAIException {
224 throw new AAIException("AAI_7350");
228 final Introspector notificationEvent = loader.introspectorFromName("notification-event");
230 if (eventHeader.getValue("id") == null) {
231 eventHeader.setValue("id", genDate2() + "-" + UUID.randomUUID().toString());
234 if (eventHeader.getValue("timestamp") == null) {
235 eventHeader.setValue("timestamp", genDate());
238 if (eventHeader.getValue("entity-link") == null) {
239 eventHeader.setValue("entity-link", "UNK");
242 if (eventHeader.getValue("action") == null) {
243 eventHeader.setValue("action", "UNK");
246 if (eventHeader.getValue("event-type") == null) {
247 eventHeader.setValue("event-type", AAIConfig.get("aai.notificationEvent.default.eventType", "UNK"));
250 if (eventHeader.getValue("domain") == null) {
251 eventHeader.setValue("domain", AAIConfig.get("aai.notificationEvent.default.domain", "UNK"));
254 if (eventHeader.getValue("source-name") == null) {
255 eventHeader.setValue("source-name", AAIConfig.get("aai.notificationEvent.default.sourceName", "UNK"));
258 if (eventHeader.getValue("sequence-number") == null) {
259 eventHeader.setValue("sequence-number", AAIConfig.get("aai.notificationEvent.default.sequenceNumber", "UNK"));
262 if (eventHeader.getValue("severity") == null) {
263 eventHeader.setValue("severity", AAIConfig.get("aai.notificationEvent.default.severity", "UNK"));
266 if (eventHeader.getValue("version") == null) {
267 eventHeader.setValue("version", AAIConfig.get("aai.notificationEvent.default.version", "UNK"));
270 if (notificationEvent.getValue("cambria-partition") == null) {
271 notificationEvent.setValue("cambria-partition", AAIConstants.UEB_PUB_PARTITION_AAI);
274 notificationEvent.setValue("event-header", eventHeader.getUnderlyingObject());
275 notificationEvent.setValue("entity", obj.getUnderlyingObject());
277 String entityJson = notificationEvent.marshal(false);
278 sendToDmaapJmsQueue(entityJson);
280 } catch (JSONException e) {
281 throw new AAIException("AAI_7350", e);
282 } catch (AAIUnknownObjectException e) {
283 throw new AAIException("AAI_7350", e);
287 private void sendToDmaapJmsQueue(String entityString) throws JSONException {
289 JSONObject entityJsonObject = new JSONObject(entityString);
291 JSONObject entityJsonObjectUpdated = new JSONObject();
292 JSONObject finalJson = new JSONObject();
294 JSONObject entityHeader = entityJsonObject.getJSONObject("event-header");
295 String cambriaPartition = entityJsonObject.getString("cambria.partition");
297 entityJsonObject.remove("event-header");
298 entityJsonObject.remove("cambria.partition");
300 entityJsonObjectUpdated.put("event-header", entityHeader);
301 entityJsonObjectUpdated.put("cambria.partition", cambriaPartition);
303 String transId = entityHeader.getString("id");
304 String fromAppId = entityHeader.getString("source-name");
306 Iterator<String> iter = entityJsonObject.keys();
307 JSONObject entity = new JSONObject();
308 if (iter.hasNext()) {
309 entity = entityJsonObject.getJSONObject(iter.next());
312 entityJsonObjectUpdated.put("entity", entity);
314 finalJson.put("event-topic", "AAI-EVENT");
315 finalJson.put("transId", transId);
316 finalJson.put("fromAppId", fromAppId);
317 finalJson.put("fullId", "");
318 finalJson.put("aaiEventPayload", entityJsonObjectUpdated);
320 messageProducer.sendMessageToDefaultDestination(finalJson);
328 public static String genDate() {
329 FormatDate fd = new FormatDate("YYYYMMdd-HH:mm:ss:SSS");
330 return fd.getDateTime();
338 public static String genDate2() {
339 FormatDate fd = new FormatDate("YYYYMMddHHmmss");
340 return fd.getDateTime();