📄 roster.java
字号:
Element query = element.element(new QName("query", Namespace.get("jabber:iq:roster")));
if (query != null) {
for (Iterator i=query.elementIterator("item"); i.hasNext(); ) {
Element item = (Element)i.next();
String jid = item.attributeValue("jid");
String name = item.attributeValue("name");
String ask = item.attributeValue("ask");
String subscription = item.attributeValue("subscription");
Collection<String> groups = new ArrayList<String>();
for (Iterator j=item.elementIterator("group"); j.hasNext(); ) {
Element group = (Element)j.next();
groups.add(group.getTextTrim());
}
Ask askStatus = ask == null ? null : Ask.valueOf(ask);
Subscription subStatus = subscription == null ?
null : Subscription.valueOf(subscription);
items.add(new Item(new JID(jid), name, askStatus, subStatus, groups));
}
}
return Collections.unmodifiableCollection(items);
}
/**
* Returns a deep copy of this Roster.
*
* @return a deep copy of this Roster.
*/
public Roster createCopy() {
return new Roster(this);
}
/**
* Item in a roster, which represents an individual contact. Each contact
* has a JID, an optional nickname, a subscription type, and can belong to
* one ore more groups.
*/
public static class Item {
private JID jid;
private String name;
private Ask ask;
private Subscription subscription;
private Collection<String> groups;
/**
* Constructs a new roster item.
*
* @param jid the JID.
* @param name the nickname.
* @param ask the ask state.
* @param subscription the subscription state.
* @param groups the item groups.
*/
private Item(JID jid, String name, Ask ask, Subscription subscription,
Collection<String> groups) {
this.jid = jid;
this.name = name;
this.ask = ask;
this.subscription = subscription;
this.groups = groups;
}
/**
* Returns the JID associated with this item. The JID is the "key" in the
* list of items that make up a roster. There can only be a single item per
* JID in a roster.
*
* @return the JID associated with this item.
*/
public JID getJID() {
return jid;
}
/**
* Returns the nickname associated with this item. If no nickname exists,
* <tt>null</tt> is returned.
*
* @return the nickname, or <tt>null</tt> if it doesn't exist.
*/
public String getName() {
return name;
}
/**
* Returns the ask state of this item.
*
* @return the ask state of this item.
*/
public Ask getAsk() {
return ask;
}
/**
* Returns the subscription state of this item.
*
* @return the subscription state of this item.
*/
public Subscription getSubscription() {
return subscription;
}
/**
* Returns a Collection of the groups defined in this item. If
* no groups are defined, an empty Collection is returned.
*
* @return the groups in this item.
*/
public Collection<String> getGroups() {
if (groups == null) {
return Collections.emptyList();
}
return groups;
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("<item ");
buf.append("jid=\"").append(jid).append("\"");
if (name != null) {
buf.append(" name=\"").append(name).append("\"");
}
buf.append(" subscrption=\"").append(subscription).append("\"");
if (groups == null || groups.isEmpty()) {
buf.append("/>");
}
else {
buf.append(">\n");
for (String group : groups) {
buf.append(" <group>").append(group).append("</group>\n");
}
buf.append("</item>");
}
return buf.toString();
}
}
/**
* Type-safe enumeration for the roster subscription type. Valid subcription types:
*
* <ul>
* <li>{@link #none Roster.Subscription.none} -- the user does not have a
* subscription to the contact's presence information, and the contact
* does not have a subscription to the user's presence information.
* <li>{@link #to Roster.Subscription.to} -- the user has a subscription to
* the contact's presence information, but the contact does not have a
* subscription to the user's presence information.
* <li>{@link #from Roster.Subscription.from} -- the contact has a subscription
* to the user's presence information, but the user does not have a
* subscription to the contact's presence information.
* <li>{@link #both Roster.Subscription.both} -- both the user and the contact
* have subscriptions to each other's presence information.
* <li>{@link #remove Roster.Subscription.remove} -- the user is removing a
* contact from his or her roster.
* </ul>
*/
public enum Subscription {
/**
* The user does not have a subscription to the contact's presence information,
* and the contact does not have a subscription to the user's presence information.
*/
none,
/**
* The user has a subscription to the contact's presence information, but the
* contact does not have a subscription to the user's presence information.
*/
to,
/**
* The contact has a subscription to the user's presence information, but the
* user does not have a subscription to the contact's presence information.
*/
from,
/**
* Both the user and the contact have subscriptions to each other's presence
* information.
*/
both,
/**
* The user is removing a contact from his or her roster. The user's server will
* 1) automatically cancel any existing presence subscription between the user and the
* contact, 2) remove the roster item from the user's roster and inform all of the user's
* available resources that have requested the roster of the roster item removal, 3) inform
* the resource that initiated the removal of success and 4) send unavailable presence from
* all of the user's available resources to the contact.
*/
remove;
}
/**
* Type-safe enumeration for the roster ask type. Valid ask types:
*
* <ul>
* <li>{@link #subscribe Roster.Ask.subscribe} -- the roster item has been asked
* for permission to subscribe to their presence but no response has been received.
* <li>{@link #unsubscribe Roster.Ask.unsubscribe} -- the roster owner has asked
* to the roster item to unsubscribe from it's presence but has not received
* confirmation.
* </ul>
*/
public enum Ask {
/**
* The roster item has been asked for permission to subscribe to their presence
* but no response has been received.
*/
subscribe,
/**
* The roster owner has asked to the roster item to unsubscribe from it's
* presence but has not received confirmation.
*/
unsubscribe;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -