Clover coverage report - gsbase - 2.0.1
Coverage timestamp: Sat Jan 1 2005 12:30:02 EST
file stats: LOC: 149   Methods: 7
NCLOC: 67   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TraceItemQueue.java 77.8% 84.8% 85.7% 82.8%
coverage coverage
 1    /*
 2    * Copyright (c) 1998, 2005 Gargoyle Software Inc. All rights reserved.
 3    *
 4    * Redistribution and use in source and binary forms, with or without
 5    * modification, are permitted provided that the following conditions are met:
 6    *
 7    * 1. Redistributions of source code must retain the above copyright notice,
 8    * this list of conditions and the following disclaimer.
 9    * 2. Redistributions in binary form must reproduce the above copyright notice,
 10    * this list of conditions and the following disclaimer in the documentation
 11    * and/or other materials provided with the distribution.
 12    * 3. The end-user documentation included with the redistribution, if any, must
 13    * include the following acknowledgment:
 14    *
 15    * "This product includes software developed by Gargoyle Software Inc.
 16    * (http://www.GargoyleSoftware.com/)."
 17    *
 18    * Alternately, this acknowledgment may appear in the software itself, if
 19    * and wherever such third-party acknowledgments normally appear.
 20    * 4. The name "Gargoyle Software" must not be used to endorse or promote
 21    * products derived from this software without prior written permission.
 22    * For written permission, please contact info@GargoyleSoftware.com.
 23    * 5. Products derived from this software may not be called "GSBase", nor may
 24    * "GSBase" appear in their name, without prior written permission of
 25    * Gargoyle Software Inc.
 26    *
 27    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 28    * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 29    * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
 30    * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 31    * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 32    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 33    * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 34    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 35    * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 36    * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 37    */
 38    package com.gargoylesoftware.base.trace;
 39   
 40    import com.gargoylesoftware.base.util.DetailedNullPointerException;
 41   
 42    /**
 43    * <p style="color: orange">Internal use only.</p>.
 44    *
 45    * @version $Revision: 1.8 $
 46    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
 47    */
 48    public class TraceItemQueue {
 49    private TraceItem firstItem_;
 50    private TraceItem lastItem_;
 51    private int itemCount_;
 52   
 53    /**
 54    *
 55    */
 56  4 public TraceItemQueue() {
 57  4 firstItem_ = null;
 58  4 lastItem_ = null;
 59  4 itemCount_ = 0;
 60    }
 61   
 62    /**
 63    * @param item The item to push.
 64    */
 65  6 public synchronized void push( final TraceItem item ) {
 66  6 assertNotNull("item", item);
 67  6 if( item.getPrevItem() != null || item.getNextItem() != null ) {
 68  0 throw new IllegalArgumentException("Pointers are not null");
 69    }
 70   
 71  6 if( itemCount_ == 0 ) {
 72  5 lastItem_ = item;
 73    }
 74   
 75  6 if( firstItem_ != null ) {
 76  1 firstItem_.setPrevItem( item );
 77    }
 78  6 item.setNextItem( firstItem_ );
 79  6 firstItem_ = item;
 80  6 itemCount_++;
 81    }
 82   
 83    /**
 84    * Return the next item on the queue or null if the queue is empty
 85    * @return The next item or null.
 86    */
 87  12 public synchronized TraceItem pop() {
 88    // System.out.println("***TraceItemQueue.pop() "+this);
 89  12 checkValidity();
 90  12 final TraceItem popItem = lastItem_;
 91   
 92  12 if( popItem != null ) {
 93  5 lastItem_ = lastItem_.getPrevItem();
 94  5 if( lastItem_ == null ) {
 95  4 firstItem_ = null;
 96    }
 97    else {
 98  1 lastItem_.setNextItem( null );
 99    }
 100  5 popItem.setPrevItem( null );
 101  5 popItem.setNextItem( null );
 102  5 itemCount_--;
 103    }
 104   
 105  12 return popItem;
 106    }
 107   
 108  12 private void checkValidity() {
 109  12 if( itemCount_ == 0 ) {
 110  7 if( firstItem_ != null ) {
 111  0 throw new IllegalStateException("firstItem should be null: "+this);
 112    }
 113  7 if( lastItem_ != null ) {
 114  0 throw new IllegalStateException("lastItem should be null: "+this);
 115    }
 116    }
 117    }
 118    /**
 119    * @return the number of items in the queue.
 120    */
 121  11 public synchronized int size() {
 122  11 return itemCount_;
 123    }
 124   
 125    /**
 126    * @return The string representation of this object.
 127    */
 128  0 public String toString() {
 129  0 return getClass().getName()+" itemCount=["+itemCount_
 130    +"] firstItem=["+firstItem_+"] lastItem=["+lastItem_+"]";
 131    }
 132   
 133   
 134    /**
 135    * Verify that the specified value is not null. If it is then throw an exception
 136    *
 137    * @param fieldName The name of the field to check
 138    * @param fieldValue The value of the field to check
 139    * @exception DetailedNullPointerException If fieldValue is null
 140    */
 141  6 protected final void assertNotNull( final String fieldName, final Object fieldValue )
 142    throws DetailedNullPointerException {
 143   
 144  6 if( fieldValue == null ) {
 145  0 throw new DetailedNullPointerException(fieldName);
 146    }
 147    }
 148    }
 149