/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/kernel/trunk/api/src/main/java/org/sakaiproject/memory/api/Cache.java $
* $Id: Cache.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.memory.api;
import java.util.List;
/**
* <p>
* A Cache holds objects with keys with a limited lifespan.
* </p>
* <p>
* When the object expires, the cache may call upon a CacheRefresher to update the key's value. The update is done in a separate thread.
* </p>
*/
public interface Cache extends Cacher
{
/**
* Cache an object
*
* @param key
* The key with which to find the object.
* @param payload
* The object to cache.
* @param duration
* The time to cache the object (seconds).
* @deprecated Since Sakai 2.5.0
* @see Cache#put(Object, Object)
*/
void put(Object key, Object payload, int duration);
/**
* Cache an object - don't automatically exipire it.
*
* @param key
* The key with which to find the object.
* @param payload
* The object to cache.
*/
void put(Object key, Object payload);
/**
* Test for an entry in the cache - expired or not.
*
* @param key
* The cache key.
* @return true if the key maps to a cache entry, false if not.
* @deprecated Since Sakai 2.5.0
* @see Cache#containsKey(Object)
*/
boolean containsKeyExpiredOrNot(Object key);
/**
* Test for a non expired entry in the cache.
*
* @param key
* The cache key.
* @return true if the key maps to a non-expired cache entry, false if not.
*/
boolean containsKey(Object key);
/**
* Expire this object.
*
* @param key
* The cache key.
*/
void expire(Object key);
/**
* Get the entry, or null if not there (expired entries are returned, too).
*
* @param key
* The cache key.
* @return The payload, or null if the payload is null, the key is not found. (Note: use containsKey() to remove this ambiguity).
* @deprecated Since Sakai 2.5.0
* @see Cache#get(Object)
*/
Object getExpiredOrNot(Object key);
/**
* Get the non expired entry, or null if not there (or expired)
*
* @param key
* The cache key.
* @return The payload, or null if the payload is null, the key is not found, or the entry has expired (Note: use containsKey() to remove this ambiguity).
*/
Object get(Object key);
/**
* Get all the non-expired non-null entries.
*
* @return all the non-expired non-null entries, or an empty list if none.
* @deprecated Since Sakai 2.5.0
*/
List getAll();
/**
* Get all the non-expired non-null entries that are in the specified reference path. Note: only works with String keys.
*
* @param path
* The reference path.
* @return all the non-expired non-null entries, or an empty list if none.
* @deprecated Since Sakai 2.5.0
*/
List getAll(String path);
/**
* Get all the keys
*
* @return The List of key values (Object).
*/
List getKeys();
/**
* Get all the keys, modified from resource references to ids by removing the resource prefix. Note: only works with String keys.
*
* @return The List of keys converted from references to ids (String).
* @deprecated Since Sakai 2.5.0
*/
List getIds();
/**
* Clear all entries.
*/
void clear();
/**
* Remove this entry from the cache.
*
* @param key
* The cache key.
*/
void remove(Object key);
/**
* Disable the cache.
*/
void disable();
/**
* Enable the cache.
*/
void enable();
/**
* Is the cache disabled?
*
* @return true if the cache is disabled, false if it is enabled.
*/
boolean disabled();
/**
* Are we complete?
*
* @return true if we have all the possible entries cached, false if not.
*/
boolean isComplete();
/**
* Set the cache to be complete, containing all possible entries.
*/
void setComplete();
/**
* Are we complete for one level of the reference hierarchy?
*
* @param path
* The reference to the completion level.
* @return true if we have all the possible entries cached, false if not.
*/
boolean isComplete(String path);
/**
* Set the cache to be complete for one level of the reference hierarchy.
*
* @param path
* The reference to the completion level.
*/
void setComplete(String path);
/**
* Set the cache to hold events for later processing to assure an atomic "complete" load.
*/
void holdEvents();
/**
* Restore normal event processing in the cache, and process any held events now.
*/
void processEvents();
/**
* Clear all entries and shudown the cache. Don't use after this call.
*/
void destroy();
/**
* Attach this DerivedCache to the cache. The DerivedCache is then notified of the cache contents changing events.
*
* @param cache
* The DerivedCache to attach.
*/
void attachDerivedCache(DerivedCache cache);
}