1 package org.columba.chat.command; 19 20 import java.util.Iterator ; 21 22 import javax.swing.tree.DefaultMutableTreeNode ; 23 24 import org.columba.api.command.ICommandReference; 25 import org.columba.api.command.IWorkerStatusController; 26 import org.columba.chat.Connection; 27 import org.columba.chat.model.BuddyList; 28 import org.columba.chat.model.BuddyStatus; 29 import org.columba.chat.ui.frame.api.IChatFrameMediator; 30 import org.columba.core.command.Command; 31 import org.jivesoftware.smack.Roster; 32 import org.jivesoftware.smack.RosterEntry; 33 import org.jivesoftware.smack.RosterGroup; 34 import org.jivesoftware.smack.packet.Presence; 35 36 public class PopulateRoasterCommand extends Command { 37 38 private IChatFrameMediator mediator; 39 40 private DefaultMutableTreeNode root; 41 42 private DefaultMutableTreeNode uncategorizedNode; 43 44 public PopulateRoasterCommand(IChatFrameMediator mediator, 45 ICommandReference reference) { 46 super(reference); 47 48 this.mediator = mediator; 49 } 50 51 54 @Override  55 public void updateGUI() throws Exception { 56 mediator.getRoasterTree().populate(root); 57 } 58 59 @Override  60 public void execute(IWorkerStatusController worker) throws Exception { 61 root = new DefaultMutableTreeNode ("Roster"); 62 uncategorizedNode = new DefaultMutableTreeNode ("Uncategorized"); 63 64 Roster roster = Connection.XMPPConnection.getRoster(); 65 66 Iterator it = roster.getGroups(); 68 while (it.hasNext()) { 69 70 RosterGroup group = (RosterGroup) it.next(); 71 DefaultMutableTreeNode child = new DefaultMutableTreeNode (group); 72 73 root.add(child); 74 } 75 76 root.add(uncategorizedNode); 78 79 it = roster.getEntries(); 81 while (it.hasNext()) { 82 RosterEntry entry = (RosterEntry) it.next(); 83 84 BuddyStatus buddy; 86 if (BuddyList.getInstance().exists(entry.getUser())) { 87 buddy = BuddyList.getInstance().getBuddy(entry.getUser()); 89 90 } else { 91 buddy = new BuddyStatus(entry.getUser()); 93 buddy.setName(entry.getName()); 94 BuddyList.getInstance().add(entry.getUser(), buddy); 96 } 97 98 Presence p = roster.getPresence(entry.getUser()); 100 if (p != null) { 101 103 buddy.setPresenceMode(p.getMode()); 104 buddy.setStatusMessage(p.getStatus()); 105 } 106 107 Iterator groups = entry.getGroups(); 109 boolean notAdded = true; 110 while (groups.hasNext()) { 111 RosterGroup group = (RosterGroup) groups.next(); 112 113 DefaultMutableTreeNode parent = findGroup(root, group); 114 115 if (parent != null) { 116 parent.add(new DefaultMutableTreeNode (buddy)); 118 notAdded = false; 119 } 120 } 121 122 if (notAdded == true) 124 uncategorizedNode.add(new DefaultMutableTreeNode (buddy)); 126 127 } 128 129 } 130 131 private DefaultMutableTreeNode findGroup(DefaultMutableTreeNode parent, 132 RosterGroup group) { 133 for (int i = 0; i < parent.getChildCount(); i++) { 134 DefaultMutableTreeNode child = (DefaultMutableTreeNode ) parent 135 .getChildAt(i); 136 137 if (group.equals(child.getUserObject())) 138 return child; 139 140 } 141 142 return null; 143 } 144 145 } 146 | Popular Tags |