Clover coverage report -
Coverage timestamp: Sat Apr 30 2005 21:58:28 PDT
file stats: LOC: 159   Methods: 7
NCLOC: 71   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Config.java 43.8% 57.6% 57.1% 53.6%
coverage coverage
 1   
 /*
 2   
  * Copyright (c) 2002-2003 by OpenSymphony
 3   
  * All rights reserved.
 4   
  */
 5   
 package com.opensymphony.oscache.base;
 6   
 
 7   
 import org.apache.commons.logging.Log;
 8   
 import org.apache.commons.logging.LogFactory;
 9   
 
 10   
 import java.io.InputStream;
 11   
 
 12   
 import java.util.Properties;
 13   
 
 14   
 /**
 15   
  * Responsible for holding the Cache configuration properties. If the default
 16   
  * constructor is used, this class will load the properties from the
 17   
  * <code>cache.configuration</code>.
 18   
  *
 19   
  * @author   <a href="mailto:fabian.crabus@gurulogic.de">Fabian Crabus</a>
 20   
  * @version  $Revision: 1.2.2.1 $
 21   
  */
 22   
 public class Config implements java.io.Serializable {
 23   
     private static final transient Log log = LogFactory.getLog(Config.class);
 24   
 
 25   
     /**
 26   
      * Name of the properties file.
 27   
      */
 28   
     private final static String PROPERTIES_FILENAME = "/oscache.properties";
 29   
 
 30   
     /**
 31   
      * Properties map to hold the cache configuration.
 32   
      */
 33   
     private Properties properties = null;
 34   
 
 35   
     /**
 36   
      * Create an OSCache Config that loads properties from oscache.properties.
 37   
      * The file must be present in the root of OSCache's classpath. If the file
 38   
      * cannot be loaded, an error will be logged and the configuration will
 39   
      * remain empty.
 40   
      */
 41  0
     public Config() {
 42  0
         this(null);
 43   
     }
 44   
 
 45   
     /**
 46   
      * Create an OSCache configuration with the specified properties.
 47   
      * Note that it is the responsibility of the caller to provide valid
 48   
      * properties as no error checking is done to ensure that required
 49   
      * keys are present. If you're unsure of what keys should be present,
 50   
      * have a look at a sample oscache.properties file.
 51   
      *
 52   
      * @param p The properties to use for this configuration. If null,
 53   
      * then the default properties are loaded from the <code>oscache.properties</code>
 54   
      * file.
 55   
      */
 56  104
     public Config(Properties p) {
 57  104
         if (log.isDebugEnabled()) {
 58  0
             log.debug("Config() called");
 59   
         }
 60   
 
 61  104
         if (p == null) {
 62  72
             loadProps();
 63   
         } else {
 64  32
             this.properties = p;
 65   
         }
 66   
     }
 67   
 
 68   
     /**
 69   
      * Retrieve the value of the named configuration property. If the property
 70   
      * cannot be found this method will return <code>null</code>.
 71   
      *
 72   
      * @param key The name of the property.
 73   
      * @return The property value, or <code>null</code> if the value could
 74   
      * not be found.
 75   
      *
 76   
      * @throws IllegalArgumentException if the supplied key is null.
 77   
      */
 78  940
     public String getProperty(String key) {
 79  940
         if (key == null) {
 80  4
             throw new IllegalArgumentException("key is null");
 81   
         }
 82   
 
 83  936
         if (properties == null) {
 84  0
             return null;
 85   
         }
 86   
 
 87  936
         String value = properties.getProperty(key);
 88  936
         return value;
 89   
     }
 90   
 
 91   
     /**
 92   
      * Retrieves all of the configuration properties. This property set
 93   
      * should be treated as immutable.
 94   
      *
 95   
      * @return The configuration properties.
 96   
      */
 97  0
     public Properties getProperties() {
 98  0
         return properties;
 99   
     }
 100   
 
 101  78
     public Object get(Object key) {
 102  78
         return properties.get(key);
 103   
     }
 104   
 
 105   
     /**
 106   
      * Sets a configuration property.
 107   
      *
 108   
      * @param key   The unique name for this property.
 109   
      * @param value The value assigned to this property.
 110   
      *
 111   
      * @throws IllegalArgumentException if the supplied key is null.
 112   
      */
 113  0
     public void set(Object key, Object value) {
 114  0
         if (key == null) {
 115  0
             throw new IllegalArgumentException("key is null");
 116   
         }
 117   
 
 118  0
         if (value == null) {
 119  0
             return;
 120   
         }
 121   
 
 122  0
         if (properties == null) {
 123  0
             properties = new Properties();
 124   
         }
 125   
 
 126  0
         properties.put(key, value);
 127   
     }
 128   
 
 129   
     /**
 130   
      * Load the properties file (<code>oscache.properties</code>)
 131   
      * from the classpath. If the file cannot be found or loaded, an error
 132   
      * will be logged and no properties will be set.
 133   
      */
 134  72
     private void loadProps() {
 135  72
         if (log.isDebugEnabled()) {
 136  0
             log.debug("Getting Config");
 137   
         }
 138   
 
 139  72
         properties = new Properties();
 140   
 
 141  72
         InputStream in = null;
 142   
 
 143  72
         try {
 144  72
             in = Config.class.getResourceAsStream(PROPERTIES_FILENAME);
 145  72
             properties.load(in);
 146  72
             log.info("Properties " + properties);
 147   
         } catch (Exception e) {
 148  0
             log.error("Error reading " + PROPERTIES_FILENAME + " in CacheAdministrator.loadProps() " + e);
 149  0
             log.error("Ensure the " + PROPERTIES_FILENAME + " file is readable and in your classpath.");
 150   
         } finally {
 151  72
             try {
 152  72
                 in.close();
 153   
             } catch (Exception e) {
 154   
                 // Ignore errors that occur while closing file
 155   
             }
 156   
         }
 157   
     }
 158   
 }
 159