Coverage Report - com.allanbank.mongodb.client.callback.AbstractReplyCallback
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractReplyCallback
100%
9/9
16%
1/6
1.333
 
 1  
 /*
 2  
  * #%L
 3  
  * AbstractReplyCallback.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.callback;
 21  
 
 22  
 import com.allanbank.mongodb.Callback;
 23  
 import com.allanbank.mongodb.MongoDbException;
 24  
 import com.allanbank.mongodb.client.FutureCallback;
 25  
 import com.allanbank.mongodb.client.message.Reply;
 26  
 
 27  
 /**
 28  
  * Helper class for constructing callbacks that convert a {@link Reply} message
 29  
  * into a different type of result.
 30  
  * 
 31  
  * @param <F>
 32  
  *            The type for the converted {@link Reply}.
 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 2011-2014, Allanbank Consulting, Inc., All Rights Reserved
 37  
  */
 38  
 public abstract class AbstractReplyCallback<F> extends
 39  
         AbstractValidatingReplyCallback {
 40  
 
 41  
     /** The callback for the converted type. */
 42  
     final Callback<F> myForwardCallback;
 43  
 
 44  
     /**
 45  
      * Create a new AbstractReplyCallback.
 46  
      * 
 47  
      * @param forwardCallback
 48  
      *            The callback for the converted type.
 49  
      */
 50  403
     public AbstractReplyCallback(final Callback<F> forwardCallback) {
 51  403
         myForwardCallback = forwardCallback;
 52  403
     }
 53  
 
 54  
     /**
 55  
      * {@inheritDoc}
 56  
      * <p>
 57  
      * Overridden to forward the exception to the {@link #myForwardCallback}.
 58  
      * </p>
 59  
      * 
 60  
      * @see Callback#exception
 61  
      */
 62  
     @Override
 63  
     public void exception(final Throwable thrown) {
 64  26
         getForwardCallback().exception(thrown);
 65  26
     }
 66  
 
 67  
     /**
 68  
      * Returns the forwardCallback value.
 69  
      * 
 70  
      * @return the forwardCallback
 71  
      */
 72  
     public Callback<F> getForwardCallback() {
 73  243
         return myForwardCallback;
 74  
     }
 75  
 
 76  
     /**
 77  
      * {@inheritDoc}
 78  
      * <p>
 79  
      * Overridden to return true if the {@link #getForwardCallback()
 80  
      * forwardCallback} is a {@link FutureCallback} or to forward the call if
 81  
      * the {@code forwardCallback} is a {@link ReplyCallback}.
 82  
      * </p>
 83  
      */
 84  
     @Override
 85  
     public boolean isLightWeight() {
 86  1
         return (myForwardCallback instanceof FutureCallback)
 87  
                 || ((myForwardCallback instanceof ReplyCallback) && ((ReplyCallback) myForwardCallback)
 88  
                         .isLightWeight());
 89  
     }
 90  
 
 91  
     /**
 92  
      * Converts the {@link Reply} into the final response type.
 93  
      * 
 94  
      * @param reply
 95  
      *            The reply to convert.
 96  
      * @return The converted reply.
 97  
      * @throws MongoDbException
 98  
      *             On a failure converting the reply. Generally, the
 99  
      *             {@link #verify(Reply)} method should be used to report
 100  
      *             errors.
 101  
      */
 102  
     protected abstract F convert(Reply reply) throws MongoDbException;
 103  
 
 104  
     /**
 105  
      * {@inheritDoc}
 106  
      * <p>
 107  
      * Overriden to {@link #convert(Reply) convert} and then pass the converted
 108  
      * reply to the {@link #getForwardCallback() forward callback}.
 109  
      * </p>
 110  
      */
 111  
     @Override
 112  
     protected void handle(final Reply reply) {
 113  190
         getForwardCallback().callback(convert(reply));
 114  
 
 115  190
     }
 116  
 }