/*
*
* Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
* one or more contributor license agreements (see COPYRIGHT for details).
* The CA licenses this file to you under the GNU Affero General Public
* License version 3, (the "License"); you may not use this file except in
* compliance with the License. This file is part of kune.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package cc.kune.core.server.persist;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.map.LRUMap;
// TODO: Auto-generated Javadoc
/**
* The Class CachedCollection implements some custom cache for often accessed
* (and costly) objects.
*
* @param <K>
* the key type
* @param <V>
* the value type
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public class CachedCollection<K, V> {
/** The cache. */
// private final Map<K, V> cache;
private final Map cache;
/**
* Instantiates a new cached collection.
*
* @param size
* the size of the cache
*/
public CachedCollection(final int size) {
cache = Collections.synchronizedMap(new LRUMap(size));
}
/**
* Clear.
*/
public void clear() {
cache.clear();
}
/**
* Contains key.
*
* @param key
* the key
* @return true, if successful
*/
public boolean containsKey(final Object key) {
return cache.containsKey(key);
}
/**
* Contains value.
*
* @param value
* the value
* @return true, if successful
*/
public boolean containsValue(final Object value) {
return cache.containsKey(value);
}
/**
* Entry set.
*
* @return the sets the
*/
public Set<java.util.Map.Entry<K, V>> entrySet() {
return cache.entrySet();
}
/**
* Gets the.
*
* @param key
* the key
* @return the v
*/
public V get(final Object key) {
return (V) cache.get(key);
}
/**
* Checks if is empty.
*
* @return true, if is empty
*/
public boolean isEmpty() {
return cache.isEmpty();
}
/**
* Key set.
*
* @return the sets the
*/
public Set<K> keySet() {
return cache.keySet();
}
/**
* Put.
*
* @param key
* the key
* @param value
* the value
* @return the v
*/
public V put(final K key, final V value) {
return (V) cache.put(key, value);
}
/**
* Put all.
*
* @param m
* the m
*/
public void putAll(final Map<? extends K, ? extends V> m) {
cache.putAll(m);
}
/**
* Removes the.
*
* @param key
* the key
* @return the v
*/
public V remove(final Object key) {
return (V) cache.remove(key);
}
/**
* Size.
*
* @return the int
*/
public int size() {
return cache.size();
}
/**
* Values.
*
* @return the collection
*/
public Collection<V> values() {
return cache.values();
}
}