package com.sissi.protocol.iq.bytestreams; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; 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.config.Dictionary; import com.sissi.io.read.Collector; import com.sissi.io.read.Metadata; import com.sissi.protocol.Protocol; import com.sissi.protocol.iq.si.Si; import com.sissi.server.exchange.Tracer; /** * @author kim 2013年12月18日 */ @Metadata(uri = Bytestreams.XMLNS, localName = Bytestreams.NAME) @XmlType(namespace = Bytestreams.XMLNS) @XmlRootElement(name = Bytestreams.NAME) public class Bytestreams extends Protocol implements Tracer, Collector { public final static String XMLNS = "http://jabber.org/protocol/bytestreams"; public final static String NAME = "query"; private StreamhostUsed streamhostUsed; private StreamhostActivate activate; private List<Streamhost> streamhosts; private String sid; private String mode; public boolean used() { return this.streamhostUsed != null; } public boolean activated() { return this.activate != null; } public Bytestreams setSid(String sid) { this.sid = sid; return this; } public Bytestreams setMode(String mode) { this.mode = mode; return this; } @XmlAttribute public String getMode() { return this.mode; } public boolean sid() { return this.getSid() != null; } @XmlAttribute public String getSid() { return this.sid; } @XmlAttribute public String getXmlns() { return XMLNS; } @XmlElements({ @XmlElement(name = Streamhost.NAME, type = Streamhost.class) }) public List<Streamhost> getStreamhost() { return this.streamhosts; } @XmlElement(name = StreamhostUsed.NAME) public StreamhostUsed getStreamhostUsed() { return this.streamhostUsed; } public Bytestreams setStreamhostUsed(StreamhostUsed streamhostUsed) { this.streamhostUsed = streamhostUsed; this.streamhosts = null; return this; } public Bytestreams add(Streamhost streamhost, boolean clear) { if (clear) { this.streamhosts = null; } return this.add(streamhost); } public Bytestreams add(Streamhost streamhost) { if (this.streamhosts == null) { this.streamhosts = new ArrayList<Streamhost>(); } this.streamhosts.add(streamhost); return this; } public Bytestreams sort(Comparator<Streamhost> comparator) { if (this.streamhosts != null) { Collections.sort(this.streamhosts, comparator); } return this; } @Override public String id() { return this.parent().getId(); } @Override public String target() { return this.parent().getTo(); } @Override public String initiator() { return this.parent().getFrom(); } @Override public Map<String, Object> plus() { Map<String, Object> plus = new HashMap<String, Object>(); plus.put(Dictionary.FIELD_HOST, new Si().setId(this.getSid()).host(this.parent().getFrom(), this.parent().getTo())); return plus; } @Override public void set(String localName, Object ob) { switch (localName) { case Streamhost.NAME: this.add(Streamhost.class.cast(ob)); return; case StreamhostUsed.NAME: this.streamhostUsed = StreamhostUsed.class.cast(ob); return; case StreamhostActivate.NAME: this.activate = StreamhostActivate.class.cast(ob); return; } } }