1 /*
2 * #%L
3 * MapStage2.java - mongodb-async-driver - Allanbank Consulting, Inc.
4 * %%
5 * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc.
6 * %%
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * #L%
19 */
20
21 package com.allanbank.mongodb.builder.expression;
22
23 /**
24 * MapStage2 provides a container for the {@code $map} input field name and
25 * {@code as} variable name before adding the expression.
26 *
27 * @api.yes This class is part of the driver's API. Public and protected members
28 * will be deprecated for at least 1 non-bugfix release (version
29 * numbers are <major>.<minor>.<bugfix>) before being
30 * removed or modified.
31 * @copyright 2014, Allanbank Consulting, Inc., All Rights Reserved
32 */
33 public class MapStage2 {
34
35 /** The name of the {@code input} field. */
36 private final String myInputField;
37
38 /** The name of the {@code as} variable. */
39 private final String myVariableName;
40
41 /**
42 * Creates a new MapStage2.
43 *
44 * @param inputField
45 * The name of the {@code input} field.
46 * @param variableName
47 * The name of the {@code as} variable.
48 */
49 /* package */MapStage2(final String inputField, final String variableName) {
50 myInputField = inputField;
51 myVariableName = variableName;
52 }
53
54 /**
55 * Creates the final {@code $map} expression to evaluate.
56 *
57 * @param mapOperation
58 * The expression to be evaluated with the variables within the
59 * {@code $map} expression.
60 * @return The {@link UnaryExpression} for the {@code $map}.
61 */
62 public Expression in(final Expression mapOperation) {
63 return Expressions.map(myInputField, myVariableName, mapOperation);
64 }
65 }