package com.sissi.ucenter.relation.muc.validate.validator;
import com.sissi.context.JID;
import com.sissi.context.JIDContext;
import com.sissi.protocol.ProtocolType;
import com.sissi.protocol.error.ServerError;
import com.sissi.protocol.error.detail.NotAllowed;
import com.sissi.protocol.muc.ItemAffiliation;
import com.sissi.ucenter.relation.RelationContext;
import com.sissi.ucenter.relation.muc.MucRelation;
import com.sissi.ucenter.relation.muc.validate.ItemStatus;
import com.sissi.ucenter.relation.muc.validate.ItemValidator;
import com.sissi.ucenter.relation.muc.validate.status.ValidItemStatus;
import com.sissi.ucenter.relation.muc.validate.status.WrongItemStatus;
/**
* Item岗位有效性校验
*
* @author kim 2014年4月19日
*/
public class ItemAffiliationValidator implements ItemValidator {
private final ItemStatus status = new WrongItemStatus(new ServerError().type(ProtocolType.AUTH).add(NotAllowed.DETAIL));
private final RelationContext relationContext;
public ItemAffiliationValidator(RelationContext relationContext) {
super();
this.relationContext = relationContext;
}
/*
* Item岗位必须不包含发起人的岗位(至少小于)且不为Loop
*
* @see com.sissi.ucenter.relation.muc.validate.ItemValidator#valdate(com.sissi.context.JIDContext, com.sissi.context.JID, com.sissi.context.JID)
*/
@Override
public ItemStatus valdate(JIDContext invoker, JID group, JID item) {
return !invoker.jid().like(item) && ItemAffiliation.parse(this.relationContext.ourRelation(item, group).cast(MucRelation.class).affiliation()).contains(this.relationContext.ourRelation(invoker.jid(), group).cast(MucRelation.class).affiliation()) ? this.status : ValidItemStatus.INSTANCE;
}
}