package evel_javalibrary.att.com; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.file.Files; /**************************************************************************//** * @file * Evel Fault Event class extends EvelHeader class * * This file implements the Evel Fault Event class which is intended to provide a * simple wrapper around the complexity of AT&T's Vendor Event Listener API so * that VNFs can use it to send Fault events. * * License * ------- * Unless otherwise specified, all software contained herein is * 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. *****************************************************************************/ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.json.Json; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; import org.apache.log4j.Logger; public class EvelNotification extends EvelHeader { int major_version = 1; int minor_version = 0; /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ String changeType = null; String changeIdentifier; //ArrayList additional_info; HashMap additional_inf; /***************************************************************************/ /* Optional fields */ /***************************************************************************/ EvelOptionString newState; EvelOptionString oldState; EvelOptionString changeContact; EvelOptionString stateInterface; ArrayList additional_objects; Map> evelmap; private static final Logger LOGGER = Logger.getLogger( EvelNotification.class.getName() ); public EvelNotification(String eventname, String ev_id, String change_identifier, String change_type) { super(eventname, ev_id); // TODO Auto-generated constructor stub event_domain = EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION; changeType = change_type; newState = new EvelOptionString(); oldState = new EvelOptionString(); changeContact = new EvelOptionString(); stateInterface = new EvelOptionString(); changeIdentifier = change_identifier; //additional_info=null; additional_inf =null; additional_objects = null; evelmap = null; } /**************************************************************************//** * Set the Event Type property of the Notification. * * @note The property is treated as immutable: it is only valid to call * the setter once. However, we don't assert if the caller tries to * overwrite, just ignoring the update instead. * * @param type The Event Type to be set. ASCIIZ string. The caller * does not need to preserve the value once the function * returns. *****************************************************************************/ public void evel_notification_type_set(String typ) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions and call evel_header_type_set. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); evel_header_type_set(typ); EVEL_EXIT(); } // public void evel_notification_addl_info_add(String name, String value) // { // String[] addl_info = null; // EVEL_ENTER(); // // /***************************************************************************/ // /* Check preconditions. */ // /***************************************************************************/ // assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); // assert(name != null); // assert(value != null); // // if( additional_info == null ) // { // additional_info = new ArrayList(); // additional_inf = new HashMap<>(); // } // // LOGGER.debug(MessageFormat.format("Adding name={0} value={1}", name, value)); // addl_info = new String[2]; // assert(addl_info != null); // addl_info[0] = name; // addl_info[1] = value; // additional_inf.put(name, value); // // additional_info.add(addl_info); // // EVEL_EXIT(); // } /**************************************************************************//** * Adds name value pair under hash key * * * @param hashname String Hash name. * @param name String Name. * @param value String Value. *****************************************************************************/ public void evel_notification_add_namedarray(String hashname,String name, String value) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_OTHER); assert(hashname != null); assert(name != null); assert(value != null); Map mymap = null; try{ if( evelmap == null) evelmap = new HashMap>(); if( evelmap.containsKey(hashname) ) { mymap = evelmap.get(hashname); } else { mymap = new HashMap(); evelmap.put(hashname, mymap); LOGGER.debug("Inserted map hash : "+hashname+" name="+name); } if( mymap.containsKey(name) ) { String val = mymap.get(name); LOGGER.error("Error already contains key " + name + "val "+val ); } else { mymap.put(name, value); LOGGER.debug("Adding hash : "+hashname+" name="+name+"value= "+value); } } catch( Exception e) { e.printStackTrace(); } EVEL_EXIT(); } /**************************************************************************//** * Add a json object to optional jsonObject list. * * @param jsonobj Pointer to json object *****************************************************************************/ public void evel_other_field_add_jsonobj(javax.json.JsonObject jsonobj) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_OTHER); assert(jsonobj != null); LOGGER.debug("Adding jsonObject"); if( additional_objects == null ) additional_objects = new ArrayList(); additional_objects.add(jsonobj); EVEL_EXIT(); } public void evel_notification_addl_info_add(String name, String value) { //String[] addl_info = null; EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); assert(name != null); assert(value != null); if( additional_inf == null ) { // additional_info = new ArrayList(); additional_inf = new HashMap<>(); } LOGGER.debug(MessageFormat.format("Adding name={0} value={1}", name, value)); //addl_info = new String[2]; //assert(addl_inf != null); //addl_info[0] = name; //addl_info[1] = value; additional_inf.put(name, value); // additional_info.add(addl_info); EVEL_EXIT(); } // public void evel_notification_add_changeType_set(String changeTyp) { // EVEL_ENTER(); // // /***************************************************************************/ // /* Check preconditions. */ // /***************************************************************************/ // assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); // assert(changeTyp != null); // // changeType.SetValuePr( // changeTyp, // "notification ChangeType String"); // // EVEL_EXIT(); // } public void evel_notification_add_newState_set(String newStat ){ EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); assert(newStat != null); newState.SetValuePr( newStat, "notification newState String"); EVEL_EXIT(); } public void evel_notification_add_oldState_set(String oldStat) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); assert(oldStat != null); oldState.SetValuePr( oldStat, "notification OldState String"); EVEL_EXIT(); } public void evel_notification_add_changeContact_set(String changeCont) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); assert(changeCont != null); changeContact.SetValuePr( changeCont, "notification ChangeContact String"); EVEL_EXIT(); } public void evel_notification_add_stateInterface_set(String statInter) { EVEL_ENTER(); /***************************************************************************/ /* Check preconditions. */ /***************************************************************************/ assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); assert(statInter != null); stateInterface.SetValuePr( statInter, "notification StateInterface String"); EVEL_EXIT(); } // public void evel_notification_add_changeIdentifier_set(double changeId) { // EVEL_ENTER(); // // /***************************************************************************/ // /* Check preconditions. */ // /***************************************************************************/ // assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); // assert(changeId > 0.0); // // changeIdentifier.SetValuePr( // changeId, // "notification ChangeIdentifier Integer"); // // EVEL_EXIT(); // } // public void evel_notification_add_notificationsFieldVersion_set(int stateChangeFieldsVer) { // EVEL_ENTER(); // // /***************************************************************************/ // /* Check preconditions. */ // /***************************************************************************/ // assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); // assert(stateChangeFieldsVer > 0); // // notificationsFieldVersion.SetValuePr( // stateChangeFieldsVer, // "notification notificationsFieldVersion Int"); // // EVEL_EXIT(); // } // /**************************************************************************//** * Encode the Syslog in JSON according to AT&T's schema. * *****************************************************************************/ JsonObjectBuilder evelNotificationObject() { //String evt_source_type; //double version = major_version+(double)minor_version/10; String version = "2.0"; EVEL_ENTER(); assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); /***************************************************************************/ /* Mandatory fields */ /***************************************************************************/ JsonObjectBuilder obj = Json.createObjectBuilder() .add("changeIdentifier", changeIdentifier) .add("changeType", changeType) .add("notificationFieldsVersion",version); /***************************************************************************/ /* Optional fields */ /***************************************************************************/ newState.encJsonValue(obj, "newState"); oldState.encJsonValue(obj,"oldState"); changeContact.encJsonValue(obj,"changeContact"); stateInterface.encJsonValue(obj, "syslogProc"); // additional fields // if( additional_info != null ) // { // JsonArrayBuilder builder = Json.createArrayBuilder(); // for(int i=0;i> it = additional_inf.entrySet().iterator(); while(it.hasNext()) { Map.Entry add_inf = (Map.Entry)it.next(); String addl_info_key = add_inf.getKey(); String addl_info_value = add_inf.getValue(); // JsonObject obj1 = Json.createObjectBuilder() // .add("name", addl_info_key) // .add("value", addl_info_value).build(); builder.add(addl_info_key, addl_info_value); } obj.add("additionalFields", builder); } if( additional_objects != null && additional_objects.size() > 0 ) { JsonArrayBuilder builder = Json.createArrayBuilder(); for(int i=0;i 0) { JsonArrayBuilder builder = Json.createArrayBuilder(); for(Map.Entry> entry : evelmap.entrySet()){ LOGGER.debug(MessageFormat.format("Key : {0} and Value: {1}", entry.getKey(), entry.getValue())); Map item = entry.getValue(); JsonObjectBuilder obj1 = Json.createObjectBuilder() .add( "name", entry.getKey()); // JsonArrayBuilder builder2 = Json.createArrayBuilder(); JsonObjectBuilder builder2 = Json.createObjectBuilder(); for(Map.Entry entry2 : item.entrySet()){ LOGGER.debug(MessageFormat.format("Key : {0} and Value: {1}", entry2.getKey(), entry2.getValue())); // JsonObjectBuilder obj2 = Json.createObjectBuilder() // .add("name", entry2.getKey()) // .add("value",entry2.getValue()); builder2.add(entry2.getKey(), entry2.getValue()); } obj1.add("hashMap", builder2); builder.add(obj1.build()); } obj.add("arrayOfNamedHashMap", builder); } EVEL_EXIT(); return obj; } JsonObject evel_json_encode_event() { EVEL_ENTER(); assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_NOTIFICATION); JsonObject obj = Json.createObjectBuilder() .add("event", Json.createObjectBuilder() .add( "commonEventHeader",eventHeaderObject() ) .add( "notificationFields", evelNotificationObject() ) ).build(); EVEL_EXIT(); return obj; } }