package com.sissi.ucenter.relation.roster.impl;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.sissi.config.Dictionary;
import com.sissi.protocol.iq.roster.Group;
import com.sissi.protocol.iq.roster.GroupItem;
import com.sissi.protocol.iq.roster.RosterSubscription;
import com.sissi.ucenter.relation.Relation;
import com.sissi.ucenter.relation.roster.RosterRelation;
/**
* Roster Item包装</p><query xmlns='jabber:iq:roster'><item jid='romeo@example.net' name='Romeo' subscription='both'><group>Friends</group></item>...</query>
*
* @author kim 2013-11-6
*/
public class ItemRosterRelation implements RosterRelation {
private final RosterRelation relation;
private final GroupItem item;
public ItemRosterRelation(RosterRelation relation, GroupItem item) {
super();
this.relation = relation;
this.item = item;
}
@Override
public String jid() {
return this.item.getJid();
}
@Override
public String name() {
return this.item.getName();
}
@Override
public boolean ask() {
return this.relation.activate() ? this.relation.ask() : true;
}
@Override
public String[] groups() {
if (this.item.getGroup() != null) {
Set<String> groups = new HashSet<String>();
for (Group group : this.item.getGroup()) {
groups.add(group.getValue());
}
return groups.toArray(new String[] {});
} else {
return null;
}
}
public boolean activate() {
return this.relation.activate();
}
@Override
public String subscription() {
return this.relation.subscription();
}
public boolean in(String... subscriptions) {
return RosterSubscription.parse(this.relation.subscription()).in(subscriptions);
}
public Map<String, Object> plus() {
Map<String, Object> plus = new HashMap<String, Object>();
if (this.ask()) {
plus.put(Dictionary.FIELD_ACK, this.ask());
}
plus.put(Dictionary.FIELD_GROUPS, this.groups());
return plus;
}
@Override
public <T extends Relation> T cast(Class<T> clazz) {
return clazz.cast(this);
}
}