Package com.sissi.ucenter.relation.muc.affiliation.impl

Source Code of com.sissi.ucenter.relation.muc.affiliation.impl.MongoAffiliationBuilder$MongoAffiliationUpdater

package com.sissi.ucenter.relation.muc.affiliation.impl;

import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.sissi.config.Dictionary;
import com.sissi.config.MongoConfig;
import com.sissi.config.impl.MongoUtils;
import com.sissi.context.JID;
import com.sissi.protocol.muc.ItemAffiliation;
import com.sissi.ucenter.relation.muc.affiliation.AffiliationBuilder;
import com.sissi.ucenter.relation.muc.affiliation.AffiliationUpdater;

/**
* 索引策略: {"jid":1,"affiliations.jid":1}
* @author kim 2014年3月9日
*/
public class MongoAffiliationBuilder implements AffiliationBuilder {

  private final MongoConfig config;

  public MongoAffiliationBuilder(MongoConfig config) {
    super();
    this.config = config;
  }

  @Override
  public AffiliationUpdater build(JID group) {
    return new MongoAffiliationUpdater(group);
  }

  private final class MongoAffiliationUpdater implements AffiliationUpdater {

    private final JID group;

    public MongoAffiliationUpdater(JID group) {
      super();
      this.group = group;
    }

    @Override
    public boolean update(JID jid, String affiliation) {
      try {
        // {"affiliations.$.affiliation":Xxx}
        BasicDBObjectBuilder entity = BasicDBObjectBuilder.start().add(Dictionary.FIELD_AFFILIATIONS + ".$." + Dictionary.FIELD_AFFILIATION, affiliation);
        if (ItemAffiliation.OWNER.equals(affiliation)) {
          // {"creator":jid.bare}
          // 如果为Owner则同时更新创建者
          entity.add(Dictionary.FIELD_CREATOR, jid.asStringWithBare());
        }
        // {"jid":group.bare,"affiliations.jid":jid.bare"},{"$set":...entity...}
        return MongoUtils.success(MongoAffiliationBuilder.this.config.collection().update(BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, this.group.asStringWithBare()).add(Dictionary.FIELD_AFFILIATIONS + "." + Dictionary.FIELD_JID, jid.asStringWithBare()).get(), BasicDBObjectBuilder.start().add("$set", entity.get()).get(), true, false, WriteConcern.SAFE));
      } catch (MongoException e) {
        // {"jid":group.bare},{"$addToSet":{"affiliations":{"jid":Xxx,"affiliation":Xxx}}}
        return MongoUtils.success(MongoAffiliationBuilder.this.config.collection().update(BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, this.group.asStringWithBare()).get(), BasicDBObjectBuilder.start("$addToSet", BasicDBObjectBuilder.start(Dictionary.FIELD_AFFILIATIONS, BasicDBObjectBuilder.start().add(Dictionary.FIELD_JID, jid.asStringWithBare()).add(Dictionary.FIELD_AFFILIATION, affiliation).get()).get()).get(), true, false, WriteConcern.SAFE));
      }
    }
  }
}
TOP

Related Classes of com.sissi.ucenter.relation.muc.affiliation.impl.MongoAffiliationBuilder$MongoAffiliationUpdater

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.