/*- * ============LICENSE_START======================================================= * 2018-2019 Nordix Foundation. 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. * * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ package org.onap.dcaegen2.collectors.datafile.utils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Utility class to produce correctly formatted fileReady event Json messages. * * @author Henrik Andersson on 7/25/18 * */ public class JsonMessage { private String eventName; private String changeIdentifier; private String changeType; private String notificationFieldsVersion; private List arrayOfAdditionalFields; public List getAdditionalFields() { return arrayOfAdditionalFields; } @Override public String toString() { return "[" + getParsed() + "]"; } /** * Gets the message in parsed format. * * @return the massage in parsed format. */ public String getParsed() { StringBuffer additionalFieldsString = new StringBuffer(); if (arrayOfAdditionalFields.size() > 0) { additionalFieldsString.append("\"arrayOfNamedHashMap\":["); for (Iterator iterator = arrayOfAdditionalFields.iterator(); iterator.hasNext();) { AdditionalField additionalField = iterator.next(); additionalFieldsString.append(additionalField.toString()); if (iterator.hasNext()) { additionalFieldsString.append(","); } } additionalFieldsString.append("]"); } return "{" // + "\"event\":" // + "{" // + "\"commonEventHeader\":" // + "{" // + "\"domain\":\"notification\"," // + "\"eventId\":\"<>-reg\"," // + "\"eventName\":\"" + eventName + "\"," // + "\"eventType\":\"fileReady\"," // + "\"internalHeaderFields\":{}," // + "\"lastEpochMicrosec\":1519837825682," // + "\"nfNamingCode\":\"5GRAN\"," // + "\"nfcNamingCode\":\"5DU\"," // + "\"priority\":\"Normal\"," // + "\"reportingEntityName\":\"5GRAN_DU\"," // + "\"sequence\":0," // + "\"sourceId\":\"<>\"," // + "\"sourceName\":\"5GRAN_DU\"," // + "\"timeZoneOffset\":\"UTC+05:00\"," // + "\"startEpochMicrosec\":\"1519837825682\"," // + "\"version\":3" // + "}," // + "\"notificationFields\":" // + "{" // + getAsStringIfParameterIsSet("changeIdentifier", changeIdentifier, changeType != null || notificationFieldsVersion != null || arrayOfAdditionalFields.size() > 0) + getAsStringIfParameterIsSet("changeType", changeType, notificationFieldsVersion != null || arrayOfAdditionalFields.size() > 0) + getAsStringIfParameterIsSet("notificationFieldsVersion", notificationFieldsVersion, arrayOfAdditionalFields.size() > 0) + additionalFieldsString.toString() // + "}" // + "}" // + "}"; } private JsonMessage(final JsonMessageBuilder builder) { this.eventName = builder.eventName; this.changeIdentifier = builder.changeIdentifier; this.changeType = builder.changeType; this.notificationFieldsVersion = builder.notificationFieldsVersion; this.arrayOfAdditionalFields = builder.arrayOfAdditionalFields; } public static class AdditionalField { private String name; private String location; private String compression; private String fileFormatType; private String fileFormatVersion; @Override public String toString() { return "{" // + getAsStringIfParameterIsSet("name", name, true) // + "\"hashMap\":" // + "{" + getAsStringIfParameterIsSet("location", location, compression != null || fileFormatType != null || fileFormatVersion != null) + getAsStringIfParameterIsSet("compression", compression, fileFormatType != null || fileFormatVersion != null) + getAsStringIfParameterIsSet("fileFormatType", fileFormatType, fileFormatVersion != null) + getAsStringIfParameterIsSet("fileFormatVersion", fileFormatVersion, false) // + "}" // + "}"; } private AdditionalField(AdditionalFieldBuilder builder) { this.name = builder.name; this.location = builder.location; this.compression = builder.compression; this.fileFormatType = builder.fileFormatType; this.fileFormatVersion = builder.fileFormatVersion; } } public static class AdditionalFieldBuilder { private String name; private String location; private String compression; private String fileFormatType; private String fileFormatVersion; public AdditionalFieldBuilder name(String name) { this.name = name; return this; } public AdditionalFieldBuilder location(String location) { this.location = location; return this; } public AdditionalFieldBuilder compression(String compression) { this.compression = compression; return this; } public AdditionalFieldBuilder fileFormatType(String fileFormatType) { this.fileFormatType = fileFormatType; return this; } public AdditionalFieldBuilder fileFormatVersion(String fileFormatVersion) { this.fileFormatVersion = fileFormatVersion; return this; } public AdditionalField build() { return new AdditionalField(this); } } public static class JsonMessageBuilder { private String eventName; private String changeIdentifier; private String changeType; private String notificationFieldsVersion; private List arrayOfAdditionalFields = new ArrayList(); public JsonMessageBuilder eventName(String eventName) { this.eventName = eventName; return this; } public JsonMessageBuilder changeIdentifier(String changeIdentifier) { this.changeIdentifier = changeIdentifier; return this; } public JsonMessageBuilder changeType(String changeType) { this.changeType = changeType; return this; } public JsonMessageBuilder notificationFieldsVersion(String notificationFieldsVersion) { this.notificationFieldsVersion = notificationFieldsVersion; return this; } public JsonMessageBuilder addAdditionalField(AdditionalField additionalField) { this.arrayOfAdditionalFields.add(additionalField); return this; } public JsonMessage build() { return new JsonMessage(this); } } private static String getAsStringIfParameterIsSet(String parameterName, String parameterValue, boolean withSeparator) { String result = ""; if (parameterValue != null) { result = "\"" + parameterName + "\":\"" + parameterValue + "\""; if (withSeparator) { result = result + ","; } } return result; } /** * Can be used to produce a correct test Json message. Tip! Check the formatting with * Json formatter * * @param args Not used */ public static void main(String[] args) { AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder() // .name("A20161224.1030-1045.bin.gz") // .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz") // .compression("gzip") // .fileFormatType("org.3GPP.32.435#measCollec") // .fileFormatVersion("V10") // .build(); AdditionalField secondAdditionalField = new JsonMessage.AdditionalFieldBuilder() // .name("A20161224.1030-1045.bin.gz") // .location("sftp://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz") // .compression("gzip") // .fileFormatType("org.3GPP.32.435#measCollec") // .fileFormatVersion("V10") // .build(); JsonMessage message = new JsonMessage.JsonMessageBuilder() // .eventName("Noti_NrRadio-Ericsson_FileReady") // .changeIdentifier("PM_MEAS_FILES") // .changeType("FileReady") // .notificationFieldsVersion("2.0") // .addAdditionalField(additionalField) // .addAdditionalField(secondAdditionalField) // .build(); System.out.println(message.toString()); } }