Browse Source
We now distinguish between aggregation operations that replace fields in the aggregation pipeline and those which inherit fields from previous operations. InheritsFieldsAggregationOperation is a nested interface of FieldsExposingAggregationOperation is a marker to lookup fields along the aggregation context chain. Added unit and integration tests. Mention lookup operator in docs. Original pull request: #344.pull/347/head
9 changed files with 353 additions and 21 deletions
@ -0,0 +1,65 @@
@@ -0,0 +1,65 @@
|
||||
/* |
||||
* Copyright 2016 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.data.mongodb.core.aggregation; |
||||
|
||||
import org.springframework.data.mongodb.core.aggregation.ExposedFields.FieldReference; |
||||
import org.springframework.util.Assert; |
||||
|
||||
/** |
||||
* {@link ExposedFieldsAggregationOperationContext} that inherits fields from its parent |
||||
* {@link AggregationOperationContext}. |
||||
* |
||||
* @author Mark Paluch |
||||
*/ |
||||
class InheritingExposedFieldsAggregationOperationContext extends ExposedFieldsAggregationOperationContext { |
||||
|
||||
private final AggregationOperationContext previousContext; |
||||
|
||||
/** |
||||
* Creates a new {@link ExposedFieldsAggregationOperationContext} from the given {@link ExposedFields}. Uses the given |
||||
* {@link AggregationOperationContext} to perform a mapping to mongo types if necessary. |
||||
* |
||||
* @param exposedFields must not be {@literal null}. |
||||
* @param previousContext must not be {@literal null}. |
||||
*/ |
||||
public InheritingExposedFieldsAggregationOperationContext(ExposedFields exposedFields, |
||||
AggregationOperationContext previousContext) { |
||||
|
||||
super(exposedFields, previousContext); |
||||
Assert.notNull(previousContext, "PreviousContext must not be null!"); |
||||
this.previousContext = previousContext; |
||||
} |
||||
|
||||
/* |
||||
* (non-Javadoc) |
||||
* @see org.springframework.data.mongodb.core.aggregation.ExposedFieldsAggregationOperationContext#resolveExposedField(org.springframework.data.mongodb.core.aggregation.Field, java.lang.String) |
||||
*/ |
||||
@Override |
||||
protected FieldReference resolveExposedField(Field field, String name) { |
||||
|
||||
FieldReference fieldReference = super.resolveExposedField(field, name); |
||||
if (fieldReference != null) { |
||||
return fieldReference; |
||||
} |
||||
|
||||
if (field != null) { |
||||
return previousContext.getReference(field); |
||||
} |
||||
|
||||
return previousContext.getReference(name); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue