package com.sissi.protocol.iq.roster;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import com.sissi.io.read.Collector;
import com.sissi.io.read.Metadata;
import com.sissi.protocol.Protocol;
/**
* @author kim 2013-10-31
*/
@Metadata(uri = Roster.XMLNS, localName = Roster.NAME)
@XmlRootElement(name = Roster.NAME)
public class Roster extends Protocol implements Collector {
public final static String XMLNS = "jabber:iq:roster";
public final static String NAME = "query";
private List<GroupItem> item;
private GroupItem firstItem;
public Roster() {
super();
}
public Roster(GroupItem item) {
this.add(item);
}
@XmlAttribute
public String getXmlns() {
return XMLNS;
}
public Roster add(GroupItem item) {
if (this.item == null) {
this.item = new ArrayList<GroupItem>();
}
this.item.add(item);
return this;
}
public GroupItem first() {
return this.firstItem != null ? this.firstItem : this.firstCached();
}
private GroupItem firstCached() {
return !this.item.isEmpty() ? (this.firstItem = this.item.get(0)) : (this.firstItem = null);
}
@XmlElements({ @XmlElement(name = GroupItem.NAME, type = GroupItem.class) })
public List<GroupItem> getItem() {
return this.item;
}
@Override
public void set(String localName, Object protocol) {
this.add(GroupItem.class.cast(protocol));
}
public Roster clear() {
super.clear();
this.item = null;
return this;
}
/**
* 压缩GroupItem数量
*
* @param item
* @return
*/
public Roster trim(Integer item) {
if (this.item != null && this.item.size() > item) {
GroupItem need = this.first();
this.item.clear();
this.item.add(need);
}
return this;
}
}