public void addContactsListener(IContactsListener listener) {
   if (parent != null) parent.addContactsListener(listener);
   else {
     if (listeners == null) listeners = new ListenerList();
     listeners.add(listener);
   }
 }
 public void removeContactsListener(IContactsListener listener) {
   if (parent != null) parent.removeContactsListener(listener);
   else {
     if (listeners != null) {
       listeners.remove(listener);
       if (listeners.isEmpty()) listeners = null;
     }
   }
 }
 protected void fireContactsChanged(ContactsEntry entry) {
   if (parent != null) parent.fireContactsChanged(entry);
   else {
     if (listeners == null) return;
     Object[] rls = listeners.getListeners();
     for (int i = 0; i < rls.length; i++) {
       IContactsListener listener = (IContactsListener) rls[i];
       listener.contactsChanged(this, entry);
     }
   }
 }