generify cache service
git-svn-id: https://svn.apache.org/repos/asf/archiva/redback/redback-components/trunk@1429391 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/AbstractCache.java b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/AbstractCache.java
index dcc48f8..d8d39a8 100644
--- a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/AbstractCache.java
+++ b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/AbstractCache.java
@@ -22,8 +22,8 @@
* @author Olivier Lamy
* @since 2.1
*/
-public abstract class AbstractCache
- implements Cache
+public abstract class AbstractCache<V,T>
+ implements Cache<V,T>
{
private int timeToIdleSeconds = 0;
diff --git a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/Cache.java b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/Cache.java
index 1666312..8dee894 100644
--- a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/Cache.java
+++ b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/Cache.java
@@ -24,7 +24,7 @@
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
*/
-public interface Cache
+public interface Cache<V,T>
{
/**
* Tests to see if the provided key exists within the cache.
@@ -37,7 +37,7 @@
* @param key the key to test.
* @return true if the key exists.
*/
- boolean hasKey( Object key );
+ boolean hasKey( V key );
/**
* Get the value of the specified key, if it exists in the cache.
@@ -45,17 +45,9 @@
* @param key the key to fetch the contents of.
* @return the value of the key, or null if not found.
*/
- Object get( Object key );
+ T get( V key );
- /**
- * Get the value of the specified key, if it exists in the cache.
- *
- * @param key the key to fetch the contents of.
- * @param clazz class of object type to retrieve
- * @return the value of the key, or null if not found.
- * @since 2.1
- */
- <T> T get( Object key, Class<T> clazz );
+
/**
* Put the specified value into the cache under the provided key.
@@ -64,17 +56,9 @@
* @param value the object to place into the cache.
* @return the previous value for the key, or null if the key contained no value.
*/
- Object put( Object key, Object value );
+ T put( V key, T value );
- /**
- * Put the specified value into the cache under the provided key.
- *
- * @param key the key to put the value into
- * @param value the object to place into the cache.
- * @param clazz class of object type to retrieve
- * @return the previous value for the key, or null if the key contained no value.
- */
- <T> T put( Object key, Object value, Class<T> clazz );
+
/**
* Register the specified value into the cache under the provided key.
@@ -85,7 +69,7 @@
* @param key the key to put the value into
* @param value the object to place into the cache.
*/
- void register( Object key, Object value );
+ void register( V key, T value );
/**
* Remove the specified key and value from the cache.
@@ -93,7 +77,7 @@
* @param key the key to the value to remove.
* @return the value of the key that was removed.
*/
- Object remove( Object key );
+ T remove( V key );
/**
* Clear the cache of all entries.
diff --git a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/CacheableWrapper.java b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/CacheableWrapper.java
index bb20c5b..3455e04 100644
--- a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/CacheableWrapper.java
+++ b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/CacheableWrapper.java
@@ -27,25 +27,25 @@
* @author Olivier Lamy
*
*/
-public class CacheableWrapper
+public class CacheableWrapper<T>
implements Serializable
{
- private Object value;
+ private T value;
private long storedTime;
- public CacheableWrapper( Object value, long storedTime )
+ public CacheableWrapper( T value, long storedTime )
{
this.value = value;
this.storedTime = storedTime;
}
- public Object getValue()
+ public T getValue()
{
return value;
}
- public void setValue( Object value )
+ public void setValue( T value )
{
this.value = value;
}
diff --git a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/impl/NoCacheCache.java b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/impl/NoCacheCache.java
index 7a615ed..a29da23 100644
--- a/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/impl/NoCacheCache.java
+++ b/spring-cache-api/src/main/java/org/apache/archiva/redback/components/cache/impl/NoCacheCache.java
@@ -32,9 +32,9 @@
* @author Olivier Lamy
* @since 5 February, 2007
*/
-public class NoCacheCache
- extends AbstractCache
- implements Cache
+public class NoCacheCache<V, T>
+ extends AbstractCache<V, T>
+ implements Cache<V, T>
{
static final class NoStats
implements CacheStatistics
@@ -78,7 +78,7 @@
/* do nothing */
}
- public Object get( Object key )
+ public T get( V key )
{
return null;
}
@@ -88,32 +88,22 @@
return stats;
}
- public boolean hasKey( Object key )
+ public boolean hasKey( V key )
{
return false;
}
- public Object put( Object key, Object value )
+ public T put( V key, T value )
{
return null;
}
- public void register( Object key, Object value )
+ public void register( V key, T value )
{
/* do nothing */
}
- public Object remove( Object key )
- {
- return null;
- }
-
- public <T> T get( Object key, Class<T> clazz )
- {
- return null;
- }
-
- public <T> T put( Object key, Object value, Class<T> clazz )
+ public T remove( V key )
{
return null;
}
diff --git a/spring-cache-providers/spring-cache-ehcache/src/main/java/org/apache/archiva/redback/components/cache/ehcache/EhcacheCache.java b/spring-cache-providers/spring-cache-ehcache/src/main/java/org/apache/archiva/redback/components/cache/ehcache/EhcacheCache.java
index ee9bbd4..2ec8d18 100644
--- a/spring-cache-providers/spring-cache-ehcache/src/main/java/org/apache/archiva/redback/components/cache/ehcache/EhcacheCache.java
+++ b/spring-cache-providers/spring-cache-ehcache/src/main/java/org/apache/archiva/redback/components/cache/ehcache/EhcacheCache.java
@@ -38,8 +38,8 @@
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
*/
-public class EhcacheCache
- implements org.apache.archiva.redback.components.cache.Cache
+public class EhcacheCache<V,T>
+ implements org.apache.archiva.redback.components.cache.Cache<V,T>
{
private Logger log = LoggerFactory.getLogger( getClass() );
@@ -239,7 +239,7 @@
}
}
- public Object get( Object key )
+ public T get( V key )
{
if ( key == null )
{
@@ -251,17 +251,7 @@
{
return null;
}
- return elem.getObjectValue();
- }
-
- public <T> T get( Object key, Class<T> clazz )
- {
- return (T) get( key );
- }
-
- public <T> T put( Object key, Object value, Class<T> clazz )
- {
- return (T) put( key, value );
+ return (T) elem.getObjectValue();
}
public long getDiskExpiryThreadIntervalSeconds()
@@ -309,7 +299,7 @@
return timeToLiveSeconds;
}
- public boolean hasKey( Object key )
+ public boolean hasKey( V key )
{
return ehcache.isKeyInCache( key );
}
@@ -329,12 +319,12 @@
return overflowToDisk;
}
- public void register( Object key, Object value )
+ public void register( V key, T value )
{
ehcache.put( new Element( key, value ) );
}
- public Object put( Object key, Object value )
+ public T put( V key, T value )
{
// Multiple steps done to satisfy Cache API requirement for Previous object return.
Element elem = null;
@@ -346,10 +336,10 @@
}
elem = new Element( key, value );
ehcache.put( elem );
- return previous;
+ return (T) previous;
}
- public Object remove( Object key )
+ public T remove( V key )
{
Element elem = null;
Object previous = null;
@@ -360,7 +350,7 @@
ehcache.remove( key );
}
- return previous;
+ return (T) previous;
}
public void setDiskExpiryThreadIntervalSeconds( long diskExpiryThreadIntervalSeconds )
diff --git a/spring-cache-providers/spring-cache-hashmap/src/main/java/org/apache/archiva/redback/components/cache/hashmap/HashMapCache.java b/spring-cache-providers/spring-cache-hashmap/src/main/java/org/apache/archiva/redback/components/cache/hashmap/HashMapCache.java
index 44a5bae..227d7a0 100644
--- a/spring-cache-providers/spring-cache-hashmap/src/main/java/org/apache/archiva/redback/components/cache/hashmap/HashMapCache.java
+++ b/spring-cache-providers/spring-cache-hashmap/src/main/java/org/apache/archiva/redback/components/cache/hashmap/HashMapCache.java
@@ -57,9 +57,9 @@
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
*/
@Service("cache#hashmap")
-public class HashMapCache
- extends AbstractCache
- implements Cache
+public class HashMapCache<V,T>
+ extends AbstractCache<V,T>
+ implements Cache<V,T>
{
private Logger log = LoggerFactory.getLogger( getClass() );
@@ -84,7 +84,7 @@
}
- private Map cache;
+ private Map<V,CacheableWrapper<T>> cache;
/**
*
@@ -127,9 +127,9 @@
* @param key the key used to map the cached object
* @return the object mapped to the given key, or null if no cache object is mapped to the given key
*/
- public Object get( Object key )
+ public T get( V key )
{
- CacheableWrapper retValue = null;
+ CacheableWrapper<T> retValue = null;
// prevent search
if ( !this.isCacheAvailable() )
{
@@ -140,7 +140,7 @@
if ( cache.containsKey( key ) )
{
// remove and put: this promotes it to the top since we use a linked hash map
- retValue = (CacheableWrapper) cache.remove( key );
+ retValue = cache.remove( key );
if ( needRefresh( retValue ) )
{
@@ -162,15 +162,7 @@
return retValue == null ? null : retValue.getValue();
}
- public <T> T get( Object key, Class<T> clazz )
- {
- return (T) get( key );
- }
- public <T> T put( Object key, Object value, Class<T> clazz )
- {
- return (T) put( key, value );
- }
protected boolean needRefresh( CacheableWrapper cacheableWrapper )
{
@@ -201,7 +193,7 @@
* @param key the key used to map the cached object
* @return true if the cache contains an object associated with the given key
*/
- public boolean hasKey( Object key )
+ public boolean hasKey( V key )
{
// prevent search
if ( !this.isCacheAvailable() )
@@ -233,11 +225,11 @@
if ( cacheMaxSize > 0 )
{
- cache = new LinkedHashMap( cacheMaxSize );
+ cache = new LinkedHashMap<V,CacheableWrapper<T>>( cacheMaxSize );
}
else
{
- cache = new LinkedHashMap();
+ cache = new LinkedHashMap<V,CacheableWrapper<T>>();
}
}
@@ -247,9 +239,9 @@
* @param key the object to map the valued object
* @param value the object to cache
*/
- public Object put( Object key, Object value )
+ public T put( V key, T value )
{
- CacheableWrapper ret = null;
+ CacheableWrapper<T> ret = null;
// remove and put: this promotes it to the top since we use a linked hash map
synchronized ( cache )
@@ -259,7 +251,7 @@
cache.remove( key );
}
- ret = (CacheableWrapper) cache.put( key, new CacheableWrapper( value, System.currentTimeMillis() ) );
+ ret = cache.put( key, new CacheableWrapper<T>( value, System.currentTimeMillis() ) );
}
manageCache();
@@ -273,7 +265,7 @@
* @param key the object to map the valued object
* @param value the object to cache
*/
- public void register( Object key, Object value )
+ public void register( V key, T value )
{
// remove and put: this promotes it to the top since we use a linked hash map
synchronized ( cache )
@@ -283,19 +275,19 @@
cache.remove( key );
}
- cache.put( key, new CacheableWrapper( value, System.currentTimeMillis() ) );
+ cache.put( key, new CacheableWrapper<T>( value, System.currentTimeMillis() ) );
}
manageCache();
}
- public Object remove( Object key )
+ public T remove( V key )
{
synchronized ( cache )
{
if ( cache.containsKey( key ) )
{
- return cache.remove( key );
+ return cache.remove( key ).getValue();
}
}
diff --git a/spring-cache-providers/spring-cache-oscache/src/main/java/org/apache/archiva/redback/components/cache/oscache/OsCacheCache.java b/spring-cache-providers/spring-cache-oscache/src/main/java/org/apache/archiva/redback/components/cache/oscache/OsCacheCache.java
index 4334b4b..feba3da 100644
--- a/spring-cache-providers/spring-cache-oscache/src/main/java/org/apache/archiva/redback/components/cache/oscache/OsCacheCache.java
+++ b/spring-cache-providers/spring-cache-oscache/src/main/java/org/apache/archiva/redback/components/cache/oscache/OsCacheCache.java
@@ -37,9 +37,9 @@
*
* @author @author Olivier Lamy
*/
-public class OsCacheCache
- extends AbstractCache
- implements Cache
+public class OsCacheCache<V, T>
+ extends AbstractCache<V, T>
+ implements Cache<V, T>
{
private GeneralCacheAdministrator generalCacheAdministrator;
@@ -173,18 +173,18 @@
this.generalCacheAdministrator.flushAll();
}
- public Object get( Object key )
+ public T get( V key )
{
try
{
- Object object = null;
+ T object = null;
if ( this.getRefreshPeriod() >= 0 )
{
- object = this.generalCacheAdministrator.getFromCache( key.toString(), this.getRefreshPeriod() );
+ object = (T) this.generalCacheAdministrator.getFromCache( key.toString(), this.getRefreshPeriod() );
}
else
{
- object = this.generalCacheAdministrator.getFromCache( key.toString() );
+ object = (T) this.generalCacheAdministrator.getFromCache( key.toString() );
}
if ( object != null )
{
@@ -204,15 +204,6 @@
}
}
- public <T> T get( Object key, Class<T> clazz )
- {
- return (T) get( key );
- }
-
- public <T> T put( Object key, Object value, Class<T> clazz )
- {
- return (T) put( key, value );
- }
public CacheStatistics getStatistics()
{
@@ -220,18 +211,18 @@
return this.osCacheStatistics;
}
- public boolean hasKey( Object key )
+ public boolean hasKey( V key )
{
// TODO if null increase/decrease statistics ?
return this.get( key ) == null;
}
- public void register( Object key, Object value )
+ public void register( V key, T value )
{
this.generalCacheAdministrator.putInCache( key.toString(), value );
}
- public Object put( Object key, Object value )
+ public T put( V key, T value )
{
Object previous = null;
try
@@ -243,10 +234,10 @@
// ignore this because the content will be updated
}
this.generalCacheAdministrator.putInCache( key.toString(), value );
- return previous;
+ return (T) previous;
}
- public Object remove( Object key )
+ public T remove( V key )
{
Object previous = null;
try
@@ -260,7 +251,7 @@
}
this.generalCacheAdministrator.cancelUpdate( key.toString() );
this.generalCacheAdministrator.flushEntry( key.toString() );
- return previous;
+ return (T) previous;
}
//---------------------------------------------