KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > protomatter > util > ExpiringSoftReferenceCache


1 package com.protomatter.util;
2
3 /**
4  * {{{ The Protomatter Software License, Version 1.0
5  * derived from The Apache Software License, Version 1.1
6  *
7  * Copyright (c) 1998-2002 Nate Sammons. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed for the
24  * Protomatter Software Project
25  * (http://protomatter.sourceforge.net/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The names "Protomatter" and "Protomatter Software Project" must
30  * not be used to endorse or promote products derived from this
31  * software without prior written permission. For written
32  * permission, please contact support@protomatter.com.
33  *
34  * 5. Products derived from this software may not be called "Protomatter",
35  * nor may "Protomatter" appear in their name, without prior written
36  * permission of the Protomatter Software Project
37  * (support@protomatter.com).
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE PROTOMATTER SOFTWARE PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE. }}}
51  */

52
53 /**
54  * A cache that uses soft references and will also expire
55  * cache values after a given period of time.
56  */

57 public class ExpiringSoftReferenceCache
58 extends SoftReferenceCache
59 {
60   private long timeout = 0;
61
62   /**
63    * Create a new timed soft reference cache with the given timeout.
64    */

65   public ExpiringSoftReferenceCache(long timeout)
66   {
67     super();
68     this.timeout = timeout;
69   }
70
71   /**
72    * Put a value into the cache, possibly clobbering the
73    * old value if one exists.
74    */

75   public void put(Object JavaDoc key, Object JavaDoc val)
76   {
77     super.put(key, new CacheValue(val));
78   }
79
80   /**
81    * Get a value from the cache.
82    */

83   public Object JavaDoc get(Object JavaDoc key)
84   {
85     CacheValue value = (CacheValue)super.get(key);
86     if (value != null)
87     {
88       long now = System.currentTimeMillis();
89       if ((value.getCreateTime() + this.timeout) >= now)
90       {
91         return value.getValue();
92       }
93       else
94       {
95         clear(key);
96       }
97     }
98     return null;
99   }
100
101   private class CacheValue
102   {
103     private long createTime = 0;
104     private Object JavaDoc value = null;
105
106     public CacheValue(Object JavaDoc value)
107     {
108       this.value = value;
109       this.createTime = System.currentTimeMillis();
110     }
111
112     public Object JavaDoc getValue()
113     {
114       return this.value;
115     }
116
117     public long getCreateTime()
118     {
119       return this.createTime;
120     }
121   }
122 }
123
Free Books   Free Magazines  
Popular Tags