package com.sissi.protocol.iq;
import java.util.ArrayList;
import java.util.List;
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.Element;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.error.ServerError;
import com.sissi.protocol.iq.ack.ServerAck;
import com.sissi.protocol.iq.bind.Bind;
import com.sissi.protocol.iq.block.BlockList;
import com.sissi.protocol.iq.block.Blocked;
import com.sissi.protocol.iq.block.UnBlock;
import com.sissi.protocol.iq.bytestreams.Bytestreams;
import com.sissi.protocol.iq.disco.DiscoInfo;
import com.sissi.protocol.iq.disco.DiscoItems;
import com.sissi.protocol.iq.last.Last;
import com.sissi.protocol.iq.last.Last.LastSeconds;
import com.sissi.protocol.iq.ping.Ping;
import com.sissi.protocol.iq.privated.Privated;
import com.sissi.protocol.iq.register.Register;
import com.sissi.protocol.iq.roster.Roster;
import com.sissi.protocol.iq.search.Search;
import com.sissi.protocol.iq.session.Session;
import com.sissi.protocol.iq.sharedgroup.Sharedgroup;
import com.sissi.protocol.iq.si.Si;
import com.sissi.protocol.iq.time.Time;
import com.sissi.protocol.iq.vcard.VCard;
import com.sissi.protocol.iq.version.Client;
import com.sissi.protocol.muc.Owner;
import com.sissi.protocol.muc.Unique;
import com.sissi.protocol.muc.Unique.UniqueSequence;
import com.sissi.protocol.muc.XMucAdmin;
/**
* @author Kim.shen 2013-10-16
*/
@Metadata(uri = IQ.XMLNS, localName = IQ.NAME)
@XmlRootElement
public class IQ extends Protocol implements Collector {
public final static String XMLNS = "jabber:client";
public final static String NAME = "iq";
private final static List<Protocol> empty = new ArrayList<Protocol>();
private List<Element> extras;
private List<Protocol> protocols;
public IQ setId(String id) {
super.setId(id);
return this;
}
public IQ setFrom(String from) {
super.setFrom(from);
return this;
}
@XmlElements({ @XmlElement(name = Search.NAME, type = Search.class), @XmlElement(name = Privated.NAME, type = Privated.class), @XmlElement(name = Unique.NAME, type = Unique.class), @XmlElement(name = Sharedgroup.NAME, type = Sharedgroup.class), @XmlElement(name = Owner.NAME, type = Owner.class), @XmlElement(name = XMucAdmin.NAME, type = XMucAdmin.class), @XmlElement(name = ServerAck.NAME, type = ServerAck.class), @XmlElement(name = Client.NAME, type = Client.class), @XmlElement(name = Time.NAME, type = Time.class), @XmlElement(name = Last.NAME, type = Last.class), @XmlElement(name = Last.NAME, type = LastSeconds.class), @XmlElement(name = Ping.NAME, type = Ping.class), @XmlElement(name = Si.NAME, type = Si.class), @XmlElement(name = VCard.NAME, type = VCard.class), @XmlElement(name = Bind.NAME, type = Bind.class), @XmlElement(name = Session.NAME, type = Session.class), @XmlElement(name = Roster.NAME, type = Roster.class), @XmlElement(name = Register.NAME, type = Register.class), @XmlElement(name = DiscoInfo.NAME, type = DiscoInfo.class), @XmlElement(name = DiscoItems.NAME, type = DiscoItems.class), @XmlElement(name = Bytestreams.NAME, type = Bytestreams.class), @XmlElement(name = Blocked.NAME, type = Blocked.class), @XmlElement(name = UnBlock.NAME, type = UnBlock.class), @XmlElement(name = BlockList.NAME, type = BlockList.class) })
public List<Protocol> getProtocols() {
return this.protocols;
}
@XmlElements({ @XmlElement(name = Unique.NAME, type = UniqueSequence.class), @XmlElement(name = Last.NAME, type = LastSeconds.class) })
public List<Element> getExtras() {
return this.extras;
}
public IQ add(Protocol protocol) {
if (this.protocols == null) {
this.protocols = new ArrayList<Protocol>();
}
this.protocols.add(protocol.parent(this));
return this;
}
public IQ add(Element extra) {
if (this.extras == null) {
this.extras = new ArrayList<Element>();
}
this.extras.add(extra);
return this;
}
public List<Protocol> list() {
return this.protocols != null ? this.protocols : empty;
}
@XmlElement
public ServerError getError() {
return super.getError();
}
public IQ clear() {
this.protocols = null;
this.extras = null;
return this;
}
@Override
public void set(String localName, Object ob) {
this.add(Protocol.class.cast(ob));
}
}