You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2014/06/04 18:36:44 UTC

[27/50] [abbrv] git commit: Apply Apache code format from http://svn.apache.org/repos/asf/gora/committers/eclipse-codeformat.xml

Apply Apache code format from
http://svn.apache.org/repos/asf/gora/committers/eclipse-codeformat.xml


Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/41b512d8
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/41b512d8
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/41b512d8

Branch: refs/heads/master
Commit: 41b512d8bd8b1dcac0139a0ed3c86d2b31e91b61
Parents: ed73e57
Author: Damien Raude-Morvan <da...@dictanova.com>
Authored: Sun May 18 14:09:43 2014 +0200
Committer: Damien Raude-Morvan <da...@dictanova.com>
Committed: Sun May 18 14:09:43 2014 +0200

----------------------------------------------------------------------
 gora-mongodb/pom.xml                            |  26 +-
 .../apache/gora/mongodb/query/MongoDBQuery.java |  15 +-
 .../gora/mongodb/query/MongoDBResult.java       |   6 +-
 .../gora/mongodb/store/MongoMappingBuilder.java |  20 +-
 .../apache/gora/mongodb/store/MongoStore.java   | 619 ++++++++++---------
 .../src/test/conf/gora-mongodb-mapping.xml      |  44 +-
 .../gora/mongodb/GoraMongodbTestDriver.java     |   3 +-
 .../apache/gora/mongodb/TestBSONDecorator.java  |  21 +-
 8 files changed, 399 insertions(+), 355 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/pom.xml
----------------------------------------------------------------------
diff --git a/gora-mongodb/pom.xml b/gora-mongodb/pom.xml
index 6e3baa7..561c9c1 100644
--- a/gora-mongodb/pom.xml
+++ b/gora-mongodb/pom.xml
@@ -67,13 +67,13 @@
         <testSourceDirectory>src/test/java</testSourceDirectory>
         <sourceDirectory>src/main/java</sourceDirectory>
         <testResources>
-          <testResource>
-            <directory>${project.basedir}/src/test/conf</directory>
-            <includes>
-              <include>**/*</include>
-            </includes>
-            <!--targetPath>${project.basedir}/target/classes/</targetPath-->
-          </testResource>
+            <testResource>
+                <directory>${project.basedir}/src/test/conf</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+                <!--targetPath>${project.basedir}/target/classes/</targetPath-->
+            </testResource>
         </testResources>
         <plugins>
             <plugin>
@@ -148,11 +148,11 @@
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
-	        <exclusions>
-	          <exclusion>
-                <groupId>javax.jms</groupId>
-	            <artifactId>jms</artifactId>
-	          </exclusion>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.jms</groupId>
+                    <artifactId>jms</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
 
@@ -166,7 +166,7 @@
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-test</artifactId>
         </dependency>
-        
+
         <dependency>
             <groupId>de.flapdoodle.embed</groupId>
             <artifactId>de.flapdoodle.embed.mongo</artifactId>

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
index 81fe765..002ff86 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
@@ -17,14 +17,15 @@
  */
 package org.apache.gora.mongodb.query;
 
-import com.mongodb.BasicDBObject;
-import com.mongodb.DBObject;
 import org.apache.gora.mongodb.store.MongoMapping;
 import org.apache.gora.persistency.impl.PersistentBase;
 import org.apache.gora.query.Query;
 import org.apache.gora.query.impl.QueryBase;
 import org.apache.gora.store.DataStore;
 
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+
 /**
  * MongoDB specific implementation of the {@link Query} interface.
  * 
@@ -70,12 +71,12 @@ public class MongoDBQuery<K, T extends PersistentBase> extends QueryBase<K, T> {
   public static DBObject toProjection(String[] fields, MongoMapping mapping) {
     BasicDBObject proj = new BasicDBObject();
 
-      for (String k : fields) {
-          String dbFieldName = mapping.getDocumentField(k);
-          if (dbFieldName != null && dbFieldName.length() > 0) {
-              proj.put(dbFieldName, true);
-          }
+    for (String k : fields) {
+      String dbFieldName = mapping.getDocumentField(k);
+      if (dbFieldName != null && dbFieldName.length() > 0) {
+        proj.put(dbFieldName, true);
       }
+    }
 
     return proj;
   }

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java
index d1c53e7..7f1b9eb 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBResult.java
@@ -20,7 +20,6 @@ package org.apache.gora.mongodb.query;
 import java.io.IOException;
 
 import org.apache.gora.mongodb.store.MongoStore;
-import org.apache.gora.persistency.Persistent;
 import org.apache.gora.persistency.impl.PersistentBase;
 import org.apache.gora.query.Query;
 import org.apache.gora.query.impl.ResultBase;
@@ -36,7 +35,8 @@ import com.mongodb.DBObject;
  * @author Fabien Poulard <fp...@dictanova.com>
  * @author Damien Raude-Morvan <dr...@dictanova.com>
  */
-public class MongoDBResult<K, T extends PersistentBase> extends ResultBase<K, T> {
+public class MongoDBResult<K, T extends PersistentBase> extends
+    ResultBase<K, T> {
 
   /**
    * Reference to the cursor pointing to the results
@@ -73,7 +73,7 @@ public class MongoDBResult<K, T extends PersistentBase> extends ResultBase<K, T>
     DBObject obj = cursor.next();
     key = (K) obj.get("_id");
     persistent = ((MongoStore<K, T>) getDataStore()).newInstance(obj,
-            getQuery().getFields());
+        getQuery().getFields());
     if (persistent != null) {
       persistent.clearDirty();
     }

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoMappingBuilder.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoMappingBuilder.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoMappingBuilder.java
index b77138f..a1ed76e 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoMappingBuilder.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoMappingBuilder.java
@@ -17,16 +17,16 @@
  */
 package org.apache.gora.mongodb.store;
 
-import org.apache.gora.persistency.impl.PersistentBase;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.input.SAXBuilder;
-
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
+import org.apache.gora.persistency.impl.PersistentBase;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+
 /**
  * A builder for creating the mapper. This will allow building a thread safe
  * {@link org.apache.gora.mongodb.store.MongoMapping} using simple immutabilty.
@@ -154,9 +154,9 @@ public class MongoMappingBuilder<K, T extends PersistentBase> {
     if (!collName.equals(docNameFromMapping)) {
       MongoStore.LOG
           .info("Keyclass and nameclass match but mismatching table names "
-                  + " mappingfile schema is '" + docNameFromMapping
-                  + "' vs actual schema '" + collName
-                  + "' , assuming they are the same.");
+              + " mappingfile schema is '" + docNameFromMapping
+              + "' vs actual schema '" + collName
+              + "' , assuming they are the same.");
       if (docNameFromMapping != null) {
         mapping.renameCollection(docNameFromMapping, collName);
       }
@@ -168,8 +168,8 @@ public class MongoMappingBuilder<K, T extends PersistentBase> {
     for (Element field : fields) {
       mapping
           .addClassField(docNameFromMapping, field.getAttributeValue(ATT_NAME),
-                  field.getAttributeValue(ATT_FIELD),
-                  field.getAttributeValue(ATT_TYPE));
+              field.getAttributeValue(ATT_FIELD),
+              field.getAttributeValue(ATT_TYPE));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
index 3313469..7bae766 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
@@ -33,14 +33,14 @@ import org.apache.avro.Schema.Field;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericArray;
 import org.apache.avro.util.Utf8;
-import org.apache.gora.mongodb.utils.BSONDecorator;
-import org.apache.gora.mongodb.utils.GoraDBEncoder;
 import org.apache.gora.mongodb.query.MongoDBQuery;
 import org.apache.gora.mongodb.query.MongoDBResult;
-import org.apache.gora.persistency.impl.DirtyListWrapper;
+import org.apache.gora.mongodb.utils.BSONDecorator;
+import org.apache.gora.mongodb.utils.GoraDBEncoder;
 import org.apache.gora.persistency.Persistent;
-import org.apache.gora.persistency.impl.DirtyMapWrapper;
 import org.apache.gora.persistency.impl.BeanFactoryImpl;
+import org.apache.gora.persistency.impl.DirtyListWrapper;
+import org.apache.gora.persistency.impl.DirtyMapWrapper;
 import org.apache.gora.persistency.impl.PersistentBase;
 import org.apache.gora.query.PartitionQuery;
 import org.apache.gora.query.Query;
@@ -268,13 +268,14 @@ public class MongoStore<K, T extends PersistentBase> extends
       throw new IllegalStateException(
           "Impossible to create the schema as no database has been selected.");
     if (schemaExists()) {
-        return;
+      return;
     }
 
     // If initialized create the collection
     mongoClientColl = mongoClientDB.createCollection(
-        mapping.getCollectionName(), new BasicDBObject()); //  send a DBObject to force creation
-      // otherwise creation is deferred
+        mapping.getCollectionName(), new BasicDBObject()); // send a DBObject to
+                                                           // force creation
+    // otherwise creation is deferred
     mongoClientColl.setDBEncoderFactory(GoraDBEncoder.FACTORY);
 
     LOG.info("Collection {} has been created for Mongo instance {}.",
@@ -419,7 +420,7 @@ public class MongoStore<K, T extends PersistentBase> extends
   /**
    * Insert a new object into the store. The object must be new or the insert
    * may fail.
-   *
+   * 
    * @param key
    *          identifier of the object in the store
    * @param obj
@@ -479,9 +480,9 @@ public class MongoStore<K, T extends PersistentBase> extends
    */
   @Override
   public Query<K, T> newQuery() {
-      MongoDBQuery<K, T> query = new MongoDBQuery<K, T>(this);
-      query.setFields(getFieldsToQuery(null));
-      return query;
+    MongoDBQuery<K, T> query = new MongoDBQuery<K, T>(this);
+    query.setFields(getFieldsToQuery(null));
+    return query;
   }
 
   /**
@@ -494,7 +495,8 @@ public class MongoStore<K, T extends PersistentBase> extends
     // FIXME: for now, there is only one partition as we do not handle
     // MongoDB sharding configuration
     List<PartitionQuery<K, T>> partitions = new ArrayList<PartitionQuery<K, T>>();
-    PartitionQueryImpl<K, T> partitionQuery = new PartitionQueryImpl<K, T>(query);
+    PartitionQueryImpl<K, T> partitionQuery = new PartitionQueryImpl<K, T>(
+        query);
     partitionQuery.setConf(getConf());
     partitions.add(partitionQuery);
     return partitions;
@@ -537,156 +539,175 @@ public class MongoStore<K, T extends PersistentBase> extends
       Field field = fieldMap.get(f);
       Schema fieldSchema = field.schema();
 
-      LOG.debug("Load from DBObject (MAIN), field:{}, schemaType:{}, docField:{}, storeType:{}", new Object[]{field.name(), fieldSchema.getType(), docf, storeType});
-      Object result = fromDBObject(fieldSchema, storeType, field, docf, easybson);
+      LOG.debug(
+          "Load from DBObject (MAIN), field:{}, schemaType:{}, docField:{}, storeType:{}",
+          new Object[] { field.name(), fieldSchema.getType(), docf, storeType });
+      Object result = fromDBObject(fieldSchema, storeType, field, docf,
+          easybson);
       persistent.put(field.pos(), result);
     }
-      persistent.clearDirty();
+    persistent.clearDirty();
     return persistent;
   }
 
-    private Object fromDBObject(final Schema fieldSchema, final DocumentFieldType storeType, final Field field, final String docf, final BSONDecorator easybson) {
-        Object result = null;
-        switch (fieldSchema.getType()) {
-            case MAP:
-                BasicDBObject map = easybson.getDBObject(docf);
-                Map<Utf8, Object> rmap = new HashMap<Utf8, Object>();
-                for (Entry<String, Object> e : map.entrySet()) {
-                    // ensure Key decoding -> middle dots replaced with dots
-                    // FIXME: better approach ?
-                    String oKey = e.getKey().replace("\u00B7", ".");
-
-                    switch (fieldSchema.getValueType().getType()) {
-                        case STRING:
-                            rmap.put(new Utf8(oKey), new Utf8((String) e.getValue()));
-                            break;
-                        case BYTES:
-                            rmap.put(new Utf8(oKey), ByteBuffer.wrap((byte[]) e.getValue()));
-                            break;
-                        default:
-                            rmap.put(new Utf8(oKey), e.getValue());
-                            break;
-                    }
-                }
-                result = new DirtyMapWrapper(rmap);
-                break;
-            case ARRAY:
-                List<Object> list = easybson.getDBList(docf);
-                switch (fieldSchema.getElementType().getType()) {
-                    case STRING:
-                        List<Utf8> arrS = new ArrayList<Utf8>();
-                        for (Object o : list)
-                            arrS.add(new Utf8((String) o));
-                        result = new DirtyListWrapper<Utf8>(arrS);
-                        break;
-                    case BYTES:
-                        List<ByteBuffer> arrB = new ArrayList<ByteBuffer>();
-                        for (Object o : list)
-                            arrB.add(ByteBuffer.wrap((byte[]) o));
-                        result = new DirtyListWrapper<ByteBuffer>(arrB);
-                        break;
-                    default:
-                        List<Object> arrT = new ArrayList<Object>();
-                        for (Object o : list)
-                            arrT.add(o);
-                        result = new DirtyListWrapper<Object>(arrT);
-                        break;
-                }
-                break;
-            case RECORD:
-                DBObject rec = easybson.getDBObject(docf);
-                if (rec == null) {
-                    return result;
-                }
-                BSONDecorator innerBson = new BSONDecorator(rec);
-                Class<?> clazz = null;
-                try {
-                    clazz = ClassLoadingUtils.loadClass(fieldSchema.getFullName());
-                } catch (ClassNotFoundException e) {
-                }
-                Persistent record = new BeanFactoryImpl(keyClass, clazz).newPersistent();
-                for (Field recField : fieldSchema.getFields()) {
-                    Schema innerSchema = recField.schema();
-                    DocumentFieldType innerStoreType = mapping.getDocumentFieldType(innerSchema.getName());
-                    String innerDocField = mapping.getDocumentField(recField.name()) != null ? mapping.getDocumentField(recField.name()) : recField.name();
-                    String fieldPath = docf + "." + innerDocField;
-                    LOG.debug("Load from DBObject (RECORD), field:{}, schemaType:{}, docField:{}, storeType:{}", new Object[]{recField.name(), innerSchema.getType(), fieldPath, innerStoreType});
-                    ((PersistentBase) record).put(recField.pos(), fromDBObject(innerSchema, innerStoreType, recField, innerDocField, innerBson));
-                }
-                result = record;
-                break;
-            case BOOLEAN:
-                result = easybson.getBoolean(docf);
-                break;
-            case DOUBLE:
-                result = easybson.getDouble(docf);
-                break;
-            case FLOAT:
-                result = easybson.getDouble(docf).floatValue();
-                break;
-            case INT:
-                result = easybson.getInt(docf);
-                break;
-            case LONG:
-                result = easybson.getLong(docf);
-                break;
-            case STRING:
-                if (storeType == DocumentFieldType.OBJECTID) {
-                    // Try auto-conversion of BSON data to ObjectId
-                    // It will work if data is stored as String or as ObjectId
-                    final Object bin = easybson.get(docf);
-                    final ObjectId id = ObjectId.massageToObjectId(bin);
-                    result = new Utf8(id.toString());
-                } else if (storeType == DocumentFieldType.DATE) {
-                    final Object bin = easybson.get(docf);
-                    if (bin instanceof Date) {
-                        Calendar calendar = Calendar.getInstance(TimeZone
-                                .getTimeZone("UTC"));
-                        calendar.setTime((Date) bin);
-                        result = new Utf8(DatatypeConverter.printDateTime(calendar));
-                    } else {
-                        result = new Utf8(bin.toString());
-                    }
-                } else {
-                    result = easybson.getUtf8String(docf);
-                }
-                break;
-            case ENUM:
-                result = AvroUtils.getEnumValue(fieldSchema,
-                        easybson.getUtf8String(docf).toString());
-                break;
-            case BYTES:
-            case FIXED:
-                result = easybson.getBytes(docf);
-                break;
-            case NULL:
-                result = null;
-                break;
-            case UNION:
-                // schema [type0, type1]
-                Type type0 = fieldSchema.getTypes().get(0).getType();
-                Type type1 = fieldSchema.getTypes().get(1).getType();
-
-                // Check if types are different and there's a "null", like ["null","type"] or ["type","null"]
-                if (!type0.equals(type1)
-                        && (type0.equals(Type.NULL)
-                        || type1.equals(Type.NULL))) {
-                    Schema innerSchema = fieldSchema.getTypes().get(1);
-                    DocumentFieldType innerStoreType = mapping.getDocumentFieldType(innerSchema.getName());
-                    LOG.debug("Load from DBObject (UNION), schemaType:{}, docField:{}, storeType:{}", new Object[]{innerSchema.getType(), docf, innerStoreType});
-                    result = fromDBObject(innerSchema, innerStoreType, field, docf, easybson); // Deserialize as if schema was ["type"]
-                } else {
-                    throw new IllegalStateException("MongoStore doesn't support 3 types union field yet. Please update your mapping");
-                }
-                break;
-            default:
-                LOG.warn("Unable to read {}", docf);
-                break;
+  private Object fromDBObject(final Schema fieldSchema,
+      final DocumentFieldType storeType, final Field field, final String docf,
+      final BSONDecorator easybson) {
+    Object result = null;
+    switch (fieldSchema.getType()) {
+    case MAP:
+      BasicDBObject map = easybson.getDBObject(docf);
+      if (map != null) {
+        Map<Utf8, Object> rmap = new HashMap<Utf8, Object>();
+        for (Entry<String, Object> e : map.entrySet()) {
+          // ensure Key decoding -> middle dots replaced with dots
+          // FIXME: better approach ?
+          String oKey = e.getKey().replace("\u00B7", ".");
+
+          switch (fieldSchema.getValueType().getType()) {
+          case STRING:
+            rmap.put(new Utf8(oKey), new Utf8((String) e.getValue()));
+            break;
+          case BYTES:
+            rmap.put(new Utf8(oKey), ByteBuffer.wrap((byte[]) e.getValue()));
+            break;
+          default:
+            rmap.put(new Utf8(oKey), e.getValue());
+            break;
+          }
         }
+        result = new DirtyMapWrapper(rmap);
+      }
+      break;
+    case ARRAY:
+      List<Object> list = easybson.getDBList(docf);
+      switch (fieldSchema.getElementType().getType()) {
+      case STRING:
+        List<Utf8> arrS = new ArrayList<Utf8>();
+        for (Object o : list)
+          arrS.add(new Utf8((String) o));
+        result = new DirtyListWrapper<Utf8>(arrS);
+        break;
+      case BYTES:
+        List<ByteBuffer> arrB = new ArrayList<ByteBuffer>();
+        for (Object o : list)
+          arrB.add(ByteBuffer.wrap((byte[]) o));
+        result = new DirtyListWrapper<ByteBuffer>(arrB);
+        break;
+      default:
+        List<Object> arrT = new ArrayList<Object>();
+        for (Object o : list)
+          arrT.add(o);
+        result = new DirtyListWrapper<Object>(arrT);
+        break;
+      }
+      break;
+    case RECORD:
+      DBObject rec = easybson.getDBObject(docf);
+      if (rec == null) {
         return result;
+      }
+      BSONDecorator innerBson = new BSONDecorator(rec);
+      Class<?> clazz = null;
+      try {
+        clazz = ClassLoadingUtils.loadClass(fieldSchema.getFullName());
+      } catch (ClassNotFoundException e) {
+      }
+      Persistent record = new BeanFactoryImpl(keyClass, clazz).newPersistent();
+      for (Field recField : fieldSchema.getFields()) {
+        Schema innerSchema = recField.schema();
+        DocumentFieldType innerStoreType = mapping
+            .getDocumentFieldType(innerSchema.getName());
+        String innerDocField = mapping.getDocumentField(recField.name()) != null ? mapping
+            .getDocumentField(recField.name()) : recField.name();
+        String fieldPath = docf + "." + innerDocField;
+        LOG.debug(
+            "Load from DBObject (RECORD), field:{}, schemaType:{}, docField:{}, storeType:{}",
+            new Object[] { recField.name(), innerSchema.getType(), fieldPath,
+                innerStoreType });
+        ((PersistentBase) record).put(
+            recField.pos(),
+            fromDBObject(innerSchema, innerStoreType, recField, innerDocField,
+                innerBson));
+      }
+      result = record;
+      break;
+    case BOOLEAN:
+      result = easybson.getBoolean(docf);
+      break;
+    case DOUBLE:
+      result = easybson.getDouble(docf);
+      break;
+    case FLOAT:
+      result = easybson.getDouble(docf).floatValue();
+      break;
+    case INT:
+      result = easybson.getInt(docf);
+      break;
+    case LONG:
+      result = easybson.getLong(docf);
+      break;
+    case STRING:
+      if (storeType == DocumentFieldType.OBJECTID) {
+        // Try auto-conversion of BSON data to ObjectId
+        // It will work if data is stored as String or as ObjectId
+        final Object bin = easybson.get(docf);
+        final ObjectId id = ObjectId.massageToObjectId(bin);
+        result = new Utf8(id.toString());
+      } else if (storeType == DocumentFieldType.DATE) {
+        final Object bin = easybson.get(docf);
+        if (bin instanceof Date) {
+          Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+          calendar.setTime((Date) bin);
+          result = new Utf8(DatatypeConverter.printDateTime(calendar));
+        } else {
+          result = new Utf8(bin.toString());
+        }
+      } else {
+        result = easybson.getUtf8String(docf);
+      }
+      break;
+    case ENUM:
+      result = AvroUtils.getEnumValue(fieldSchema, easybson.getUtf8String(docf)
+          .toString());
+      break;
+    case BYTES:
+    case FIXED:
+      result = easybson.getBytes(docf);
+      break;
+    case NULL:
+      result = null;
+      break;
+    case UNION:
+      // schema [type0, type1]
+      Type type0 = fieldSchema.getTypes().get(0).getType();
+      Type type1 = fieldSchema.getTypes().get(1).getType();
+
+      // Check if types are different and there's a "null", like ["null","type"]
+      // or ["type","null"]
+      if (!type0.equals(type1)
+          && (type0.equals(Type.NULL) || type1.equals(Type.NULL))) {
+        Schema innerSchema = fieldSchema.getTypes().get(1);
+        DocumentFieldType innerStoreType = mapping
+            .getDocumentFieldType(innerSchema.getName());
+        LOG.debug(
+            "Load from DBObject (UNION), schemaType:{}, docField:{}, storeType:{}",
+            new Object[] { innerSchema.getType(), docf, innerStoreType });
+        result = fromDBObject(innerSchema, innerStoreType, field, docf,
+            easybson); // Deserialize as if schema was ["type"]
+      } else {
+        throw new IllegalStateException(
+            "MongoStore doesn't support 3 types union field yet. Please update your mapping");
+      }
+      break;
+    default:
+      LOG.warn("Unable to read {}", docf);
+      break;
     }
+    return result;
+  }
 
-    // ////////////////////////////////////////////////////////// SERIALIZATION
+  // ////////////////////////////////////////////////////////// SERIALIZATION
 
   /**
    * Build a new instance of {@link DBObject} from the persistence class
@@ -732,7 +753,8 @@ public class MongoStore<K, T extends PersistentBase> extends
    * store.
    * <p/>
    * This implementation mainly differs from the
-   * {@link MongoStore#newInstance(org.apache.gora.persistency.impl.PersistentBase)} one from two points:
+   * {@link MongoStore#newInstance(org.apache.gora.persistency.impl.PersistentBase)}
+   * one from two points:
    * <ol>
    * <li>the restriction to fields that are dirty and then need an update</li>
    * <li>the qualification of field names as fully qualified names</li>
@@ -752,8 +774,11 @@ public class MongoStore<K, T extends PersistentBase> extends
         String docf = mapping.getDocumentField(f.name());
         Object value = persistent.get(f.pos());
         DocumentFieldType storeType = mapping.getDocumentFieldType(docf);
-        LOG.debug("Transform value to DBObject (MAIN), docField:{}, schemaType:{}, storeType:{}", new Object[]{docf, f.schema().getType(), storeType});
-        result.put(docf, toDBObject(f.schema(), f.schema().getType(), storeType, value));
+        LOG.debug(
+            "Transform value to DBObject (MAIN), docField:{}, schemaType:{}, storeType:{}",
+            new Object[] { docf, f.schema().getType(), storeType });
+        result.put(docf,
+            toDBObject(f.schema(), f.schema().getType(), storeType, value));
       }
     }
     return result;
@@ -766,7 +791,8 @@ public class MongoStore<K, T extends PersistentBase> extends
    * store by being removed.
    * <p/>
    * This implementation mainly differs from the
-   * {@link MongoStore#newInstance(org.apache.gora.persistency.impl.PersistentBase)} one from two points:
+   * {@link MongoStore#newInstance(org.apache.gora.persistency.impl.PersistentBase)}
+   * one from two points:
    * <ol>
    * <li>the restriction to fields that are dirty and then need an update</li>
    * <li>the qualification of field names as fully qualified names</li>
@@ -786,141 +812,158 @@ public class MongoStore<K, T extends PersistentBase> extends
         String docf = mapping.getDocumentField(f.name());
         Object value = persistent.get(f.pos());
         DocumentFieldType storeType = mapping.getDocumentFieldType(docf);
-        LOG.debug("Transform value to DBObject (MAIN), docField:{}, schemaType:{}, storeType:{}", new Object[]{docf, f.schema().getType(), storeType});
-        Object o = toDBObject(f.schema(), f.schema().getType(), storeType, value);
+        LOG.debug(
+            "Transform value to DBObject (MAIN), docField:{}, schemaType:{}, storeType:{}",
+            new Object[] { docf, f.schema().getType(), storeType });
+        Object o = toDBObject(f.schema(), f.schema().getType(), storeType,
+            value);
         result.put(docf, o);
       }
     }
     return result;
   }
 
-    private Object toDBObject(Schema fieldSchema, Type fieldType, DocumentFieldType storeType, Object value) {
-        Object result = null;
-        switch (fieldType) {
-            case MAP:
-                if (storeType != null && storeType != DocumentFieldType.DOCUMENT) {
-                    throw new IllegalStateException(
-                            "Field "
-                                    + fieldSchema.getType()
-                                    + ": to store a Gora 'map', target Mongo mapping have to be of 'document' type");
-                }
-                Schema valueSchema = fieldSchema.getValueType();
-                result = toMongoMap((Map<Utf8, ?>) value, valueSchema.getType());
-                break;
-            case ARRAY:
-                if (storeType != null && storeType != DocumentFieldType.LIST) {
-                    throw new IllegalStateException(
-                            "Field "
-                                    + fieldSchema.getType()
-                                    + ": To store a Gora 'array', target Mongo mapping have to be of 'list' type");
-                }
-                Schema elementSchema = fieldSchema.getElementType();
-                result = toMongoList((List<?>) value, elementSchema.getType());
-                break;
-            case BYTES:
-                // Beware of ByteBuffer not being safely serialized
-                if (value != null) {
-                    result = ((ByteBuffer) value).array();
-                }
-                break;
-            case INT:
-            case LONG:
-            case FLOAT:
-            case DOUBLE:
-            case BOOLEAN:
-                result = value;
-                break;
-            case STRING:
-                if (storeType == DocumentFieldType.OBJECTID) {
-                    if (value != null) {
-                        ObjectId id;
-                        try {
-                            id = new ObjectId(value.toString());
-                        } catch (IllegalArgumentException e1) {
-                            // Unable to parse anything from Utf8 value, throw error
-                            throw new IllegalStateException("Field " + fieldSchema.getType()
-                                    + ": Invalid string: unable to convert to ObjectId");
-                        }
-                        result = id;
-                    }
-                } else if (storeType == DocumentFieldType.DATE) {
-                    if (value != null) {
-                        // Try to parse date from Utf8 value
-                        Calendar calendar = null;
-                        try {
-                            // Parse as date + time
-                            calendar = DatatypeConverter.parseDateTime(value.toString());
-                        } catch (IllegalArgumentException e1) {
-                            try {
-                                // Parse as date only
-                                calendar = DatatypeConverter.parseDate(value.toString());
-                            } catch (IllegalArgumentException e2) {
-                                // No-op
-                            }
-                        }
-                        if (calendar == null) {
-                            // Unable to parse anything from Utf8 value, throw error
-                            throw new IllegalStateException("Field " + fieldSchema.getType()
-                                    + ": Invalid date format '" + value + "'");
-                        }
-                        result = calendar.getTime();
-                    }
-                } else {
-                    // Beware of Utf8 not being safely serialized
-                    if (value != null) {
-                        result = value.toString();
-                    }
-                }
-                break;
-            case ENUM:
-                // Beware of Utf8 not being safely serialized
-                if (value != null)
-                    result = value.toString();
-                break;
-            case RECORD:
-                if (value == null)
-                    break;
-                BasicDBObject record = new BasicDBObject();
-                for (Field member : fieldSchema.getFields()) {
-                    Object innerValue = ((PersistentBase) value).get(member.pos());
-                    String innerDoc = mapping.getDocumentField(member.name());
-                    Type innerType = member.schema().getType();
-                    DocumentFieldType innerStoreType = mapping.getDocumentFieldType(innerDoc);
-                    LOG.debug("Transform value to DBObject (RECORD), docField:{}, schemaType:{}, storeType:{}", new Object[]{member.name(), member.schema().getType(), innerStoreType});
-                    record.put(member.name(), toDBObject(member.schema(), innerType, innerStoreType, innerValue));
-                }
-                result = record;
-                break;
-            case UNION:
-                // schema [type0, type1]
-                Type type0 = fieldSchema.getTypes().get(0).getType();
-                Type type1 = fieldSchema.getTypes().get(1).getType();
-
-                // Check if types are different and there's a "null", like ["null","type"] or ["type","null"]
-                if (!type0.equals(type1)
-                        && (type0.equals(Schema.Type.NULL)
-                        || type1.equals(Schema.Type.NULL))) {
-                    Schema innerSchema = fieldSchema.getTypes().get(1);
-                    DocumentFieldType innerStoreType = mapping.getDocumentFieldType(innerSchema.getName());
-                    LOG.debug("Transform value to DBObject (UNION), schemaType:{}, type1:{}, storeType:{}", new Object[]{innerSchema.getType(), type1, innerStoreType});
-                    result = toDBObject(innerSchema, type1, innerStoreType, value); // Deserialize as if schema was ["type"]
-                } else {
-                    throw new IllegalStateException("MongoStore doesn't support 3 types union field yet. Please update your mapping");
-                }
-                break;
-            case FIXED:
-                result = value;
-                break;
-
-            default:
-                LOG.error("Unknown field type: " + fieldSchema.getType());
-                break;
+  private Object toDBObject(Schema fieldSchema, Type fieldType,
+      DocumentFieldType storeType, Object value) {
+    Object result = null;
+    switch (fieldType) {
+    case MAP:
+      if (storeType != null && storeType != DocumentFieldType.DOCUMENT) {
+        throw new IllegalStateException(
+            "Field "
+                + fieldSchema.getType()
+                + ": to store a Gora 'map', target Mongo mapping have to be of 'document' type");
+      }
+      Schema valueSchema = fieldSchema.getValueType();
+      result = toMongoMap((Map<Utf8, ?>) value, valueSchema.getType());
+      break;
+    case ARRAY:
+      if (storeType != null && storeType != DocumentFieldType.LIST) {
+        throw new IllegalStateException(
+            "Field "
+                + fieldSchema.getType()
+                + ": To store a Gora 'array', target Mongo mapping have to be of 'list' type");
+      }
+      Schema elementSchema = fieldSchema.getElementType();
+      result = toMongoList((List<?>) value, elementSchema.getType());
+      break;
+    case BYTES:
+      // Beware of ByteBuffer not being safely serialized
+      if (value != null) {
+        result = ((ByteBuffer) value).array();
+      }
+      break;
+    case INT:
+    case LONG:
+    case FLOAT:
+    case DOUBLE:
+    case BOOLEAN:
+      result = value;
+      break;
+    case STRING:
+      if (storeType == DocumentFieldType.OBJECTID) {
+        if (value != null) {
+          ObjectId id;
+          try {
+            id = new ObjectId(value.toString());
+          } catch (IllegalArgumentException e1) {
+            // Unable to parse anything from Utf8 value, throw error
+            throw new IllegalStateException("Field " + fieldSchema.getType()
+                + ": Invalid string: unable to convert to ObjectId");
+          }
+          result = id;
+        }
+      } else if (storeType == DocumentFieldType.DATE) {
+        if (value != null) {
+          // Try to parse date from Utf8 value
+          Calendar calendar = null;
+          try {
+            // Parse as date + time
+            calendar = DatatypeConverter.parseDateTime(value.toString());
+          } catch (IllegalArgumentException e1) {
+            try {
+              // Parse as date only
+              calendar = DatatypeConverter.parseDate(value.toString());
+            } catch (IllegalArgumentException e2) {
+              // No-op
+            }
+          }
+          if (calendar == null) {
+            // Unable to parse anything from Utf8 value, throw error
+            throw new IllegalStateException("Field " + fieldSchema.getType()
+                + ": Invalid date format '" + value + "'");
+          }
+          result = calendar.getTime();
+        }
+      } else {
+        // Beware of Utf8 not being safely serialized
+        if (value != null) {
+          result = value.toString();
         }
+      }
+      break;
+    case ENUM:
+      // Beware of Utf8 not being safely serialized
+      if (value != null)
+        result = value.toString();
+      break;
+    case RECORD:
+      if (value == null)
+        break;
+      BasicDBObject record = new BasicDBObject();
+      for (Field member : fieldSchema.getFields()) {
+        Object innerValue = ((PersistentBase) value).get(member.pos());
+        String innerDoc = mapping.getDocumentField(member.name());
+        Type innerType = member.schema().getType();
+        DocumentFieldType innerStoreType = mapping
+            .getDocumentFieldType(innerDoc);
+        LOG.debug(
+            "Transform value to DBObject (RECORD), docField:{}, schemaType:{}, storeType:{}",
+            new Object[] { member.name(), member.schema().getType(),
+                innerStoreType });
+        record.put(member.name(),
+            toDBObject(member.schema(), innerType, innerStoreType, innerValue));
+      }
+      result = record;
+      break;
+    case UNION:
+      // schema [type0, type1]
+      Type type0 = fieldSchema.getTypes().get(0).getType();
+      Type type1 = fieldSchema.getTypes().get(1).getType();
+
+      // Check if types are different and there's a "null", like ["null","type"]
+      // or ["type","null"]
+      if (!type0.equals(type1)
+          && (type0.equals(Schema.Type.NULL) || type1.equals(Schema.Type.NULL))) {
+        Schema innerSchema = fieldSchema.getTypes().get(1);
+        DocumentFieldType innerStoreType = mapping
+            .getDocumentFieldType(innerSchema.getName());
+        LOG.debug(
+            "Transform value to DBObject (UNION), schemaType:{}, type1:{}, storeType:{}",
+            new Object[] { innerSchema.getType(), type1, innerStoreType });
+        result = toDBObject(innerSchema, type1, innerStoreType, value); // Deserialize
+                                                                        // as if
+                                                                        // schema
+                                                                        // was
+                                                                        // ["type"]
+      } else {
+        throw new IllegalStateException(
+            "MongoStore doesn't support 3 types union field yet. Please update your mapping");
+      }
+      break;
+    case FIXED:
+      result = value;
+      break;
 
-        return result;
+    default:
+      LOG.error("Unknown field type: " + fieldSchema.getType());
+      break;
     }
 
-    /**
+    return result;
+  }
+
+  /**
    * Put a key/value pair in a {@link BSONDecorator} as a valid Mongo object
    * that will be safely serialized in base.
    * 
@@ -962,8 +1005,8 @@ public class MongoStore<K, T extends PersistentBase> extends
       break;
     case LONG:
     case INT:
-        easybson.put(key, value);
-        break;
+      easybson.put(key, value);
+      break;
     case RECORD:
       if (value == null)
         break;
@@ -980,13 +1023,13 @@ public class MongoStore<K, T extends PersistentBase> extends
         case ARRAY:
           record.put(
               member.name(),
-              toMongoList((List<?>) recValue, member.schema()
-                  .getElementType().getType()));
+              toMongoList((List<?>) recValue, member.schema().getElementType()
+                  .getType()));
           break;
         case LONG:
         case INT:
-            easybson.put(key, value);
-            break;
+          easybson.put(key, value);
+          break;
         case STRING:
           if (recValue != null)
             record.put(member.name(), recValue.toString());

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/test/conf/gora-mongodb-mapping.xml
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/test/conf/gora-mongodb-mapping.xml b/gora-mongodb/src/test/conf/gora-mongodb-mapping.xml
index b89c888..d5c8229 100644
--- a/gora-mongodb/src/test/conf/gora-mongodb-mapping.xml
+++ b/gora-mongodb/src/test/conf/gora-mongodb-mapping.xml
@@ -16,28 +16,28 @@
   limitations under the License.
 -->
 <gora-orm>
-   
-  <class name="org.apache.gora.examples.generated.Employee" keyClass="java.lang.String" document="frontier">
-    <field name="name" docfield="name" type="string"/>
-    <field name="dateOfBirth" docfield="dateOfBirth" type="int64"/>
-    <field name="ssn" docfield="ssn" type="string"/>
-    <field name="salary" docfield="salary" type="int32"/>
-    <field name="boss" docfield="boss" type="document"/>
-    <field name="webpage" docfield="webpage" type="document"/>
-  </class>
 
-  <class name="org.apache.gora.examples.generated.WebPage" keyClass="java.lang.String" document="webpage">
-    <field name="url" docfield="url" type="string"/>
-    <field name="content" docfield="content" type="binary"/>
-    <field name="parsedContent" docfield="pContent" type="list"/>
-    <field name="outlinks" docfield="links.out" type="document"/>
-    <field name="headers" docfield="headers" type="document"/>
-    <field name="metadata" docfield="metadata" type="document"/>
-  </class>
-  
-  <class name="org.apache.gora.examples.generated.TokenDatum" keyClass="java.lang.String" keyspace="TokenDatum">
-    <field name="count" docfield="count" qualifier="int32"/>
-  </class>
-  
+    <class name="org.apache.gora.examples.generated.Employee" keyClass="java.lang.String" document="frontier">
+        <field name="name" docfield="name" type="string"/>
+        <field name="dateOfBirth" docfield="dateOfBirth" type="int64"/>
+        <field name="ssn" docfield="ssn" type="string"/>
+        <field name="salary" docfield="salary" type="int32"/>
+        <field name="boss" docfield="boss" type="document"/>
+        <field name="webpage" docfield="webpage" type="document"/>
+    </class>
+
+    <class name="org.apache.gora.examples.generated.WebPage" keyClass="java.lang.String" document="webpage">
+        <field name="url" docfield="url" type="string"/>
+        <field name="content" docfield="content" type="binary"/>
+        <field name="parsedContent" docfield="pContent" type="list"/>
+        <field name="outlinks" docfield="links.out" type="document"/>
+        <field name="headers" docfield="headers" type="document"/>
+        <field name="metadata" docfield="metadata" type="document"/>
+    </class>
+
+    <class name="org.apache.gora.examples.generated.TokenDatum" keyClass="java.lang.String" keyspace="TokenDatum">
+        <field name="count" docfield="count" qualifier="int32"/>
+    </class>
+
 
 </gora-orm>

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
index 709fdcc..30cb6ed 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
@@ -67,8 +67,7 @@ public class GoraMongodbTestDriver extends GoraTestDriver {
     int port = Network.getFreeServerPort();
     IMongodConfig mongodConfig = new MongodConfigBuilder()
         .version(Version.Main.PRODUCTION)
-        .net(new Net(port, Network.localhostIsIPv6()))
-        .build();
+        .net(new Net(port, Network.localhostIsIPv6())).build();
 
     // Store Mongo server "host:port" in Hadoop configuration
     // so that MongoStore will be able to get it latter

http://git-wip-us.apache.org/repos/asf/gora/blob/41b512d8/gora-mongodb/src/test/java/org/apache/gora/mongodb/TestBSONDecorator.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/TestBSONDecorator.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/TestBSONDecorator.java
index 4898014..dec4c5d 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/TestBSONDecorator.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/TestBSONDecorator.java
@@ -17,15 +17,16 @@
  */
 package org.apache.gora.mongodb;
 
-import com.mongodb.BasicDBObject;
-import com.mongodb.BasicDBObjectBuilder;
-import com.mongodb.DBObject;
-import org.apache.gora.mongodb.utils.BSONDecorator;
-import org.junit.Test;
+import static org.junit.Assert.*;
 
 import java.nio.ByteBuffer;
 
-import static org.junit.Assert.*;
+import org.apache.gora.mongodb.utils.BSONDecorator;
+import org.junit.Test;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.BasicDBObjectBuilder;
+import com.mongodb.DBObject;
 
 public class TestBSONDecorator {
 
@@ -37,7 +38,7 @@ public class TestBSONDecorator {
         .add("root0", "value")
         .add("root1", new BasicDBObject("leaf1", 1))
         .add("root2",
-                new BasicDBObject("parent1", new BasicDBObject("leaf2", "test")))
+            new BasicDBObject("parent1", new BasicDBObject("leaf2", "test")))
         .get();
     BSONDecorator dboc = new BSONDecorator(dbo1);
 
@@ -71,9 +72,9 @@ public class TestBSONDecorator {
         .add("root0", "value")
         .add("root1", new BasicDBObject("leaf1", "abcdefgh".getBytes()))
         .add(
-                "root2",
-                new BasicDBObject("parent1", new BasicDBObject("leaf2", "test"
-                        .getBytes())))
+            "root2",
+            new BasicDBObject("parent1", new BasicDBObject("leaf2", "test"
+                .getBytes())))
         .add("root3", ByteBuffer.wrap("test2".getBytes())).get();
     BSONDecorator dboc = new BSONDecorator(dbo1);