|
|
|
|
@ -20,8 +20,10 @@ import static org.springframework.util.ObjectUtils.*;
@@ -20,8 +20,10 @@ import static org.springframework.util.ObjectUtils.*;
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.Iterator; |
|
|
|
|
import java.util.LinkedHashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Map.Entry; |
|
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
@ -59,6 +61,7 @@ import com.mongodb.BasicDBList;
@@ -59,6 +61,7 @@ import com.mongodb.BasicDBList;
|
|
|
|
|
* @author Mark Paluch |
|
|
|
|
* @author Andreas Zink |
|
|
|
|
* @author Ziemowit Stolarczyk |
|
|
|
|
* @author Clément Petit |
|
|
|
|
*/ |
|
|
|
|
public class Criteria implements CriteriaDefinition { |
|
|
|
|
|
|
|
|
|
@ -976,9 +979,9 @@ public class Criteria implements CriteriaDefinition {
@@ -976,9 +979,9 @@ public class Criteria implements CriteriaDefinition {
|
|
|
|
|
return right == null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Pattern.class.isInstance(left)) { |
|
|
|
|
if (left instanceof Pattern) { |
|
|
|
|
|
|
|
|
|
if (!Pattern.class.isInstance(right)) { |
|
|
|
|
if (!(right instanceof Pattern)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -989,6 +992,46 @@ public class Criteria implements CriteriaDefinition {
@@ -989,6 +992,46 @@ public class Criteria implements CriteriaDefinition {
|
|
|
|
|
&& leftPattern.flags() == rightPattern.flags(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (left instanceof Document) { |
|
|
|
|
if (!(right instanceof Document)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
Document leftDocument = (Document) left; |
|
|
|
|
Document rightDocument = (Document) right; |
|
|
|
|
Iterator leftIterator = leftDocument.entrySet().iterator(); |
|
|
|
|
Iterator rightIterator = rightDocument.entrySet().iterator(); |
|
|
|
|
|
|
|
|
|
while (leftIterator.hasNext() && rightIterator.hasNext()) { |
|
|
|
|
Map.Entry leftEntry = (Map.Entry)leftIterator.next(); |
|
|
|
|
Map.Entry rightEntry = (Map.Entry)rightIterator.next(); |
|
|
|
|
if (!isEqual(leftEntry.getKey(), rightEntry.getKey())) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
if (!isEqual(leftEntry.getValue(), rightEntry.getValue())) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return !leftIterator.hasNext() && !rightIterator.hasNext(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (Collection.class.isAssignableFrom(left.getClass())) { |
|
|
|
|
if (!Collection.class.isAssignableFrom(right.getClass())) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Collection leftCollection = (Collection) left; |
|
|
|
|
Collection rightCollection = (Collection) right; |
|
|
|
|
Iterator leftIterator = leftCollection.iterator(); |
|
|
|
|
Iterator rightIterator = rightCollection.iterator(); |
|
|
|
|
|
|
|
|
|
while (leftIterator.hasNext() && rightIterator.hasNext()) { |
|
|
|
|
if (!isEqual(leftIterator.next(), rightIterator.next())) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return !leftIterator.hasNext() && !rightIterator.hasNext(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ObjectUtils.nullSafeEquals(left, right); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|