#21
authorVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Fri, 29 Mar 2013 09:48:31 +0000 (16:48 +0700)
committerVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Fri, 29 Mar 2013 09:48:31 +0000 (16:48 +0700)
jejdb/src/java/org/ejdb/bson/BSONObject.java
jejdb/src/java/org/ejdb/driver/BSONQueryObject.java

index 1afb0bb..9fb8fea 100644 (file)
@@ -14,9 +14,9 @@ import java.util.Set;
 
 /**
  * BSON object.
- *
+ * <p/>
  * NOTE:
- *  - {@link BSONObject#ID_KEY} must be valid {@link ObjectId}((@link ObjectId} instance or valid <code>byte[]</code> or <code>String</code>)
+ * - {@link BSONObject#ID_KEY} must be valid {@link ObjectId}((@link ObjectId} instance or valid <code>byte[]</code> or <code>String</code>)
  *
  * @author Tyutyunkov Vyacheslav (tve@softmotions.com)
  * @version $Id$
@@ -52,8 +52,8 @@ public class BSONObject {
      * Constructs new BSON object with initial data.
      * The same as:
      * <code>
-     *     BSONObject obj = new BSONObject();
-     *     obj.put(key, value);
+     * BSONObject obj = new BSONObject();
+     * obj.put(key, value);
      * </code>
      */
     public BSONObject(String key, Object value) {
@@ -64,8 +64,8 @@ public class BSONObject {
      * Constructs new BSON object and init data from specified Map.
      * The same as
      * <code>
-     *     BSONObject obj = new BSONObject();
-     *     obj.putAll(data);
+     * BSONObject obj = new BSONObject();
+     * obj.putAll(data);
      * </code>
      */
     public BSONObject(Map<String, Object> data) {
@@ -192,18 +192,30 @@ public class BSONObject {
         data.clear();
     }
 
+    /**
+     * If returns <code>true</code> fields order will be checks on equal.
+     */
+    protected boolean isFieldsOrderImportant() {
+        return false;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this != o && (null == o || !(o instanceof BSONObject))) {
             return false;
         }
 
-        Map<String, Object> thatData = ((BSONObject) o).data;
+        BSONObject other = (BSONObject) o;
+        Map<String, Object> thatData = other.data;
 
         if (thatData.size() != data.size()) {
             return false;
         }
 
+        if ((isFieldsOrderImportant() || other.isFieldsOrderImportant()) && !fields.equals(other.fields())) {
+            return false;
+        }
+
         try {
             Iterator<Map.Entry<String, Object>> i = data.entrySet().iterator();
             while (i.hasNext()) {
index 890a31d..2384c59 100644 (file)
@@ -49,4 +49,9 @@ public class BSONQueryObject extends BSONObject {
     public ObjectId getId() {
         return null;
     }
+
+    @Override
+    protected boolean isFieldsOrderImportant() {
+        return true;
+    }
 }