package com.sissi.ucenter.relation.roster.impl;
import java.util.Map;
import com.mongodb.DBObject;
import com.sissi.config.Dictionary;
import com.sissi.config.impl.MongoUtils;
import com.sissi.protocol.iq.roster.RosterSubscription;
import com.sissi.ucenter.relation.Relation;
import com.sissi.ucenter.relation.roster.RosterRelation;
/**
* Mongo Item包装
*
* @author kim 2014年4月22日
*/
public class MongoRosterRelation implements RosterRelation {
private final String jid;
private final String name;
private final boolean ask;
private final boolean activate;
private final String[] groups;
private final Integer subscription;
private final Map<String, Object> plus;
/**
* @param db
* @param role
* @param groups 默认Groups
* @param plus
*/
public MongoRosterRelation(DBObject db, String role, String[] groups, Map<String, Object> plus) {
super();
this.plus = plus;
this.jid = MongoUtils.asString(db, role);
this.ask = MongoUtils.asBoolean(db, Dictionary.FIELD_ACK);
this.name = MongoUtils.asString(db, Dictionary.FIELD_NICK);
this.activate = MongoUtils.asBoolean(db, Dictionary.FIELD_ACTIVATE);
this.subscription = MongoUtils.asInt(db, Dictionary.FIELD_STATUS, 0);
this.groups = MongoUtils.asStrings(db, Dictionary.FIELD_GROUPS, groups);
}
public String jid() {
return this.jid;
}
public String name() {
return this.name;
}
@Override
public boolean ask() {
return this.ask;
}
public boolean activate() {
return this.activate;
}
public boolean in(String... subscriptions) {
return RosterSubscription.parse(this.subscription()).in(subscriptions);
}
public String[] groups() {
return this.groups;
}
public String subscription() {
return RosterSubscription.toString(this.subscription);
}
public Map<String, Object> plus() {
return this.plus;
}
@Override
public <T extends Relation> T cast(Class<T> clazz) {
return clazz.cast(this);
}
}