I found the Presence Service bug! It only took 3 days. I spent the first 1/2 day exercising my bug hunting powers in earnest. All this revealed was that the bug could be anywhere and it would be wise to eliminate some of its hiding places.
First I rewrote the Buddy List view and model so that it used the domain classes directly. This caused me to rethink and refactor some things in the domain, particularly consolidating the source of all Presence events into the MindshareGroup class. Its nice to have events that start at the actual source of the event, Its also nice to have them aggregated at one location so listeners don’t have to register with 4 different object.
After all this work the bug was still manifesting itself. I should have had more confidence in my existing display code. Once the display and network components were eliminated it was easy to find the bug in the controller. This prompted more refactoring to consolidate controller function into the Member Registry to avoid this happening again.
As a side bonus the groups now have a nice icon in the buddy list. I also learned allot about TreeModels and TreeModelEvents, things I will need for the group share work. Also the Buddy List display should be easier to modify when the back end is inevitably changed. Not a total wast of time but still no forward progress.
I’ve posted a new version with the changes.