From 79943a58653b7255ed9fc0e3cc3dfe4ba379289f Mon Sep 17 00:00:00 2001 From: Sebastian Gutierrez Date: Wed, 24 May 2023 23:06:05 -0300 Subject: [PATCH] add dynamic CDR properties --- .../asteriskjava/manager/event/CdrEvent.java | 16 +++++++++++++ .../manager/util/EventAttributesHelper.java | 24 +++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/asteriskjava/manager/event/CdrEvent.java b/src/main/java/org/asteriskjava/manager/event/CdrEvent.java index 7dc374750..fe15b41f5 100644 --- a/src/main/java/org/asteriskjava/manager/event/CdrEvent.java +++ b/src/main/java/org/asteriskjava/manager/event/CdrEvent.java @@ -19,6 +19,8 @@ import org.asteriskjava.util.DateUtil; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.TimeZone; /** @@ -66,12 +68,14 @@ public class CdrEvent extends ManagerEvent { private String uniqueId; private String userField; private String recordfile; + private Map dynamicProperties; /** * @param source */ public CdrEvent(Object source) { super(source); + dynamicProperties = new HashMap<>(); } /** @@ -521,4 +525,16 @@ public String getRecordfile() { public void setRecordfile(String recordfile) { this.recordfile = recordfile; } + + public Map getDynamicProperties() { + return dynamicProperties; + } + + public void setDynamicProperties(Map dynamicProperties) { + this.dynamicProperties = dynamicProperties; + } + + public void addDynamicProperties(String key, String value) { + this.dynamicProperties.put(key,value); + } } diff --git a/src/main/java/org/asteriskjava/manager/util/EventAttributesHelper.java b/src/main/java/org/asteriskjava/manager/util/EventAttributesHelper.java index 5d8013dc1..e78a4a628 100644 --- a/src/main/java/org/asteriskjava/manager/util/EventAttributesHelper.java +++ b/src/main/java/org/asteriskjava/manager/util/EventAttributesHelper.java @@ -15,6 +15,7 @@ */ package org.asteriskjava.manager.util; +import org.asteriskjava.manager.event.CdrEvent; import org.asteriskjava.manager.event.UserEvent; import org.asteriskjava.manager.response.ManagerResponse; import org.asteriskjava.util.AstUtil; @@ -81,12 +82,25 @@ public static void setAttributes(Object target, Map attributes, // it seems silly to warn if it's a user event -- maybe it was // intentional if (setter == null && !(target instanceof UserEvent) && !target.getClass().equals(ManagerResponse.class)) { - logger.warn("Unable to set property '" + entry.getKey() + "' to '" + entry.getValue() + "' on " - + target.getClass().getName() - + ": no setter. Please report at https://github.com/asterisk-java/asterisk-java/issues"); - for (Map.Entry entry2 : attributes.entrySet()) { - logger.debug("Key: " + entry2.getKey() + " Value: " + entry2.getValue()); + //CDR has dynamic properties + if (target instanceof CdrEvent) { + try { + Method addproperty= CdrEvent.class.getMethod("addDynamicProperties", String.class, String.class); + addproperty.invoke(target, entry.getKey(), entry.getValue().toString()); + } catch (Exception e) { + logger.error("Unable to set Dynamic CDR Property '" + entry.getKey() + "' to '" + entry.getValue(), e); + continue; + } + + } else { + logger.warn("Unable to set property '" + entry.getKey() + "' to '" + entry.getValue() + "' on " + + target.getClass().getName() + + ": no setter. Please report at https://github.com/asterisk-java/asterisk-java/issues"); + + for (Map.Entry entry2 : attributes.entrySet()) { + logger.debug("Key: " + entry2.getKey() + " Value: " + entry2.getValue()); + } } }