Package org.nutz.mongo.entity

Source Code of org.nutz.mongo.entity.DynamicMongoEntity

package org.nutz.mongo.entity;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.bson.types.ObjectId;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mongo.Mongos;

import com.mongodb.DBObject;

/**
* 动态 MongoEntity 负责将一个 Map 与 DBObject,它向自己的子类提供一些帮助函数,子类将对象变成 Map 后调用
* <p>
* 与 MongoDB 默认设置不同,本类默认的,会为 _id 字段填充 UU64
*
* @author zozoh(zozohtnt@gmail.com)
* @param <T>
*/
public class DynamicMongoEntity implements MongoEntity {

  public String getFieldDbName(String key) {
    return key;
  }

  @Override
  public long getCappedSize() {
    return -1;
  }
 
  @Override
  public long getCappedMax() {
    return -1;
  }

  @Override
  public String getCollectionName(Object ref) {
    NutMap map = Mongos.obj2map(ref);
    return map.get(Mongos.COLLECTION_KEY).toString();
  }

  @Override
  public boolean hasIndexes() {
    return false;
  }

  @Override
  public List<MongoEntityIndex> getIndexes() {
    return new LinkedList<MongoEntityIndex>();
  }

  @Override
  public DBObject formatObject(Object o) {
    return Mongos.obj2dbo(o);
  }

  @Override
  public DBObject toDBObject(Object obj) {
    return Mongos.obj2dbo(obj);
  }

  @Override
  public Object toObject(DBObject dbo) {
    if (null == dbo)
      return null;
    NutMap map = new NutMap();
    for (String key : dbo.keySet()) {
      Object dbval = dbo.get(key);
      if (dbval instanceof ObjectId)
        map.put(key, dbval.toString());
      else
        map.put(key, dbval);
    }
    return map;
  }

  @SuppressWarnings({"unchecked", "rawtypes"})
  @Override
  public void fillId(Object obj) {
    if (null != obj && obj instanceof Map) {
      ((Map) obj).put("_id", new ObjectId());
      return;
    }
    throw _failToFill(obj);
  }

  @SuppressWarnings({"unchecked", "rawtypes"})
  @Override
  public void fillIdIfNoexits(Object obj) {
    if (null != obj && obj instanceof Map) {
      if (!((Map) obj).containsKey("_id"))
        ((Map) obj).put("_id", new ObjectId());
      return;
    }
    throw _failToFill(obj);
  }

  private RuntimeException _failToFill(Object obj) {
    return Lang.makeThrow"Can only fillId to Map<String,Object> but it is '%s'",
                obj.getClass().getName());
  }
}
TOP

Related Classes of org.nutz.mongo.entity.DynamicMongoEntity

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.