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