Package org.nutz.mongo.entity.adaptor

Source Code of org.nutz.mongo.entity.adaptor.PojoAdaptor

package org.nutz.mongo.entity.adaptor;

import java.util.Map;

import org.nutz.lang.Lang;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.mongo.Mongos;
import org.nutz.mongo.entity.FieldAdaptor;
import org.nutz.mongo.entity.MongoEntity;
import org.nutz.mongo.entity.StaticMongoEntity;

import com.mongodb.DBObject;
import com.mongodb.DBRef;

public class PojoAdaptor extends FieldAdaptor {

  private static final Log log = Logs.get();
 
  @Override
  public Object adaptForGet(Object val, boolean check) {
    if (val == null)
      return null;
    MongoEntity en = Mongos.entity(val);
    DBObject dbo = en.toDBObject(val);
    if (!field.isRef())
      return dbo;

    if (!dbo.containsField("_id")) {
      if (log.isWarnEnabled())
        log.warn("!!obj without _id but using as ref field value!! fallback to embed doc!!");
      return dbo;
    }
    return new DBRef(null, en.getCollectionName(null), dbo.get("_id"));
  }

  @SuppressWarnings("unchecked")
  @Override
  public Object adaptForSet(Object val) {
    if (val instanceof DBRef && field.isRef()) {
      return unpackRef((DBRef)val, field.getType());
    }
    MongoEntity en = Mongos.entity(field.getMirror().getType());
    if (en instanceof StaticMongoEntity)
      return en.toObject((DBObject) val);
    Map<String, Object> map = (Map<String, Object>) ((DBObject) val).toMap();
    return Lang.map2Object(map, field.getType());
  }

}
TOP

Related Classes of org.nutz.mongo.entity.adaptor.PojoAdaptor

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.