package com.sissi.protocol.iq.search;
import java.util.Iterator;
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 javax.xml.bind.annotation.XmlType;
import com.sissi.field.Field;
import com.sissi.field.Fields;
import com.sissi.field.impl.BeanFields;
import com.sissi.io.read.Collector;
import com.sissi.io.read.Metadata;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.iq.data.XData;
import com.sissi.protocol.iq.search.field.Email;
import com.sissi.protocol.iq.search.field.First;
import com.sissi.protocol.iq.search.field.Instructions;
import com.sissi.protocol.iq.search.field.Item;
import com.sissi.protocol.iq.search.field.Last;
import com.sissi.protocol.iq.search.field.Nick;
/**
* @author kim 2014年6月6日
*/
@Metadata(uri = Search.XMLNS, localName = Search.NAME)
@XmlType(namespace = Search.XMLNS)
@XmlRootElement(name = Search.NAME)
public class Search extends Protocol implements Fields, Collector {
public final static String XMLNS = "jabber:iq:search";
public final static String NAME = "query";
private final BeanFields fields = new BeanFields(false);
private XData data;
@XmlAttribute
public String getXmlns() {
return XMLNS;
}
@XmlElements({ @XmlElement(name = XData.NAME, type = XData.class), @XmlElement(name = Email.NAME, type = Email.class), @XmlElement(name = First.NAME, type = First.class), @XmlElement(name = Last.NAME, type = Last.class), @XmlElement(name = Nick.NAME, type = Nick.class), @XmlElement(name = Item.NAME, type = Item.class), @XmlElement(name = Instructions.NAME, type = Instructions.class) })
public List<Field<?>> getFields() {
return this.fields.getFields();
}
public Search x(XData data) {
this.data = data;
return this;
}
@XmlElement
public XData getX() {
return this.data;
}
public Search add(Field<?> field) {
this.fields.add(field);
return this;
}
public Search add(Fields fields) {
this.fields.add(fields);
return this;
}
@Override
public void set(String localName, Object ob) {
switch (localName) {
case XData.NAME:
this.x(XData.class.cast(ob));
default:
this.add(Field.class.cast(ob));
}
}
public Search addField(Field<?> field) {
this.fields.add(field);
return this;
}
@Override
public Iterator<Field<?>> iterator() {
return this.fields.iterator();
}
public Fields findFields(String name) {
return this.fields.findFields(name);
}
@Override
public <T extends Field<?>> T findField(String name, Class<T> clazz) {
return this.fields.findField(name, clazz);
}
@Override
public boolean isEmbed() {
return this.fields.isEmbed();
}
public boolean isEmpty() {
return this.fields.isEmpty();
}
public Search clear() {
this.fields.reset();
return this;
}
public boolean form(boolean needForm) {
return (this.getX() != null) == needForm;
}
}