From f4a5482005ede646dc9222640b924c0f794907ae Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 24 Jun 2016 15:32:58 +0200 Subject: [PATCH] DATAMONGO-1418 - Polishing. Added ticket references. Simplified code. Original pull request: #361. --- .../data/mongodb/core/aggregation/Aggregation.java | 12 ++++++++---- .../core/aggregation/OutOperationUnitTest.java | 3 +++ 2 files changed, 11 insertions(+), 4 deletions(-) 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 caf5f2ae1..6ebd8cdc3 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 @@ -25,7 +25,7 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.core.aggregation.ExposedFields.ExposedField; import org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference; -import org.springframework.data.mongodb.core.aggregation.Fields.AggregationField; +import org.springframework.data.mongodb.core.aggregation.Fields.*; import org.springframework.data.mongodb.core.aggregation.FieldsExposingAggregationOperation.InheritsFieldsAggregationOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.NearQuery; @@ -161,9 +161,9 @@ public class Aggregation { Assert.isTrue(!aggregationOperations.isEmpty(), "At least one AggregationOperation has to be provided"); Assert.notNull(options, "AggregationOptions must not be null!"); - //check $out is the last operation if exist - for (int i = 0; i < aggregationOperations.size(); i++) { - if (aggregationOperations.get(i) instanceof OutOperation && i != aggregationOperations.size() - 1) { + // check $out is the last operation if it exists + for (AggregationOperation aggregationOperation : aggregationOperations) { + if (aggregationOperation instanceof OutOperation && !isLast(aggregationOperation, aggregationOperations)) { throw new IllegalArgumentException("The $out operator must be the last stage in the pipeline."); } } @@ -172,6 +172,10 @@ public class Aggregation { this.options = options; } + private boolean isLast(AggregationOperation aggregationOperation, List aggregationOperations) { + return aggregationOperations.indexOf(aggregationOperation) == aggregationOperations.size() - 1; + } + /** * A pointer to the previous {@link AggregationOperation}. * diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/OutOperationUnitTest.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/OutOperationUnitTest.java index 3b51da6cd..0d5775d35 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/OutOperationUnitTest.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/OutOperationUnitTest.java @@ -24,6 +24,9 @@ import org.junit.Test; */ public class OutOperationUnitTest { + /** + * @see DATAMONGO-1418 + */ @Test(expected = IllegalArgumentException.class) public void shouldCheckNPEInCreation() { new OutOperation(null);