Clover coverage report - ConfigKit - 1.2
Coverage timestamp: Wed Dec 3 2003 14:29:16 EST
file stats: LOC: 145   Methods: 3
NCLOC: 84   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
ComponentConfigUtil.java 87.5% 92.9% 100% 91.5%
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.InputStream;
 11   
 import java.net.URL;
 12   
 import org.xml.sax.InputSource;
 13   
 
 14   
 /**
 15   
  * Utility class to get ConfigValidator objects for components. See {@link
 16   
  * #getComponentConfigValidator} for a detailed explanation about how
 17   
  * ConfigValidator objects are loaded.
 18   
  *
 19   
  * @author Peter Donald
 20   
  * @version $Revision: 1.1 $ $Date: 2003/12/03 03:19:28 $
 21   
  */
 22   
 public class ComponentConfigUtil
 23   
 {
 24   
     /** Postfix added to classname of component to look for schema. */
 25   
     private static final String DEFAULT_LOCATION_POSTFIX = "-schema.xml";
 26   
 
 27   
     /**
 28   
      * Return the ConfigValidator for specified component. The component is
 29   
      * specified by classname and classloader. The ConfigValidator is loaded
 30   
      * from specified location and has specified type. If the type is null then
 31   
      * ConfigKit will attempt to guess the type based on schema location. The
 32   
      * location parameter can be relative to the component (ie FooSchema.xml for
 33   
      * class com.biz.Bar will load resource "/com/biz/FooSchema.xml" from
 34   
      * classloader), absolute resource location in classloader (must start with
 35   
      * "/") or null. If the location is null then it will assume resource name
 36   
      * is the same name as class with the postfix "-schema.xml" added to
 37   
      * classname. If no such resource is located in the ClassLoader then null is
 38   
      * returned.
 39   
      *
 40   
      * @param classname the classname of component
 41   
      * @param classLoader the classloader component loaded from
 42   
      * @param location the location of schema
 43   
      * @param type the type of schema
 44   
      * @return the ConfigValidator
 45   
      * @throws java.lang.Exception if error creating validator
 46   
      */
 47  3
     public static ConfigValidator getComponentConfigValidator(
 48   
         final String classname,
 49   
         final ClassLoader classLoader,
 50   
         final String location,
 51   
         final String type )
 52   
         throws Exception
 53   
     {
 54  3
         if( null == classname )
 55   
         {
 56  1
             throw new NullPointerException( "classname" );
 57   
         }
 58  2
         if( null == classLoader )
 59   
         {
 60  1
             throw new NullPointerException( "classLoader" );
 61   
         }
 62  1
         final String actualLocation = calculateLocation( classname, location );
 63  1
         final InputSource inputSource =
 64   
             getSchemaInputSource( actualLocation.substring( 1 ), classLoader );
 65  1
         if( null != inputSource )
 66   
         {
 67  1
             return ConfigValidatorFactory.create( type, inputSource );
 68   
         }
 69   
         else
 70   
         {
 71  0
             return null;
 72   
         }
 73   
     }
 74   
 
 75   
     /**
 76   
      * Determine the location of configuration schema for class. If the
 77   
      * specified location is not null then that will be returned otherwise the
 78   
      * location is the resource name of the with {@link #DEFAULT_LOCATION_POSTFIX}
 79   
      * appended rather than ".class". ie If the classname was "com.biz.Foo" then
 80   
      * the schema location would be at "/com/biz/Foo-schema.xml".
 81   
      *
 82   
      * @param classname the name of the class
 83   
      * @param location the specified location of schema
 84   
      * @return the actual location of schema
 85   
      */
 86  5
     static String calculateLocation( final String classname,
 87   
                                      final String location )
 88   
     {
 89  5
         if( null == location )
 90   
         {
 91  1
             return "/" +
 92   
                 classname.replace( '.', '/' ) +
 93   
                 DEFAULT_LOCATION_POSTFIX;
 94   
         }
 95  4
         else if( location.startsWith( "/" ) )
 96   
         {
 97  1
             return location;
 98   
         }
 99   
         else
 100   
         {
 101  3
             final int index = classname.lastIndexOf( '.' );
 102  3
             String packageName;
 103  3
             if( -1 != index )
 104   
             {
 105  2
                 packageName = classname.substring( 0, index + 1 );
 106   
             }
 107   
             else
 108   
             {
 109  1
                 packageName = "";
 110   
             }
 111  3
             return "/" + packageName.replace( '.', '/' ) + location;
 112   
         }
 113   
     }
 114   
 
 115   
     /**
 116   
      * Get the input source for schema specified for component.
 117   
      *
 118   
      * @param resource the resource location of schema
 119   
      * @param classLoader the ClassLoader to load schema from
 120   
      * @return the InputSource for schema
 121   
      */
 122  3
     static InputSource getSchemaInputSource( final String resource,
 123   
                                              final ClassLoader classLoader )
 124   
     {
 125  3
         final InputStream inputStream = classLoader.getResourceAsStream(
 126   
             resource );
 127  3
         if( null == inputStream )
 128   
         {
 129  1
             return null;
 130   
         }
 131   
 
 132  2
         final InputSource inputSource = new InputSource( inputStream );
 133  2
         final URL url = classLoader.getResource( resource );
 134  2
         if( null != url )
 135   
         {
 136  2
             inputSource.setSystemId( url.toExternalForm() );
 137   
         }
 138   
         else
 139   
         {
 140  0
             inputSource.setSystemId( resource );
 141   
         }
 142  2
         return inputSource;
 143   
     }
 144   
 }
 145