Clover coverage report - ConfigKit - 1.2
Coverage timestamp: Wed Dec 3 2003 14:29:16 EST
file stats: LOC: 117   Methods: 3
NCLOC: 77   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
ConfigKitEntityResolver.java 92.9% 96.2% 100% 95.3%
coverage coverage
 1   
 /*
 2   
  * Copyright (C) The Spice Group. All rights reserved.
 3   
  *
 4   
  * This software is published under the terms of the Spice
 5   
  * Software License version 1.1, a copy of which has been included
 6   
  * with this distribution in the LICENSE.txt file.
 7   
  */
 8   
 package org.codehaus.spice.configkit;
 9   
 
 10   
 import java.io.IOException;
 11   
 import java.io.InputStream;
 12   
 import org.xml.sax.EntityResolver;
 13   
 import org.xml.sax.InputSource;
 14   
 import org.xml.sax.SAXException;
 15   
 
 16   
 /**
 17   
  * A Class to help to resolve Entitys for items such as DTDs or Schemas.
 18   
  *
 19   
  * @author Peter Donald
 20   
  * @version $Revision: 1.1 $ $Date: 2003/12/03 03:19:28 $
 21   
  */
 22   
 class ConfigKitEntityResolver
 23   
     implements EntityResolver
 24   
 {
 25   
     /** The list of DTDs that can be resolved by this class. */
 26   
     private final EntityInfo[] m_infos;
 27   
 
 28   
     /** The ClassLoader to use when loading resources for DTDs. */
 29   
     private final ClassLoader m_classLoader;
 30   
 
 31   
     /**
 32   
      * Construct a resolver using specified DTDInfos where resources are loaded
 33   
      * from specified ClassLoader.
 34   
      */
 35  26
     ConfigKitEntityResolver( final EntityInfo[] infos,
 36   
                              final ClassLoader classLoader )
 37   
     {
 38  26
         if( null == infos )
 39   
         {
 40  1
             throw new NullPointerException( "infos" );
 41   
         }
 42  25
         m_infos = infos;
 43  25
         m_classLoader = classLoader;
 44   
     }
 45   
 
 46   
     /**
 47   
      * Resolve an entity in the XML file. Called by parser to resolve DTDs.
 48   
      */
 49  22
     public InputSource resolveEntity( final String publicId,
 50   
                                       final String systemId )
 51   
         throws IOException, SAXException
 52   
     {
 53  22
         for( int i = 0; i < m_infos.length; i++ )
 54   
         {
 55  35
             final EntityInfo info = m_infos[ i ];
 56  35
             if( ( publicId != null && publicId.equals( info.getPublicId() ) ) ||
 57   
                 ( systemId != null && systemId.equals( info.getSystemId() ) ) )
 58   
             {
 59  15
                 final ClassLoader classLoader = getClassLoader();
 60  15
                 final String resource = info.getResource();
 61  15
                 final InputStream inputStream =
 62   
                     classLoader.getResourceAsStream( resource );
 63  15
                 if( null == inputStream )
 64   
                 {
 65  1
                     final String message =
 66   
                         "Unable to locate resource " +
 67   
                         resource +
 68   
                         " for entity with publicId=" +
 69   
                         publicId +
 70   
                         " and systemId=" +
 71   
                         systemId +
 72   
                         ". " +
 73   
                         "Looking in classloader " + classLoader + ".";
 74  1
                     throw new IOException( message );
 75   
                 }
 76  14
                 final InputSource inputSource = new InputSource( inputStream );
 77  14
                 inputSource.setPublicId( info.getPublicId() );
 78   
 
 79   
                 //Always try to have at least a basic resource id
 80   
                 //in system id as some tools will look at extension to
 81   
                 //determine how to handle resource (ie .dtd is handled
 82   
                 //differently)
 83  14
                 if( null == info.getSystemId() )
 84   
                 {
 85  0
                     inputSource.setSystemId( resource );
 86   
                 }
 87   
                 else
 88   
                 {
 89  14
                     inputSource.setSystemId( info.getSystemId() );
 90   
                 }
 91  14
                 return inputSource;
 92   
             }
 93   
         }
 94   
 
 95  7
         return null;
 96   
     }
 97   
 
 98   
     /**
 99   
      * Return CLassLoader to load resource from. If a ClassLoader is specified
 100   
      * in the constructor use that, else use ContextClassLoader unless that is
 101   
      * null in which case use the current classes ClassLoader.
 102   
      */
 103  15
     private ClassLoader getClassLoader()
 104   
     {
 105  15
         ClassLoader classLoader = m_classLoader;
 106  15
         if( null == classLoader )
 107   
         {
 108  4
             classLoader = Thread.currentThread().getContextClassLoader();
 109   
         }
 110  15
         if( null == classLoader )
 111   
         {
 112  2
             classLoader = getClass().getClassLoader();
 113   
         }
 114  15
         return classLoader;
 115   
     }
 116   
 }
 117