org.openanzo.cache.LRUCache.java Source code

Java tutorial

Introduction

Here is the source code for org.openanzo.cache.LRUCache.java

Source

/*******************************************************************************
 * Copyright (c) 2008 Cambridge Semantics Incorporated.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * File:        $Source$
 * Created by:  Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
 * Created on:  Dec 23, 2008
 * Revision:   $Id$
 * 
 * Contributors:
 *     Cambridge Semantics Incorporated - initial API and implementation
 *******************************************************************************/
package org.openanzo.cache;

import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import org.apache.commons.collections15.map.LRUMap;

/**
 * @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com</a>)
 * @param <K>
 *            key type
 * @param <V>
 *            value type
 */
public class LRUCache<K, V> implements ICache<K, V> {

    LRUMap<K, V> map = null;

    LRUCache(int maxSize) {
        map = new LRUMap<K, V>(maxSize) {

            private static final long serialVersionUID = -4014149744440579768L;

            @Override
            protected boolean removeLRU(
                    org.apache.commons.collections15.map.AbstractLinkedMap.LinkEntry<K, V> entry) {
                for (ICacheListener<K, V> listener : listeners) {
                    listener.elementRemoved(entry.getKey(), entry.getValue());
                }
                return super.removeLRU(entry);
            }

        };
    }

    CopyOnWriteArraySet<ICacheListener<K, V>> listeners = new CopyOnWriteArraySet<ICacheListener<K, V>>();

    public void clear() {
        map.clear();
    }

    public V get(K key) {
        return map.get(key);
    }

    public V put(K key, V value) {
        return map.put(key, value);
    }

    public V remove(K key) {
        return map.remove(key);
    }

    public Set<K> keySet() {
        return map.keySet();
    }

    public void registerListener(ICacheListener<K, V> listener) {
        listeners.add(listener);
    }

    public void unregisterListener(ICacheListener<K, V> listener) {
        listeners.remove(listener);
    }
}