Package com.sissi.ucenter.search.impl

Source Code of com.sissi.ucenter.search.impl.MongoSearchContext

package com.sissi.ucenter.search.impl;

import java.util.List;

import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.sissi.config.MongoConfig;
import com.sissi.context.JIDBuilder;
import com.sissi.field.FieldMapping;
import com.sissi.field.Fields;
import com.sissi.ucenter.impl.MongoFieldsContext;
import com.sissi.ucenter.search.SearchContext;

/**
* 索引策略: 动态,由FieldMapping所能解析的Field.name决定. 默认索引策略: {"NICK":1}
*
* @author kim 2014年6月6日
*/
abstract class MongoSearchContext extends MongoFieldsContext implements SearchContext {

  private final short limit;

  private final DBObject filter;

  private final MongoConfig config;

  protected final JIDBuilder jidBuilder;

  public MongoSearchContext(MongoConfig config, JIDBuilder jidBuilder, short limit, List<String> filters, FieldMapping mapping) {
    super(mapping);
    this.limit = limit;
    this.config = config;
    this.jidBuilder = jidBuilder;
    this.filter = this.filter(filters);
  }

  private DBObject filter(List<String> filters) {
    BasicDBObjectBuilder builder = BasicDBObjectBuilder.start();
    for (String filter : filters) {
      builder.add(filter, 0);
    }
    return builder.get();
  }

  @Override
  public <T extends Fields> T search(Fields source, Fields target, Class<T> clazz) {
    try (DBCursor cursor = this.config.collection().find(super.entities(source, BasicDBObjectBuilder.start()), this.filter).limit(this.limit)) {
      while (cursor.hasNext()) {
        this.build(cursor.next(), target);
      }
    }
    return clazz.cast(target);
  }

  abstract protected Fields build(DBObject each, Fields target);
}
TOP

Related Classes of com.sissi.ucenter.search.impl.MongoSearchContext

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.