Coverage Report - org.webmacro.resource.CachingProvider
 
Classes in this File Line Coverage Branch Coverage Complexity
CachingProvider
58%
14/24
50%
3/6
1.571
 
 1  
 /*
 2  
  * Copyright (C) 1998-2000 Semiotek Inc.  All Rights Reserved.
 3  
  *
 4  
  * Redistribution and use in source and binary forms, with or without
 5  
  * modification, are permitted under the terms of either of the following
 6  
  * Open Source licenses:
 7  
  *
 8  
  * The GNU General Public License, version 2, or any later version, as
 9  
  * published by the Free Software Foundation
 10  
  * (http://www.fsf.org/copyleft/gpl.html);
 11  
  *
 12  
  *  or
 13  
  *
 14  
  * The Semiotek Public License (http://webmacro.org/LICENSE.)
 15  
  *
 16  
  * This software is provided "as is", with NO WARRANTY, not even the
 17  
  * implied warranties of fitness to purpose, or merchantability. You
 18  
  * assume all risks and liabilities associated with its use.
 19  
  *
 20  
  * See www.webmacro.org for more information on the WebMacro project.
 21  
  */
 22  
 
 23  
 
 24  
 package org.webmacro.resource;
 25  
 
 26  
 import org.slf4j.Logger;
 27  
 import org.slf4j.LoggerFactory;
 28  
 import org.webmacro.Broker;
 29  
 import org.webmacro.InitException;
 30  
 import org.webmacro.Provider;
 31  
 import org.webmacro.ResourceException;
 32  
 import org.webmacro.util.Settings;
 33  
 
 34  
 /**
 35  
  * CacheManager is an abstract base class for providers which wish to
 36  
  * implement caching functionality.  By extending CachingProvider and
 37  
  * implementing the methods in ResourceLoader, a provider can
 38  
  * automatically support caching using any CacheManager.  CachingProvider
 39  
  * looks in the properties file to find the desired cache manager.
 40  
  * @since 0.96
 41  
  */
 42  
 
 43  
 abstract public class CachingProvider implements Provider,
 44  
         ResourceLoader
 45  
 {
 46  
 
 47  40
     static Logger _log =  LoggerFactory.getLogger(CachingProvider.class);
 48  
 
 49  
     private CacheManager _cache;
 50  
     protected boolean _cacheSupportsReload;
 51  
 
 52  
     public CachingProvider ()
 53  126
     {
 54  126
     }
 55  
 
 56  
     /**
 57  
      * If you override this method be sure and call super.init(...)
 58  
      */
 59  
     public void init (Broker b, Settings config) throws InitException
 60  
     {
 61  
         String cacheManager;
 62  
 
 63  126
         cacheManager = b.getSetting("CachingProvider." + getType()
 64  
                 + ".CacheManager");
 65  126
         if (cacheManager == null)
 66  0
             cacheManager = b.getSetting("CachingProvider.*.CacheManager");
 67  126
         if (cacheManager == null || cacheManager.equals(""))
 68  
         {
 69  0
             _log.info("CachingProvider: No cache manager specified for "
 70  
                     + getType() + ", using TrivialCacheManager");
 71  0
             _cache = new TrivialCacheManager();
 72  
         }
 73  
         else
 74  
         {
 75  
             try
 76  
             {
 77  126
                 _cache = (CacheManager) b.classForName(cacheManager).newInstance();
 78  
             }
 79  0
             catch (Exception e)
 80  
             {
 81  0
                 _log.warn("Unable to load cache manager " + cacheManager
 82  
                         + " for resource type " + getType()
 83  
                         + ", using TrivialCacheManager.  Reason:\n" + e);
 84  0
                 _cache = new TrivialCacheManager();
 85  126
             }
 86  
         }
 87  126
         _cache.init(b, config, getType());
 88  126
         _cacheSupportsReload = _cache.supportsReload();
 89  126
     }
 90  
 
 91  
     /**
 92  
      * Clear the cache. If you override this method be sure
 93  
      * and call super.flush().
 94  
      */
 95  
     public void flush ()
 96  
     {
 97  0
         _cache.flush();
 98  0
     }
 99  
 
 100  
     /**
 101  
      * Close down the provider. If you override this method be
 102  
      * sure and call super.destroy().
 103  
      */
 104  
     public void destroy ()
 105  
     {
 106  0
         _cache.destroy();
 107  0
     }
 108  
 
 109  
     /**
 110  
      * Get the object associated with the specific query, using the
 111  
      * specified cache manager.
 112  
      */
 113  
     public Object get (String query) throws ResourceException
 114  
     {
 115  1862
         return _cache.get(query, this);
 116  
     }
 117  
 
 118  
     /**
 119  
      * Delegates to ResourceLoader implementers the load operation
 120  
      * by casting the query as a string and invoking the
 121  
      * implemented method.
 122  
      */
 123  
     public Object load (Object query, CacheElement ce)
 124  
             throws ResourceException
 125  
     {
 126  62
         return ((ResourceLoader) this).load((String) query, ce);
 127  
     }
 128  
 
 129  
     public String toString ()
 130  
     {
 131  126
         return "CachingProvider(type = " + getType() + ")";
 132  
     }
 133  
 
 134  
 
 135  
 }