From 973247aa2a4775cfd6712dc10a7be73c2b5a67d8 Mon Sep 17 00:00:00 2001 From: therealansh Date: Wed, 17 Apr 2024 12:30:31 +0530 Subject: [PATCH] add: equals method to aggregation and aggregation ops --- .../core/aggregation/AddFieldsOperation.java | 6 ++++++ .../mongodb/core/aggregation/Aggregation.java | 15 +++++++++++++++ .../core/aggregation/AggregationOperation.java | 2 ++ .../core/aggregation/AggregationOptions.java | 17 +++++++++++++++++ .../core/aggregation/AggregationPipeline.java | 12 ++++++++++++ .../aggregation/BasicAggregationOperation.java | 12 ++++++++++++ .../core/aggregation/BucketAutoOperation.java | 17 +++++++++++++++++ 7 files changed, 81 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java index d63867b6a8..d15e2beee6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AddFieldsOperation.java @@ -104,6 +104,12 @@ protected String mongoOperator() { return "$addFields"; } + @Override + public boolean equals(Object obj) { + AddFieldsOperation that = obj instanceof AddFieldsOperation ? (AddFieldsOperation) obj : null; + return that != null && this.getValueMap().equals(that.getValueMap()); + } + /** * @author Christoph Strobl * @since 3.0 diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java index d7f9aaebdf..fc0bf8ed5d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Aggregation.java @@ -19,6 +19,7 @@ import java.util.Arrays; import java.util.List; +import java.util.Objects; import org.bson.Document; import org.bson.conversions.Bson; @@ -785,4 +786,18 @@ public Document toDocument(String inputCollectionName, AggregationOperationConte public String toString() { return SerializationUtils.serializeToJsonSafely(toDocument("__collection__", DEFAULT_CONTEXT)); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Aggregation)) { + return false; + } + Aggregation that = (Aggregation) o; + return Objects.equals(pipeline, that.pipeline) && Objects.equals(options, that.options); + } } + + diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java index 6884ba5404..87f5639f7c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperation.java @@ -65,4 +65,6 @@ default List toPipelineStages(AggregationOperationContext context) { default String getOperator() { return toDocument(Aggregation.DEFAULT_CONTEXT).keySet().iterator().next(); } + + boolean equals(Object obj); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java index 50d857d1c4..0637351068 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOptions.java @@ -16,6 +16,7 @@ package org.springframework.data.mongodb.core.aggregation; import java.time.Duration; +import java.util.Objects; import java.util.Optional; import org.bson.Document; @@ -696,4 +697,20 @@ public enum DomainTypeMapping { */ NONE } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AggregationOptions that = (AggregationOptions) o; + return allowDiskUse == that.allowDiskUse && explain == that.explain && Objects.equals(cursor, that.cursor) + && Objects.equals(collation, that.collation) && Objects.equals(comment, that.comment) + && Objects.equals(hint, that.hint) && Objects.equals(maxTime, that.maxTime) + && resultOptions == that.resultOptions && domainTypeMapping == that.domainTypeMapping + && Objects.equals(readConcern, that.readConcern) && Objects.equals(readPreference, that.readPreference); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java index 2e739c8776..496a426f6f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationPipeline.java @@ -164,4 +164,16 @@ private static boolean isMerge(AggregationOperation operator) { private static boolean isOut(AggregationOperation operator) { return operator instanceof OutOperation || operator.getOperator().equals("$out"); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof AggregationPipeline)) { + return false; + } + AggregationPipeline that = (AggregationPipeline) o; + return pipeline.equals(that.pipeline); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java index 89c1b358c1..679c3ab256 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BasicAggregationOperation.java @@ -44,4 +44,16 @@ public Document toDocument(AggregationOperationContext context) { throw new IllegalStateException( String.format("%s cannot be converted to org.bson.Document", ObjectUtils.nullSafeClassName(value))); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BasicAggregationOperation that = (BasicAggregationOperation) o; + return ObjectUtils.nullSafeEquals(value, that.value); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java index c1b17b1569..9161ba3fab 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/BucketAutoOperation.java @@ -20,6 +20,8 @@ import org.springframework.data.mongodb.core.aggregation.BucketOperationSupport.OutputBuilder; import org.springframework.util.Assert; +import java.util.Objects; + /** * Encapsulates the aggregation framework {@code $bucketAuto}-operation.
* Bucket stage is typically used with {@link Aggregation} and {@code $facet}. Categorizes incoming documents into a @@ -157,6 +159,21 @@ public BucketAutoOperationOutputBuilder andOutput(String fieldName) { return new BucketAutoOperationOutputBuilder(Fields.field(fieldName), this); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof BucketAutoOperation)) { + return false; + } + if (!super.equals(o)) { + return false; + } + BucketAutoOperation that = (BucketAutoOperation) o; + return buckets == that.buckets && Objects.equals(granularity, that.granularity); + } + /** * {@link OutputBuilder} implementation for {@link BucketAutoOperation}. */