1 package org.apache.turbine.services.cache;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.io.Serializable;
20
21 import org.apache.turbine.Turbine;
22
23 /***
24 * Wrapper for an object you want to store in a cache for a period of
25 * time.
26 *
27 * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
28 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
29 * @version $Id: CachedObject.java,v 1.6.2.2 2004/05/20 03:05:19 seade Exp $
30 */
31 public class CachedObject
32 implements Serializable
33 {
34
35 /*** Cache the object with the Default TTL */
36 public static final int DEFAULT = 0;
37
38 /*** Do not expire the object */
39 public static final int FOREVER = -1;
40
41 /*** The object to be cached. */
42 private Object contents = null;
43
44 /*** Default age (30 minutes). */
45 private long defaultage =
46 Turbine.getConfiguration()
47 .getLong("cachedobject.defaultage", 1800000);
48
49 /*** When created. **/
50 protected long created = 0;
51
52 /*** When it expires. **/
53 private long expires = 0;
54
55 /*** Is this object stale/expired? */
56 private boolean stale = false;
57
58 /***
59 * Constructor; sets the object to expire in the default time (30
60 * minutes).
61 *
62 * @param o The object you want to cache.
63 */
64 public CachedObject(Object o)
65 {
66 this.contents = o;
67 this.expires = defaultage;
68 this.created = System.currentTimeMillis();
69 }
70
71 /***
72 * Constructor.
73 *
74 * @param o The object to cache.
75 * @param expires How long before the object expires, in ms,
76 * e.g. 1000 = 1 second.
77 */
78 public CachedObject(Object o, long expires)
79 {
80 if (expires == DEFAULT)
81 {
82 this.expires = defaultage;
83 }
84
85 this.contents = o;
86 this.expires = expires;
87 this.created = System.currentTimeMillis();
88 }
89
90 /***
91 * Returns the cached object.
92 *
93 * @return The cached object.
94 */
95 public Object getContents()
96 {
97 return contents;
98 }
99
100 /***
101 * Returns the creation time for the object.
102 *
103 * @return When the object was created.
104 */
105 public long getCreated()
106 {
107 return created;
108 }
109
110 /***
111 * Returns the expiration time for the object.
112 *
113 * @return When the object expires.
114 */
115 public long getExpires()
116 {
117 return expires;
118 }
119
120 /***
121 * Set the expiration interval for the object.
122 *
123 * @param expires Expiration interval in millis ( 1 second = 1000 millis)
124 */
125 public void setExpires(long expires)
126 {
127 if (expires == DEFAULT)
128 {
129 this.expires = defaultage;
130 }
131 else
132 {
133 this.expires = expires;
134 }
135 if (expires == FOREVER)
136 {
137 setStale(false);
138 }
139 else
140 {
141 setStale((System.currentTimeMillis() - created) > expires);
142 }
143 }
144
145 /***
146 * Set the stale status for the object.
147 *
148 * @param stale Whether the object is stale or not.
149 */
150 public synchronized void setStale(boolean stale)
151 {
152 this.stale = stale;
153 }
154
155 /***
156 * Get the stale status for the object.
157 *
158 * @return Whether the object is stale or not.
159 */
160 public synchronized boolean getStale()
161 {
162 return stale;
163 }
164
165 /***
166 * Is the object stale?
167 *
168 * @return True if the object is stale.
169 */
170 public synchronized boolean isStale()
171 {
172 if (expires == FOREVER)
173 {
174 return false;
175 }
176
177 setStale((System.currentTimeMillis() - created) > expires);
178 return getStale();
179 }
180 }