package com.sissi.ucenter.relation.roster.impl; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DBObject; import com.sissi.config.Dictionary; import com.sissi.config.MongoConfig; import com.sissi.context.JID; import com.sissi.protocol.iq.roster.RosterSubscription; import com.sissi.ucenter.relation.Relation; import com.sissi.ucenter.relation.impl.DefaultRelation; /** * 获取订阅关系. 索引策略1: {"master":1,"slave":1}</p> 索引策略2: {"slave":1,"master":1}, * * @author kim 2014年4月22日 */ public class MongoOurRelation { private final Map<String, Object> plus = Collections.unmodifiableMap(new HashMap<String, Object>()); private final MongoConfig config; private final String[] groups; /** * @param config * @param groups 默认Group */ public MongoOurRelation(MongoConfig config, String[] groups) { super(); this.config = config; this.groups = groups; } public Relation ourRelation(JID from, JID to) { DBObject db = this.config.collection().findOne(this.buildQuery(from.asStringWithBare(), to.asStringWithBare())); return db != null ? new MongoRosterRelation(db, Dictionary.FIELD_SLAVE, this.groups, this.plus) : new DefaultRelation(to, RosterSubscription.NONE.toString()); } /** * {"master":1,"slave":1} * * @param master * @param slave * @return */ public DBObject buildQuery(String master, String slave) { return BasicDBObjectBuilder.start().add(Dictionary.FIELD_MASTER, master).add(Dictionary.FIELD_SLAVE, slave).get(); } }