Coverage Report - com.allanbank.mongodb.error.ServerVersionException
 
Classes in this File Line Coverage Branch Coverage Complexity
ServerVersionException
100%
19/19
100%
4/4
1.5
 
 1  
 /*
 2  
  * #%L
 3  
  * ServerVersionException.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.error;
 21  
 
 22  
 import java.io.IOException;
 23  
 
 24  
 import com.allanbank.mongodb.MongoDbException;
 25  
 import com.allanbank.mongodb.Version;
 26  
 import com.allanbank.mongodb.client.Message;
 27  
 import com.allanbank.mongodb.client.VersionRange;
 28  
 
 29  
 /**
 30  
  * ServerVersionException is thrown to report that an attempt was made to send a
 31  
  * request to a server that required a more recent version of the server.
 32  
  * 
 33  
  * @api.yes This class is part of the driver's API. Public and protected members
 34  
  *          will be deprecated for at least 1 non-bugfix release (version
 35  
  *          numbers are <major>.<minor>.<bugfix>) before being
 36  
  *          removed or modified.
 37  
  * @copyright 2013, Allanbank Consulting, Inc., All Rights Reserved
 38  
  */
 39  
 public class ServerVersionException extends MongoDbException {
 40  
 
 41  
     /** Serialization version for the class. */
 42  
     private static final long serialVersionUID = -8577756570001826274L;
 43  
 
 44  
     /**
 45  
      * Creates a suitable message for the exception.
 46  
      * 
 47  
      * @param operation
 48  
      *            The name of the command/operation.
 49  
      * @param range
 50  
      *            The required server version range for the operation.
 51  
      * @param actual
 52  
      *            The actual version from the server.
 53  
      * @return The message for the exception.
 54  
      */
 55  
     private static String message(final String operation,
 56  
             final VersionRange range, final Version actual) {
 57  5
         if (Version.VERSION_0.equals(range.getLowerBounds())) {
 58  1
             return "Attempted to send the '" + operation
 59  
                     + "' operation to a version " + actual
 60  
                     + " server but the operation is only supported "
 61  
                     + "before version " + range.getUpperBounds() + ".";
 62  
         }
 63  4
         else if (Version.UNKNOWN.equals(range.getUpperBounds())) {
 64  3
             return "Attempted to send the '" + operation
 65  
                     + "' operation to a version " + actual
 66  
                     + " server but the operation is only supported "
 67  
                     + "after version " + range.getLowerBounds() + ".";
 68  
         }
 69  
         else {
 70  1
             return "Attempted to send the '" + operation
 71  
                     + "' operation to a version " + actual
 72  
                     + " server but the operation is only supported "
 73  
                     + "from version " + range.getLowerBounds() + " to "
 74  
                     + range.getUpperBounds() + ".";
 75  
         }
 76  
     }
 77  
 
 78  
     /** The actual server version. */
 79  
     private final Version myActualVersion;
 80  
 
 81  
     /** The operation's message. */
 82  
     private transient Message myMessage;
 83  
 
 84  
     /** The name of the operation. */
 85  
     private final String myOperation;
 86  
 
 87  
     /** The required server version for the operation. */
 88  
     private final VersionRange myRange;
 89  
 
 90  
     /**
 91  
      * Creates a new ServerVersionException.
 92  
      * 
 93  
      * @param operation
 94  
      *            The name of the command/operation.
 95  
      * @param range
 96  
      *            The required server version range for the operation.
 97  
      * @param actual
 98  
      *            The actual version from the server.
 99  
      * @param message
 100  
      *            The operation's message.
 101  
      */
 102  
     public ServerVersionException(final String operation,
 103  
             final VersionRange range, final Version actual,
 104  
             final Message message) {
 105  5
         super(message(operation, range, actual));
 106  
 
 107  5
         myOperation = operation;
 108  5
         myActualVersion = actual;
 109  5
         myRange = range;
 110  5
         myMessage = message;
 111  5
     }
 112  
 
 113  
     /**
 114  
      * Returns the actual server version.
 115  
      * 
 116  
      * @return The actual server version.
 117  
      */
 118  
     public Version getActualVersion() {
 119  4
         return myActualVersion;
 120  
     }
 121  
 
 122  
     /**
 123  
      * Returns the maximum (exclusive) server version for the operation.
 124  
      * 
 125  
      * @return The required server version for the operation.
 126  
      */
 127  
     public Version getMaximumVersion() {
 128  3
         return myRange.getUpperBounds();
 129  
     }
 130  
 
 131  
     /**
 132  
      * Returns the name of the operation.
 133  
      * 
 134  
      * @return The name of the operation.
 135  
      */
 136  
     public String getOperation() {
 137  4
         return myOperation;
 138  
     }
 139  
 
 140  
     /**
 141  
      * Returns the required (inclusive) server version for the operation.
 142  
      * 
 143  
      * @return The required server version for the operation.
 144  
      */
 145  
     public Version getRequiredVersion() {
 146  4
         return myRange.getLowerBounds();
 147  
     }
 148  
 
 149  
     /**
 150  
      * Returns the operation's message.
 151  
      * 
 152  
      * @return The operation's message.
 153  
      */
 154  
     public Message getSentMessage() {
 155  5
         return myMessage;
 156  
     }
 157  
 
 158  
     /**
 159  
      * Reads the serialized configuration and sets the transient field to known
 160  
      * values.
 161  
      * 
 162  
      * @param stream
 163  
      *            The stream to read from.
 164  
      * @throws IOException
 165  
      *             On a failure reading from the stream.
 166  
      * @throws ClassNotFoundException
 167  
      *             On a failure locating a type in the stream.
 168  
      */
 169  
     private void readObject(final java.io.ObjectInputStream stream)
 170  
             throws IOException, ClassNotFoundException {
 171  1
         stream.defaultReadObject();
 172  
 
 173  1
         myMessage = null;
 174  1
     }
 175  
 }