package com.sissi.pipeline.in.iq.muc.admin.role;
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.muc.Item;
import com.sissi.protocol.muc.XMucAdmin;
import com.sissi.protocol.muc.XUser;
import com.sissi.ucenter.relation.muc.MucRelation;
import com.sissi.ucenter.relation.muc.MucRelationMapping;
import com.sissi.ucenter.relation.muc.room.Room;
import com.sissi.ucenter.relation.muc.room.RoomBuilder;
import com.sissi.ucenter.relation.muc.room.RoomConfig;
import com.sissi.ucenter.relation.muc.status.CodeStatusAdder;
/**
* 更新角色广播
*
* @author kim 2014年3月14日
*/
public class MucSetRoleBroadcastProcessor extends ProxyProcessor {
private final RoomBuilder room;
private final CodeStatusAdder judger;
private final MucRelationMapping mapping;
public MucSetRoleBroadcastProcessor(RoomBuilder room, CodeStatusAdder judger, MucRelationMapping mapping) {
super();
this.room = room;
this.judger = judger;
this.mapping = mapping;
}
@Override
public boolean input(JIDContext context, Protocol protocol) {
JID group = super.build(protocol.parent().getTo());
Room room = this.room.build(group);
for (Item item : protocol.cast(XMucAdmin.class).getItem()) {
// 同Nickname多JID
for (JID each : this.mapping.mapping(item.actor(context.jid()).group(group))) {
MucRelation relation = super.ourRelation(each, group).cast(MucRelation.class);
for (JID to : super.whoSubscribedMe(group)) {
super.findOne(to, true).write(item.presence().add(this.judger.add(new XUser(group, to, room.allowed(to, RoomConfig.WHOISEXISTS)).item(item.hidden(room.allowed(to, RoomConfig.WHOISALLOW, each)).relation(relation.cast(MucRelation.class).role(item.getRole(), true)).actor(context.jid()))).cast(XUser.class)));
}
}
}
return true;
}
}