public void addAttributeListener(DownloadAttributeListener listener, TorrentAttribute attr, int event_type) {
String attribute = convertAttribute(attr);
if (attribute == null) {return;}
CopyOnWriteMap attr_map = this.getAttributeMapForType(event_type);
CopyOnWriteList listener_list = (CopyOnWriteList)attr_map.get(attribute);
boolean add_self = false;
if (listener_list == null) {
listener_list = new CopyOnWriteList();
attr_map.put(attribute, listener_list);
}
add_self = listener_list.isEmpty();
listener_list.add(listener);
if (add_self) {