package com.sissi.pipeline.in.iq.roster;
import com.sissi.context.JID;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.in.ProxyProcessor;
import com.sissi.protocol.Protocol;
import com.sissi.protocol.iq.roster.Group;
import com.sissi.protocol.iq.roster.GroupItem;
import com.sissi.protocol.iq.roster.Roster;
import com.sissi.protocol.iq.roster.RosterSubscription;
/**
* Roster名册推送
*
* @author kim 2013年12月12日
*/
abstract public class RosterItemProcessor extends ProxyProcessor {
private final Group group;
/**
* @param group 默认Group
*/
public RosterItemProcessor(Group group) {
super();
this.group = group;
}
@Override
public boolean input(JIDContext context, Protocol protocol) {
GroupItem item = protocol.cast(Roster.class).first();
JID to = super.build(item.getJid());
item.addOnEmpty(this.group).setAsk(this.ask()).setSubscription(this.subscription(context.jid(), to)).setJid(to.asStringWithBare());
// Roster Set/Remove From必须=null
super.broadcast(context.jid(), protocol.parent().setFrom((String) null));
return true;
}
/**
* 实现类是否附加ASK
*
* @return
*/
abstract protected boolean ask();
/**
* 实现类附加的订阅关系
*
* @param master
* @param slave
* @return
*/
abstract protected RosterSubscription subscription(JID master, JID slave);
}