diff --git a/source/java/org/alfresco/repo/cache/ExpiringValueCache.java b/source/java/org/alfresco/repo/cache/ExpiringValueCache.java new file mode 100644 index 0000000000..34f9be5a7f --- /dev/null +++ b/source/java/org/alfresco/repo/cache/ExpiringValueCache.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * 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.alfresco.repo.cache; + +/** + * Simple cache of a single Object value. + *

+ * The object placed in the cache will automatically be discarded after a timeout value. + * + * @author Kevin Roast + */ +public class ExpiringValueCache +{ + // default is to discard cached object after 1 minute + private final static long TIMEOUT_DEFAULT = 1000L*60L; + + private long timeout = TIMEOUT_DEFAULT; + private long snapshot = 0; + private T value; + + /** + * Default constructor. + * + * Uses the default timeout of 1 minute. + */ + public ExpiringValueCache() + { + } + + /** + * Constructor + * + * @param timeout Timeout in milliseconds before cached value is discarded + */ + public ExpiringValueCache(long timeout) + { + this.timeout = timeout; + } + + /** + * Put a value into the cache. The item will be return from the associated get() method + * until the timeout expires then null will be returned. + * + * @param value The object to store in the cache + */ + public void put(T value) + { + this.value = value; + this.snapshot = System.currentTimeMillis(); + } + + /** + * Get the cached object. The set item will be returned until it expires, then null will be returned. + * + * @return cached object or null if not set or expired. + */ + public T get() + { + if (snapshot + timeout < System.currentTimeMillis()) + { + this.value = null; + } + return this.value; + } + + /** + * Clear the cache value + */ + public void clear() + { + this.value = null; + } +}