[Asterisk-java-cvs] CVS: asterisk-java/src/java/net/sf/asterisk/manager/impl EventBuilderImpl.java,1
Brought to you by:
srt
From: Stefan R. <sr...@us...> - 2005-08-27 02:27:08
|
Update of /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager/impl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24984/src/java/net/sf/asterisk/manager/impl Modified Files: EventBuilderImpl.java Log Message: Added new attribute "Cause-txt" to HangupEvent Added handling of special charaters in event attribute names Index: EventBuilderImpl.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/manager/impl/EventBuilderImpl.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -p -r1.9 -r1.10 --- EventBuilderImpl.java 26 Jul 2005 12:16:02 -0000 1.9 +++ EventBuilderImpl.java 27 Aug 2005 02:26:59 -0000 1.10 @@ -153,26 +153,31 @@ public class EventBuilderImpl implements String eventType; className = clazz.getName(); - eventType = className.substring(className.lastIndexOf('.') + 1).toLowerCase(); + eventType = className.substring(className.lastIndexOf('.') + 1) + .toLowerCase(); if (eventType.endsWith("event")) { - eventType = eventType.substring(0, eventType.length() - "event".length()); + eventType = eventType.substring(0, eventType.length() + - "event".length()); } - if (UserEvent.class.isAssignableFrom(clazz) && ! eventType.startsWith("userevent")) + if (UserEvent.class.isAssignableFrom(clazz) + && !eventType.startsWith("userevent")) { eventType = "userevent" + eventType; } - + registerEventClass(eventType, clazz); } /** * Registers a new event class for the event given by eventType. * - * @param eventType the name of the event to register the class for. For example "Join". - * @param clazz the event class to register, must extend net.sf.asterisk.manager.event.Event. + * @param eventType the name of the event to register the class for. For + * example "Join". + * @param clazz the event class to register, must extend + * net.sf.asterisk.manager.event.Event. */ public void registerEventClass(String eventType, Class clazz) { @@ -190,21 +195,25 @@ public class EventBuilderImpl implements try { - defaultConstructor = clazz.getConstructor(new Class[]{Object.class}); + defaultConstructor = clazz + .getConstructor(new Class[]{Object.class}); } catch (NoSuchMethodException ex) { - throw new IllegalArgumentException(clazz + " has no usable constructor"); + throw new IllegalArgumentException(clazz + + " has no usable constructor"); } if ((defaultConstructor.getModifiers() & Modifier.PUBLIC) == 0) { - throw new IllegalArgumentException(clazz + " has no public default constructor"); + throw new IllegalArgumentException(clazz + + " has no public default constructor"); } registeredEventClasses.put(eventType.toLowerCase(), clazz); - logger.debug("Registered event type '" + eventType + "' (" + clazz + ")"); + logger.debug("Registered event type '" + eventType + "' (" + clazz + + ")"); } public ManagerEvent buildEvent(Object source, Map attributes) @@ -224,7 +233,8 @@ public class EventBuilderImpl implements eventClass = (Class) registeredEventClasses.get(eventType); if (eventClass == null) { - logger.warn("No event class registered for event type '" + eventType + "', attributes: " + attributes); + logger.warn("No event class registered for event type '" + + eventType + "', attributes: " + attributes); return null; } @@ -240,7 +250,8 @@ public class EventBuilderImpl implements try { - event = (ManagerEvent) constructor.newInstance(new Object[]{source}); + event = (ManagerEvent) constructor + .newInstance(new Object[]{source}); } catch (Exception ex) { @@ -263,7 +274,8 @@ public class EventBuilderImpl implements if (actionId != null) { responseEvent.setActionId(Util.stripInternalActionId(actionId)); - responseEvent.setInternalActionId(Util.getInternalActionId(actionId)); + responseEvent.setInternalActionId(Util + .getInternalActionId(actionId)); } } @@ -292,8 +304,9 @@ public class EventBuilderImpl implements } /* - * The source property needs special handling as it is already defined in - * java.util.EventObject (the base class of ManagerEvent), so we have to translate it. + * The source property needs special handling as it is already + * defined in java.util.EventObject (the base class of + * ManagerEvent), so we have to translate it. */ if ("source".equals(name)) { @@ -301,20 +314,22 @@ public class EventBuilderImpl implements } else { - setter = (Method) setters.get(name); + setter = (Method) setters.get(stripIllegalCharacters(name)); } if (setter == null) { - logger.error("Unable to set property '" + name + "' on " + event.getClass() + ": no setter"); + logger.error("Unable to set property '" + name + "' on " + + event.getClass() + ": no setter"); continue; } dataType = setter.getParameterTypes()[0]; - + if (dataType == Boolean.class) { - value = new Boolean(AstUtil.isTrue((String) attributes.get(name))); + value = new Boolean(AstUtil.isTrue((String) attributes + .get(name))); } else if (dataType.isAssignableFrom(String.class)) { @@ -324,13 +339,17 @@ public class EventBuilderImpl implements { try { - Constructor constructor = dataType.getConstructor(new Class[]{String.class}); - value = constructor.newInstance(new Object[]{attributes.get(name)}); + Constructor constructor = dataType + .getConstructor(new Class[]{String.class}); + value = constructor.newInstance(new Object[]{attributes + .get(name)}); } catch (Exception e) { - logger.error("Unable to convert value '" + attributes.get(name) + "' of property '" + name - + "' on " + event.getClass() + " to required type " + dataType, e); + logger.error("Unable to convert value '" + + attributes.get(name) + "' of property '" + name + + "' on " + event.getClass() + " to required type " + + dataType, e); continue; } } @@ -341,10 +360,68 @@ public class EventBuilderImpl implements } catch (Exception e) { - logger.error("Unable to set property '" + name + "' on " + event.getClass(), e); + logger.error("Unable to set property '" + name + "' on " + + event.getClass(), e); + continue; + } + } + } + + /** + * Strips all illegal charaters from the given lower case string. + * + * @param s the original string + * @return the string with all illegal characters stripped + */ + private String stripIllegalCharacters(String s) + { + char c; + boolean needsStrip = false; + StringBuffer sb; + + if (s == null) + { + return null; + } + + for (int i = 0; i < s.length(); i++) + { + c = s.charAt(i); + if (c >= '0' && c <= '9') + { + continue; + } + else if (c >= 'a' && c <= 'z') + { continue; } + else + { + needsStrip = true; + break; + } + } + + if (!needsStrip) + { + return s; } + + sb = new StringBuffer(s.length()); + for (int i = 0; i < s.length(); i++) + { + c = s.charAt(i); + if (c >= '0' && c <= '9') + { + sb.append(c); + } + else if (c >= 'a' && c <= 'z') + { + sb.append(c); + } + } + + return sb.toString(); } private Map getSetters(Class clazz) |