Coverage report

  %line %branch
org.apache.torque.dsfactory.AbstractDataSourceFactory
0% 
0% 

 1  
 package org.apache.torque.dsfactory;
 2  
 
 3  
 /*
 4  
  * Copyright 2001-2004 The Apache Software Foundation.
 5  
  *
 6  
  * Licensed under the Apache License, Version 2.0 (the "License")
 7  
  * you may not use this file except in compliance with the License.
 8  
  * You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 import java.util.Iterator;
 20  
 
 21  
 import javax.sql.ConnectionPoolDataSource;
 22  
 
 23  
 import org.apache.commons.beanutils.ConvertUtils;
 24  
 import org.apache.commons.beanutils.MappedPropertyDescriptor;
 25  
 import org.apache.commons.beanutils.PropertyUtils;
 26  
 
 27  
 import org.apache.commons.configuration.Configuration;
 28  
 import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS;
 29  
 
 30  
 import org.apache.commons.logging.Log;
 31  
 import org.apache.commons.logging.LogFactory;
 32  
 
 33  
 import org.apache.torque.Torque;
 34  
 import org.apache.torque.TorqueException;
 35  
 
 36  
 /**
 37  
  * A class that contains common functionality of the factories in this
 38  
  * package.
 39  
  *
 40  
  * @author <a href="mailto:jmcnally@apache.org">John McNally</a>
 41  
  * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
 42  
  * @version $Id: AbstractDataSourceFactory.java,v 1.12.2.2 2004/05/20 04:35:14 seade Exp $
 43  
  */
 44  0
 public abstract class AbstractDataSourceFactory
 45  
 {
 46  
     /** "pool" Key for the configuration */
 47  
     public static final String POOL_KEY = "pool";
 48  
 
 49  
     /** "connection" Key for the configuration */
 50  
     public static final String CONNECTION_KEY = "connection";
 51  
 
 52  
     /** "default.pool" Key for the configuration */
 53  
     public static final String DEFAULT_POOL_KEY = "defaults.pool";
 54  
 
 55  
     /** "default.connection" Key for the configuration */
 56  
     public static final String DEFAULT_CONNECTION_KEY = "defaults.connection";
 57  
 
 58  
     /** The log */
 59  0
     private static Log log = LogFactory.getLog(AbstractDataSourceFactory.class);
 60  
 
 61  
     /**
 62  
      * Encapsulates setting configuration properties on
 63  
      * <code>DataSource</code> objects.
 64  
      *
 65  
      * @param property the property to read from the configuration
 66  
      * @param c the configuration to read the property from
 67  
      * @param ds the <code>DataSource</code> instance to write the property to
 68  
      * @throws Exception if anything goes wrong
 69  
      */
 70  
     protected void setProperty(String property, Configuration c, Object ds)
 71  
         throws Exception
 72  
     {
 73  0
         String key = property;
 74  0
         Class dsClass = ds.getClass();
 75  0
         int dot = property.indexOf('.');
 76  
         try
 77  
         {
 78  0
             if (dot > 0)
 79  
             {
 80  0
                 property = property.substring(0, dot);
 81  
 
 82  0
                 MappedPropertyDescriptor mappedPD =
 83  
                     new MappedPropertyDescriptor(property, dsClass);
 84  0
                 Class propertyType = mappedPD.getMappedPropertyType();
 85  0
                 Configuration subProps = c.subset(property);
 86  
                 // use reflection to set properties
 87  0
                 Iterator j = subProps.getKeys();
 88  0
                 while (j.hasNext())
 89  
                 {
 90  0
                     String subProp = (String) j.next();
 91  0
                     String propVal = subProps.getString(subProp);
 92  0
                     Object value = ConvertUtils.convert(propVal, propertyType);
 93  0
                     PropertyUtils
 94  
                         .setMappedProperty(ds, property, subProp, value);
 95  
 
 96  0
                     if (log.isDebugEnabled())
 97  
                     {
 98  0
                         log.debug("setMappedProperty("
 99  
                                        + ds + ", "
 100  
                                        + property + ", "
 101  
                                        + subProp + ", "
 102  
                                        + value
 103  
                                        + ")");
 104  
                     }
 105  
                 }
 106  
             }
 107  
             else
 108  
             {
 109  0
                 Class propertyType =
 110  
                     PropertyUtils.getPropertyType(ds, property);
 111  0
                 Object value =
 112  
                     ConvertUtils.convert(c.getString(property), propertyType);
 113  0
                 PropertyUtils.setSimpleProperty(ds, property, value);
 114  
 
 115  0
                 if (log.isDebugEnabled())
 116  
                 {
 117  0
                     log.debug("setSimpleProperty("
 118  
                                    + ds + ", "
 119  
                                    + property + ", "
 120  
                                    + value
 121  
                                    + ")");
 122  
                 }
 123  
             }
 124  
         }
 125  0
         catch (Exception e)
 126  
         {
 127  0
             log.error(
 128  
                 "Property: "
 129  
                 + property
 130  
                 + " value: "
 131  
                 + c.getString(key)
 132  
                 + " is not supported by DataSource: "
 133  
                 + ds.getClass().getName());
 134  0
         }
 135  0
     }
 136  
 
 137  
     /**
 138  
      * Iterate over a Configuration subset and apply all
 139  
      * properties to a passed object which must contain Bean
 140  
      * setter and getter
 141  
      *
 142  
      * @param c The configuration subset
 143  
      * @param o The object to apply the properties to
 144  
      * @throws TorqueException if a property set fails
 145  
      */
 146  
     protected void applyConfiguration(Configuration c, Object o)
 147  
         throws TorqueException
 148  
     {
 149  0
         log.debug("applyConfiguration(" + c + ", " + o + ")");
 150  
 
 151  0
         if (c != null)
 152  
         {
 153  
             try
 154  
             {
 155  0
                 for (Iterator i = c.getKeys(); i.hasNext();)
 156  
                 {
 157  0
                     String key = (String) i.next();
 158  0
                     setProperty(key, c, o);
 159  
                 }
 160  
             }
 161  0
             catch (Exception e)
 162  
             {
 163  0
                 log.error(e);
 164  0
                 throw new TorqueException(e);
 165  0
             }
 166  
         }
 167  0
     }
 168  
     
 169  
     /**
 170  
      * Initializes the ConnectionPoolDataSource.
 171  
      *
 172  
      * @param configuration where to read the settings from
 173  
      * @throws TorqueException if a property set fails
 174  
      * @return a configured <code>ConnectionPoolDataSource</code>
 175  
      */
 176  
     protected ConnectionPoolDataSource initCPDS(Configuration configuration)
 177  
         throws TorqueException
 178  
     {
 179  0
         log.debug("Starting initCPDS");
 180  0
         ConnectionPoolDataSource cpds = new DriverAdapterCPDS();
 181  0
         Configuration c = Torque.getConfiguration();
 182  
 
 183  0
         if (c == null)
 184  
         {
 185  0
             log.warn("Global Configuration not set,"
 186  
                     + " no Default connection pool data source configured!");
 187  
         }
 188  
         else
 189  
         {
 190  0
             Configuration conf = c.subset(DEFAULT_CONNECTION_KEY);
 191  0
             applyConfiguration(conf, cpds);
 192  
         }
 193  
             
 194  0
         Configuration conf = configuration.subset(CONNECTION_KEY);
 195  0
         applyConfiguration(conf, cpds);
 196  
         
 197  0
         return cpds;
 198  
     }
 199  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.