package jimmui.model.roster;
import jimm.comm.Util;
import jimmui.updater.RosterUpdater;
import jimmui.view.roster.ContactListModel;
import jimmui.view.roster.items.GroupBranch;
import jimmui.view.roster.items.ProtocolBranch;
import jimmui.view.roster.items.TreeNode;
import protocol.Protocol;
import protocol.Roster;
import java.util.Hashtable;
import java.util.Vector;
/**
* Created with IntelliJ IDEA.
* <p/>
* Date: 20.06.13 21:00
*
* @author vladimir
*/
public class ProtocolContactModel extends ContactListModel {
private Hashtable<Protocol, ProtocolBranch> protos = new Hashtable<Protocol, ProtocolBranch>();
public void buildFlatItems(Vector<TreeNode> items) {
final int count = getProtocolCount();
for (int i = 0; i < count; ++i) {
Protocol p = getProtocol(i);
ProtocolBranch root = (ProtocolBranch) protos.get(p);
items.addElement(root);
if (!root.isExpanded()) continue;
synchronized (p.getRosterLockObject()) {
rebuildContacts(root.getSortedContacts(), items);
}
}
}
public void updateOrder(RosterUpdater.Update u) {
getProtocolNode(u).sort();
}
public void removeGroup(RosterUpdater.Update u) {
}
public void addGroup(RosterUpdater.Update u) {
Util.addNew(getProtocolNode(u).getSortedContacts(), u.protocol.getContacts(u.group));
}
public void addToGroup(RosterUpdater.Update update) {
ProtocolBranch pb = getProtocolNode(update);
pb.getSortedContacts().addElement(update.contact);
}
public void removeFromGroup(RosterUpdater.Update update) {
ProtocolBranch pb = getProtocolNode(update);
pb.getSortedContacts().removeElement(update.contact);
}
public GroupBranch getGroupNode(RosterUpdater.Update u) {
return null;
}
public ProtocolBranch getProtocolNode(RosterUpdater.Update u) {
return (ProtocolBranch) protos.get(u.protocol);
}
@Override
public boolean hasGroups() {
return false;
}
public void updateProtocol(Protocol protocol, Roster oldRoster) {
ProtocolBranch protocolBranch = new ProtocolBranch(protocol);
protos.put(protocol, protocolBranch);
Util.addAll(protocolBranch.getSortedContacts(), protocol.getContactItems());
protocolBranch.sort();
}
}