Coverage Report - com.allanbank.mongodb.client.AbstractClient
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractClient
100%
14/14
100%
2/2
1.333
 
 1  
 /*
 2  
  * #%L
 3  
  * AbstractClient.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;
 21  
 
 22  
 import java.io.Closeable;
 23  
 import java.util.concurrent.atomic.AtomicBoolean;
 24  
 
 25  
 import com.allanbank.mongodb.MongoDbException;
 26  
 import com.allanbank.mongodb.ReadPreference;
 27  
 import com.allanbank.mongodb.client.callback.ReplyCallback;
 28  
 import com.allanbank.mongodb.client.connection.Connection;
 29  
 import com.allanbank.mongodb.error.MongoClientClosedException;
 30  
 
 31  
 /**
 32  
  * AbstractClient provides a base class for {@link Client} implementations.
 33  
  * 
 34  
  * @api.no This class is <b>NOT</b> part of the drivers API. This class may be
 35  
  *         mutated in incompatible ways between any two releases of the driver.
 36  
  * @copyright 2012-2014, Allanbank Consulting, Inc., All Rights Reserved
 37  
  */
 38  
 public abstract class AbstractClient implements Client {
 39  
 
 40  
     /** Tracks if the client is closed. */
 41  83
     private final AtomicBoolean myClosed = new AtomicBoolean(false);
 42  
 
 43  
     /**
 44  
      * Creates a new AbstractClient.
 45  
      */
 46  
     public AbstractClient() {
 47  83
         super();
 48  83
     }
 49  
 
 50  
     /**
 51  
      * {@inheritDoc}
 52  
      * <p>
 53  
      * Overridden to close all of the open connections.
 54  
      * </p>
 55  
      * 
 56  
      * @see Closeable#close()
 57  
      */
 58  
     @Override
 59  
     public void close() {
 60  11
         myClosed.set(true);
 61  11
     }
 62  
 
 63  
     /**
 64  
      * {@inheritDoc}
 65  
      * <p>
 66  
      * Overridden to locate the a connection to send the messages and then
 67  
      * forward the messages to that connection.
 68  
      * </p>
 69  
      */
 70  
     @Override
 71  
     public void send(final Message message1, final Message message2,
 72  
             final ReplyCallback replyCallback) throws MongoDbException {
 73  
 
 74  2
         assertOpen(message1);
 75  
 
 76  2
         findConnection(message1, message2).send(message1, message2,
 77  
                 replyCallback);
 78  2
     }
 79  
 
 80  
     /**
 81  
      * {@inheritDoc}
 82  
      * <p>
 83  
      * Overridden to locate the a connection to send the message and then
 84  
      * forward the message to that connection.
 85  
      * </p>
 86  
      */
 87  
     @Override
 88  
     public void send(final Message message, final ReplyCallback replyCallback)
 89  
             throws MongoDbException {
 90  
 
 91  63
         assertOpen(message);
 92  
 
 93  62
         findConnection(message, null).send(message, replyCallback);
 94  58
     }
 95  
 
 96  
     /**
 97  
      * Locates a {@link Connection} to send a message on.
 98  
      * 
 99  
      * @param message1
 100  
      *            The first message that will be sent. The connection return
 101  
      *            should be compatible with all of the messages
 102  
      *            {@link ReadPreference}.
 103  
      * @param message2
 104  
      *            The second message that will be sent. The connection return
 105  
      *            should be compatible with all of the messages
 106  
      *            {@link ReadPreference}. May be <code>null</code>.
 107  
      * 
 108  
      * @return The {@link Connection} to send a message on.
 109  
      * @throws MongoDbException
 110  
      *             In the case of an error finding a {@link Connection}.
 111  
      */
 112  
     protected abstract Connection findConnection(Message message1,
 113  
             Message message2) throws MongoDbException;
 114  
 
 115  
     /**
 116  
      * Asserts that the command is open.
 117  
      * 
 118  
      * @param message
 119  
      *            The message being sent.
 120  
      * @throws MongoClientClosedException
 121  
      *             If the client has been closed.
 122  
      */
 123  
     private void assertOpen(final Message message)
 124  
             throws MongoClientClosedException {
 125  65
         if (myClosed.get()) {
 126  1
             throw new MongoClientClosedException(message);
 127  
         }
 128  64
     }
 129  
 
 130  
 }