1 /*
2 * #%L
3 * AggregateCommand.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 package com.allanbank.mongodb.client.message;
21
22 import com.allanbank.mongodb.ReadPreference;
23 import com.allanbank.mongodb.bson.Document;
24 import com.allanbank.mongodb.builder.Aggregate;
25 import com.allanbank.mongodb.client.VersionRange;
26
27 /**
28 * Helper class for the aggregation commands.
29 *
30 * @api.no This class is <b>NOT</b> part of the drivers API. This class may be
31 * mutated in incompatible ways between any two releases of the driver.
32 * @copyright 2011-2013, Allanbank Consulting, Inc., All Rights Reserved
33 */
34 public class AggregateCommand extends Command implements CursorableMessage {
35
36 /** The original aggregation. */
37 private final Aggregate myAggregate;
38
39 /**
40 * Create a new AggregateCommand.
41 *
42 * @param aggregation
43 * The original aggregation.
44 * @param databaseName
45 * The name of the database.
46 * @param collectionName
47 * The name of the collection to run the aggregation on.
48 * @param commandDocument
49 * The command document containing the command and options.
50 * @param readPreference
51 * The preference for which servers to use to retrieve the
52 * results.
53 * @param requiredServerVersion
54 * The required version of the server to support processing the
55 * message.
56 */
57 public AggregateCommand(final Aggregate aggregation,
58 final String databaseName, final String collectionName,
59 final Document commandDocument,
60 final ReadPreference readPreference,
61 final VersionRange requiredServerVersion) {
62 super(databaseName, collectionName, commandDocument, readPreference,
63 requiredServerVersion);
64
65 myAggregate = aggregation;
66 }
67
68 /**
69 * Determines if the passed object is of this same type as this object and
70 * if so that its fields are equal.
71 *
72 * @param object
73 * The object to compare to.
74 *
75 * @see java.lang.Object#equals(java.lang.Object)
76 */
77 @Override
78 public boolean equals(final Object object) {
79 boolean result = false;
80 if (this == object) {
81 result = true;
82 }
83 else if ((object != null) && (getClass() == object.getClass())) {
84 result = super.equals(object);
85 }
86 return result;
87 }
88
89 /**
90 * {@inheritDoc}
91 * <p>
92 * Overridden to return the batch size from the {@link Aggregate}.
93 * </p>
94 */
95 @Override
96 public int getBatchSize() {
97 return myAggregate.getBatchSize();
98 }
99
100 /**
101 * {@inheritDoc}
102 * <p>
103 * Overridden to return the limit from the {@link Aggregate}.
104 * </p>
105 */
106 @Override
107 public int getLimit() {
108 return myAggregate.getCursorLimit();
109 }
110
111 /**
112 * Computes a reasonable hash code.
113 *
114 * @return The hash code value.
115 */
116 @Override
117 public int hashCode() {
118 int result = 1;
119 result = (31 * result) + super.hashCode();
120 return result;
121 }
122 }