Clover coverage report - gsbase - 2.0.1
Coverage timestamp: Sat Jan 1 2005 12:30:02 EST
file stats: LOC: 192   Methods: 11
NCLOC: 77   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TraceChannel.java 10% 25% 45.5% 26.4%
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    import java.beans.PropertyChangeListener;
 42    import java.beans.PropertyChangeSupport;
 43    import java.util.HashSet;
 44    import java.util.Set;
 45   
 46    /**
 47    * This class represents a "channel" that diagnostic messages can be written to. The
 48    * channel will contain zero or more TraceWriters which will be responsible for handling
 49    * the messages.
 50    *
 51    * @version $Revision: 1.4 $
 52    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
 53    */
 54    public class TraceChannel {
 55    private final String name_;
 56    private boolean isEnabled_ = true;
 57    private PropertyChangeSupport propertyChangeSupport_ = null;
 58    private final Set traceWriters_ = new HashSet();
 59   
 60    /**
 61    * Create a trace channel with the specified name.
 62    *
 63    * @param name The name of the channel.
 64    */
 65  5 public TraceChannel( final String name ) {
 66  5 assertNotNull("name", name);
 67  5 name_ = name;
 68    }
 69   
 70    /**
 71    * Return the name of this trace channel.
 72    *
 73    * @return the name.
 74    */
 75  0 public final String getName() {
 76  0 return name_;
 77    }
 78   
 79    /**
 80    * Return a string representation of this object.
 81    * @return a string representation of this object.
 82    */
 83  0 public String toString() {
 84  0 final StringBuffer buffer = new StringBuffer();
 85  0 buffer.append( getClass().getName() );
 86  0 buffer.append( "[name=[" );
 87  0 buffer.append( getName() );
 88  0 buffer.append( "] isEnabled=[");
 89  0 buffer.append( isEnabled_ );
 90  0 buffer.append( "]]" );
 91   
 92  0 return buffer.toString();
 93    }
 94   
 95    /**
 96    * Set whether or not this channel is enabled. If it is not enabled
 97    * then any requests sent to this channel will be discarded.
 98    *
 99    * @param isEnabled true if this channel should be enabled.
 100    */
 101  0 public void setEnabled( final boolean isEnabled ) {
 102  0 final boolean oldValue = isEnabled_;
 103  0 isEnabled_ = isEnabled;
 104   
 105  0 if( propertyChangeSupport_ != null && oldValue != isEnabled_ ) {
 106  0 propertyChangeSupport_.firePropertyChange("enabled",
 107    isEnabled_,
 108    oldValue );
 109    }
 110    }
 111   
 112    /**
 113    * Return true if this channel is enabled.
 114    * @return true if this channel is enabled.
 115    */
 116  3 public boolean isEnabled() {
 117  3 return isEnabled_;
 118    }
 119   
 120    /**
 121    * Add a property change listener.
 122    *
 123    * @param listener The new listener
 124    */
 125  0 public void addPropertyChangeListener( final PropertyChangeListener listener ) {
 126  0 if( propertyChangeSupport_ == null ) {
 127  0 synchronized(this) {
 128  0 if( propertyChangeSupport_ == null ) {
 129  0 propertyChangeSupport_ = new PropertyChangeSupport(this);
 130    }
 131    }
 132    }
 133  0 propertyChangeSupport_.addPropertyChangeListener(listener);
 134    }
 135   
 136    /**
 137    * Remove a property change listener.
 138    *
 139    * @param listener The listener to remove
 140    */
 141  0 public void removePropertyChangeListener( final PropertyChangeListener listener ) {
 142  0 if( propertyChangeSupport_ != null ) {
 143  0 propertyChangeSupport_.removePropertyChangeListener(listener);
 144    }
 145    }
 146   
 147    /**
 148    * Return a collection of trace writers
 149    * @return The trace writers
 150    */
 151  3 /*package*/ Set getTraceWriters() {
 152  3 return traceWriters_;
 153    }
 154   
 155    /**
 156    * Add a trace writer.
 157    * @param writer A trace writer
 158    */
 159  1 public void addTraceWriter( final TraceWriter writer ) {
 160  1 assertNotNull("writer", writer);
 161  1 synchronized( traceWriters_ ) {
 162  1 traceWriters_.add(writer);
 163    }
 164    }
 165   
 166    /**
 167    * Remove a trace writer.
 168    * @param writer A trace writer
 169    */
 170  0 public void removeTraceWriter( final TraceWriter writer ) {
 171  0 assertNotNull("writer", writer);
 172  0 synchronized( traceWriters_ ) {
 173  0 traceWriters_.remove(writer);
 174    }
 175    }
 176   
 177   
 178    /**
 179    * Verify that the specified value is not null. If it is then throw an exception
 180    *
 181    * @param fieldName The name of the field to check
 182    * @param fieldValue The value of the field to check
 183    * @exception DetailedNullPointerException If fieldValue is null
 184    */
 185  6 protected final void assertNotNull( final String fieldName, final Object fieldValue )
 186    throws DetailedNullPointerException {
 187   
 188  6 if( fieldValue == null ) {
 189  0 throw new DetailedNullPointerException(fieldName);
 190    }
 191    }
 192    }