com.mongodb.client.result.UpdateResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mongo-java-driver Show documentation
Show all versions of mongo-java-driver Show documentation
The MongoDB Java Driver uber-artifact, containing mongodb-driver, mongodb-driver-core, and bson
The newest version!
/*
* Copyright (c) 2008-2014 MongoDB, Inc.
*
* 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 com.mongodb.client.result;
import org.bson.BsonValue;
/**
* The result of an update operation. If the update was unacknowledged, then {@code wasAcknowledged} will return false and all other
* methods will throw {@code UnsupportedOperationException}.
*
* @see com.mongodb.WriteConcern#UNACKNOWLEDGED
* @since 3.0
*/
public abstract class UpdateResult {
/**
* Returns true if the write was acknowledged.
*
* @return true if the write was acknowledged
*/
public abstract boolean wasAcknowledged();
/**
* Gets the number of documents matched by the query.
*
* @return the number of documents matched
*/
public abstract long getMatchedCount();
/**
* Gets a value indicating whether the modified count is available.
*
* The modified count is only available when all servers have been upgraded to 2.6 or above.
*
* @return true if the modified count is available
*/
public abstract boolean isModifiedCountAvailable();
/**
* Gets the number of documents modified by the update.
*
* @return the number of documents modified
*/
public abstract long getModifiedCount();
/**
* If the replace resulted in an inserted document, gets the _id of the inserted document, otherwise null.
*
* @return if the replace resulted in an inserted document, the _id of the inserted document, otherwise null
*/
public abstract BsonValue getUpsertedId();
/**
* Create an acknowledged UpdateResult
*
* @param matchedCount the number of documents matched
* @param modifiedCount the number of documents modified
* @param upsertedId if the replace resulted in an inserted document, the id of the inserted document
* @return an acknowledged UpdateResult
*/
public static UpdateResult acknowledged(final long matchedCount, final Long modifiedCount, final BsonValue upsertedId) {
return new AcknowledgedUpdateResult(matchedCount, modifiedCount, upsertedId);
}
/**
* Create an unacknowledged UpdateResult
*
* @return an unacknowledged UpdateResult
*/
public static UpdateResult unacknowledged() {
return new UnacknowledgedUpdateResult();
}
private static class AcknowledgedUpdateResult extends UpdateResult {
private final long matchedCount;
private final Long modifiedCount;
private final BsonValue upsertedId;
public AcknowledgedUpdateResult(final long matchedCount, final Long modifiedCount, final BsonValue upsertedId) {
this.matchedCount = matchedCount;
this.modifiedCount = modifiedCount;
this.upsertedId = upsertedId;
}
@Override
public boolean wasAcknowledged() {
return true;
}
@Override
public long getMatchedCount() {
return matchedCount;
}
@Override
public boolean isModifiedCountAvailable() {
return modifiedCount != null;
}
@Override
public long getModifiedCount() {
if (modifiedCount == null) {
throw new UnsupportedOperationException("Modified count is only available when connected to MongoDB 2.6 servers or "
+ "above.");
}
return modifiedCount;
}
@Override
public BsonValue getUpsertedId() {
return upsertedId;
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AcknowledgedUpdateResult that = (AcknowledgedUpdateResult) o;
if (matchedCount != that.matchedCount) {
return false;
}
if (modifiedCount != null ? !modifiedCount.equals(that.modifiedCount) : that.modifiedCount != null) {
return false;
}
if (upsertedId != null ? !upsertedId.equals(that.upsertedId) : that.upsertedId != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = (int) (matchedCount ^ (matchedCount >>> 32));
result = 31 * result + (modifiedCount != null ? modifiedCount.hashCode() : 0);
result = 31 * result + (upsertedId != null ? upsertedId.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "AcknowledgedUpdateResult{"
+ "matchedCount=" + matchedCount
+ ", modifiedCount=" + modifiedCount
+ ", upsertedId=" + upsertedId
+ '}';
}
}
private static class UnacknowledgedUpdateResult extends UpdateResult {
@Override
public boolean wasAcknowledged() {
return false;
}
@Override
public long getMatchedCount() {
throw getUnacknowledgedWriteException();
}
@Override
public boolean isModifiedCountAvailable() {
return false;
}
@Override
public long getModifiedCount() {
throw getUnacknowledgedWriteException();
}
@Override
public BsonValue getUpsertedId() {
throw getUnacknowledgedWriteException();
}
private UnsupportedOperationException getUnacknowledgedWriteException() {
return new UnsupportedOperationException("Cannot get information about an unacknowledged update");
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
return true;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String toString() {
return "UnacknowledgedUpdateResult{}";
}
}
}