| %line | %branch | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| org.apache.jcs.engine.ElementAttributes |
|
|
| 1 | package org.apache.jcs.engine; |
|
| 2 | ||
| 3 | /* |
|
| 4 | * Licensed to the Apache Software Foundation (ASF) under one |
|
| 5 | * or more contributor license agreements. See the NOTICE file |
|
| 6 | * distributed with this work for additional information |
|
| 7 | * regarding copyright ownership. The ASF licenses this file |
|
| 8 | * to you under the Apache License, Version 2.0 (the |
|
| 9 | * "License"); you may not use this file except in compliance |
|
| 10 | * with the License. You may obtain a copy of the License at |
|
| 11 | * |
|
| 12 | * http://www.apache.org/licenses/LICENSE-2.0 |
|
| 13 | * |
|
| 14 | * Unless required by applicable law or agreed to in writing, |
|
| 15 | * software distributed under the License is distributed on an |
|
| 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
|
| 17 | * KIND, either express or implied. See the License for the |
|
| 18 | * specific language governing permissions and limitations |
|
| 19 | * under the License. |
|
| 20 | */ |
|
| 21 | ||
| 22 | import java.io.ByteArrayInputStream; |
|
| 23 | import java.io.ByteArrayOutputStream; |
|
| 24 | import java.io.ObjectInputStream; |
|
| 25 | import java.io.ObjectOutputStream; |
|
| 26 | import java.io.Serializable; |
|
| 27 | import java.util.ArrayList; |
|
| 28 | import java.util.Iterator; |
|
| 29 | ||
| 30 | import org.apache.jcs.engine.behavior.IElementAttributes; |
|
| 31 | import org.apache.jcs.engine.control.event.behavior.IElementEventHandler; |
|
| 32 | ||
| 33 | /** |
|
| 34 | * This it the element attribute descriptor class. Each element in the cache has |
|
| 35 | * an ElementAttribute object associated with it. An ElementAttributes object |
|
| 36 | * can be associated with an element in 3 ways: |
|
| 37 | * <ol> |
|
| 38 | * <li>When the item is put into the cache, you can associate an element |
|
| 39 | * attributes object.</li> |
|
| 40 | * <li>If not attributes object is include when the element is put into the |
|
| 41 | * cache, then the default attributes for the region will be used.</li> |
|
| 42 | * <li>The element attributes can be reset. This effectively results in a |
|
| 43 | * retrieval followed by a put. Hence, this is the same as 1.</li> |
|
| 44 | * </ol> |
|
| 45 | * @version $Id: ILateralCacheTCPListener.java,v 1.2 2002/01/18 22:08:26 |
|
| 46 | */ |
|
| 47 | public class ElementAttributes |
|
| 48 | implements IElementAttributes, Serializable, Cloneable |
|
| 49 | { |
|
| 50 | private static final long serialVersionUID = 7814990748035017441L; |
|
| 51 | ||
| 52 | /** |
|
| 53 | * Can this item be flushed to disk |
|
| 54 | */ |
|
| 55 | 1702803 | public boolean IS_SPOOL = true; |
| 56 | ||
| 57 | /** |
|
| 58 | * Is this item laterally distributable |
|
| 59 | */ |
|
| 60 | 1702852 | public boolean IS_LATERAL = true; |
| 61 | ||
| 62 | /** |
|
| 63 | * Can this item be sent to the remote cache |
|
| 64 | */ |
|
| 65 | 1702863 | public boolean IS_REMOTE = true; |
| 66 | ||
| 67 | /** |
|
| 68 | * You can turn off expiration by setting this to true. This causes the |
|
| 69 | * cache to bypass both max life and idle time expiration. |
|
| 70 | */ |
|
| 71 | 1702864 | public boolean IS_ETERNAL = true; |
| 72 | ||
| 73 | /** |
|
| 74 | * The object version. This is currently not used. |
|
| 75 | */ |
|
| 76 | 1702892 | public long version = 0; |
| 77 | ||
| 78 | /** |
|
| 79 | * Max life seconds |
|
| 80 | */ |
|
| 81 | 1702871 | public long maxLifeSeconds = -1; |
| 82 | ||
| 83 | /** |
|
| 84 | * The maximum time an entry can be idle. Setting this to -1 causes the idle |
|
| 85 | * time check to be ignored. |
|
| 86 | */ |
|
| 87 | 1702814 | public long maxIdleTimeSeconds = -1; |
| 88 | ||
| 89 | /** |
|
| 90 | * The byte size of the field. Must be manually set. |
|
| 91 | */ |
|
| 92 | 1702914 | public int size = 0; |
| 93 | ||
| 94 | /** |
|
| 95 | * The creation time. This is used to enforce the max life. |
|
| 96 | */ |
|
| 97 | 1702921 | public long createTime = 0; |
| 98 | ||
| 99 | /** |
|
| 100 | * The last access time. This is used to enforce the max idel time. |
|
| 101 | */ |
|
| 102 | 1702832 | public long lastAccessTime = 0; |
| 103 | ||
| 104 | /** |
|
| 105 | * The list of Event handlers to use. This is transient, since the event |
|
| 106 | * handlers cannot usually be serialized. This means that you cannot attach |
|
| 107 | * a post serialization event to an item. |
|
| 108 | * <p> |
|
| 109 | * TODO we need to check that when an item is passed to a non-local cache |
|
| 110 | * that if the local cache had a copy with event handlers, that those |
|
| 111 | * handlers are used. |
|
| 112 | */ |
|
| 113 | public transient ArrayList eventHandlers; |
|
| 114 | ||
| 115 | /** |
|
| 116 | * Constructor for the IElementAttributes object |
|
| 117 | */ |
|
| 118 | 73075 | public ElementAttributes() |
| 119 | 1629529 | { |
| 120 | 1702675 | this.createTime = System.currentTimeMillis(); |
| 121 | 1702875 | this.lastAccessTime = class="keyword">this.createTime; |
| 122 | 1702788 | } |
| 123 | ||
| 124 | /** |
|
| 125 | * Constructor for the IElementAttributes object |
|
| 126 | * <p> |
|
| 127 | * @param attr |
|
| 128 | */ |
|
| 129 | protected ElementAttributes( ElementAttributes attr ) |
|
| 130 | 0 | { |
| 131 | 0 | IS_ETERNAL = attr.IS_ETERNAL; |
| 132 | ||
| 133 | // waterfal onto disk, for pure disk set memory to 0 |
|
| 134 | 0 | IS_SPOOL = attr.IS_SPOOL; |
| 135 | ||
| 136 | // lateral |
|
| 137 | 0 | IS_LATERAL = attr.IS_LATERAL; |
| 138 | ||
| 139 | // central rmi store |
|
| 140 | 0 | IS_REMOTE = attr.IS_REMOTE; |
| 141 | ||
| 142 | 0 | maxLifeSeconds = attr.maxLifeSeconds; |
| 143 | // timetolive |
|
| 144 | 0 | maxIdleTimeSeconds = attr.maxIdleTimeSeconds; |
| 145 | 0 | size = attr.size; |
| 146 | 0 | } |
| 147 | ||
| 148 | /** |
|
| 149 | * Copies the attributes, including references to event handlers. |
|
| 150 | * <p> |
|
| 151 | * @return a copy of the Attributes |
|
| 152 | */ |
|
| 153 | public IElementAttributes copy() |
|
| 154 | { |
|
| 155 | try |
|
| 156 | { |
|
| 157 | // need to make this more efficient. Just want to insure |
|
| 158 | // a proper copy |
|
| 159 | 1692055 | ElementAttributes attr = new ElementAttributes(); |
| 160 | 1692297 | attr.setIdleTime( this.getIdleTime() ); |
| 161 | 1692416 | attr.setIsEternal( this.getIsEternal() ); |
| 162 | 1692443 | attr.setIsLateral( this.getIsLateral() ); |
| 163 | 1692350 | attr.setIsRemote( this.getIsRemote() ); |
| 164 | 1692451 | attr.setIsSpool( this.getIsSpool() ); |
| 165 | 1692281 | attr.setMaxLifeSeconds( this.getMaxLifeSeconds() ); |
| 166 | 1692293 | attr.addElementEventHandlers( this.eventHandlers ); |
| 167 | 1692337 | return attr; |
| 168 | } |
|
| 169 | 0 | catch ( Exception e ) |
| 170 | { |
|
| 171 | 0 | return new ElementAttributes(); |
| 172 | } |
|
| 173 | } |
|
| 174 | ||
| 175 | /** |
|
| 176 | * Deep clone the attributes. |
|
| 177 | * <p> |
|
| 178 | * @return a clone of these attributes |
|
| 179 | */ |
|
| 180 | public Object clone2() |
|
| 181 | { |
|
| 182 | try |
|
| 183 | { |
|
| 184 | 0 | ByteArrayOutputStream baos = new ByteArrayOutputStream( 100 ); |
| 185 | 0 | ObjectOutputStream oos = new ObjectOutputStream( baos ); |
| 186 | 0 | oos.writeObject( this ); |
| 187 | 0 | byte buf[] = baos.toByteArray(); |
| 188 | 0 | oos.close(); |
| 189 | ||
| 190 | // deserialize byte array into ArrayList |
|
| 191 | ||
| 192 | 0 | ByteArrayInputStream bais = new ByteArrayInputStream( buf ); |
| 193 | 0 | ObjectInputStream ois = new ObjectInputStream( bais ); |
| 194 | 0 | ElementAttributes attr = (ElementAttributes) ois.readObject(); |
| 195 | 0 | ois.close(); |
| 196 | ||
| 197 | 0 | attr.createTime = System.currentTimeMillis(); |
| 198 | 0 | return attr; |
| 199 | } |
|
| 200 | 0 | catch ( Exception e ) |
| 201 | { |
|
| 202 | // swallow |
|
| 203 | } |
|
| 204 | 0 | return null; |
| 205 | } |
|
| 206 | ||
| 207 | /* |
|
| 208 | * (non-Javadoc) |
|
| 209 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setVersion(long) |
|
| 210 | */ |
|
| 211 | public void setVersion( long version ) |
|
| 212 | { |
|
| 213 | 0 | this.version = version; |
| 214 | 0 | } |
| 215 | ||
| 216 | /* |
|
| 217 | * (non-Javadoc) |
|
| 218 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setMaxLifeSeconds(long) |
|
| 219 | */ |
|
| 220 | public void setMaxLifeSeconds( long mls ) |
|
| 221 | { |
|
| 222 | 1692681 | this.maxLifeSeconds = mls; |
| 223 | 1692696 | } |
| 224 | ||
| 225 | /* |
|
| 226 | * (non-Javadoc) |
|
| 227 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getMaxLifeSeconds() |
|
| 228 | */ |
|
| 229 | public long getMaxLifeSeconds() |
|
| 230 | { |
|
| 231 | 1745353 | return this.maxLifeSeconds; |
| 232 | } |
|
| 233 | ||
| 234 | /* |
|
| 235 | * (non-Javadoc) |
|
| 236 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setIdleTime(long) |
|
| 237 | */ |
|
| 238 | public void setIdleTime( long idle ) |
|
| 239 | { |
|
| 240 | 1692339 | this.maxIdleTimeSeconds = idle; |
| 241 | 1692469 | } |
| 242 | ||
| 243 | /* |
|
| 244 | * (non-Javadoc) |
|
| 245 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setSize(int) |
|
| 246 | */ |
|
| 247 | public void setSize( int size ) |
|
| 248 | { |
|
| 249 | 0 | this.size = size; |
| 250 | 0 | } |
| 251 | ||
| 252 | /* |
|
| 253 | * (non-Javadoc) |
|
| 254 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getSize() |
|
| 255 | */ |
|
| 256 | public int getSize() |
|
| 257 | { |
|
| 258 | 0 | return size; |
| 259 | } |
|
| 260 | ||
| 261 | /* |
|
| 262 | * (non-Javadoc) |
|
| 263 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getCreateTime() |
|
| 264 | */ |
|
| 265 | public long getCreateTime() |
|
| 266 | { |
|
| 267 | 46599 | return createTime; |
| 268 | } |
|
| 269 | ||
| 270 | /** |
|
| 271 | * Sets the createTime attribute of the IElementAttributes object |
|
| 272 | */ |
|
| 273 | public void setCreateTime() |
|
| 274 | { |
|
| 275 | 0 | createTime = System.currentTimeMillis(); |
| 276 | 0 | } |
| 277 | ||
| 278 | /* |
|
| 279 | * (non-Javadoc) |
|
| 280 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getVersion() |
|
| 281 | */ |
|
| 282 | public long getVersion() |
|
| 283 | { |
|
| 284 | 0 | return version; |
| 285 | } |
|
| 286 | ||
| 287 | /* |
|
| 288 | * (non-Javadoc) |
|
| 289 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getIdleTime() |
|
| 290 | */ |
|
| 291 | public long getIdleTime() |
|
| 292 | { |
|
| 293 | 1730384 | return this.maxIdleTimeSeconds; |
| 294 | } |
|
| 295 | ||
| 296 | /* |
|
| 297 | * (non-Javadoc) |
|
| 298 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getTimeToLiveSeconds() |
|
| 299 | */ |
|
| 300 | public long getTimeToLiveSeconds() |
|
| 301 | { |
|
| 302 | 275 | long now = System.currentTimeMillis(); |
| 303 | 275 | return ( ( this.getCreateTime() + ( class="keyword">this.getMaxLifeSeconds() * 1000 ) ) - now ) / 1000; |
| 304 | } |
|
| 305 | ||
| 306 | /* |
|
| 307 | * (non-Javadoc) |
|
| 308 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getLastAccessTime() |
|
| 309 | */ |
|
| 310 | public long getLastAccessTime() |
|
| 311 | { |
|
| 312 | 52699 | return this.lastAccessTime; |
| 313 | } |
|
| 314 | ||
| 315 | /* |
|
| 316 | * (non-Javadoc) |
|
| 317 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setLastAccessTimeNow() |
|
| 318 | */ |
|
| 319 | public void setLastAccessTimeNow() |
|
| 320 | { |
|
| 321 | 2399302 | this.lastAccessTime = System.currentTimeMillis(); |
| 322 | 2399514 | } |
| 323 | ||
| 324 | /* |
|
| 325 | * (non-Javadoc) |
|
| 326 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getIsSpool() |
|
| 327 | */ |
|
| 328 | public boolean getIsSpool() |
|
| 329 | { |
|
| 330 | 3293787 | return this.IS_SPOOL; |
| 331 | } |
|
| 332 | ||
| 333 | /* |
|
| 334 | * (non-Javadoc) |
|
| 335 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setIsSpool(boolean) |
|
| 336 | */ |
|
| 337 | public void setIsSpool( boolean val ) |
|
| 338 | { |
|
| 339 | 1701411 | this.IS_SPOOL = val; |
| 340 | 1701383 | } |
| 341 | ||
| 342 | /* |
|
| 343 | * (non-Javadoc) |
|
| 344 | * @see org.apache.jcs.engine.behavior.IElementAttributes#getIsLateral() |
|
| 345 | */ |
|
| 346 | public boolean getIsLateral() |
|
| 347 | { |
|
| 348 | 1692486 | return this.IS_LATERAL; |
| 349 | } |
|
| 350 | ||
| 351 | /* |
|
| 352 | * (non-Javadoc) |
|
| 353 | * @see org.apache.jcs.engine.behavior.IElementAttributes#setIsLateral(boolean) |
|
| 354 | */ |
|
| 355 | public void setIsLateral( boolean val ) |
|
| 356 | { |
|
| 357 | 1692439 | this.IS_LATERAL = val; |
| 358 | 1692506 | } |
| 359 | ||
| 360 | /** |
|
| 361 | * Can this item be sent to the remote cache |
|
| 362 | * @return true if the item can be sent to a remote auxiliary |
|
| 363 | */ |
|
| 364 | public boolean getIsRemote() |
|
| 365 | { |
|
| 366 | 1692465 | return this.IS_REMOTE; |
| 367 | } |
|
| 368 | ||
| 369 | /** |
|
| 370 | * Sets the isRemote attribute of the ElementAttributes object |
|
| 371 | * @param val |
|
| 372 | * The new isRemote value |
|
| 373 | */ |
|
| 374 | public void setIsRemote( boolean val ) |
|
| 375 | { |
|
| 376 | 1692474 | this.IS_REMOTE = val; |
| 377 | 1692481 | } |
| 378 | ||
| 379 | /** |
|
| 380 | * You can turn off expiration by setting this to true. The max life value |
|
| 381 | * will be ignored. |
|
| 382 | * <p> |
|
| 383 | * @return true if the item cannot expire. |
|
| 384 | */ |
|
| 385 | public boolean getIsEternal() |
|
| 386 | { |
|
| 387 | 2466481 | return this.IS_ETERNAL; |
| 388 | } |
|
| 389 | ||
| 390 | /** |
|
| 391 | * Sets the isEternal attribute of the ElementAttributes object. True means |
|
| 392 | * that the item should never expire. If can still be removed if it is the |
|
| 393 | * least recently used, and you are using the LRUMemory cache. it just will |
|
| 394 | * not be filtered for expiration by the cache hub. |
|
| 395 | * <p> |
|
| 396 | * @param val |
|
| 397 | * The new isEternal value |
|
| 398 | */ |
|
| 399 | public void setIsEternal( boolean val ) |
|
| 400 | { |
|
| 401 | 1692620 | this.IS_ETERNAL = val; |
| 402 | 1692615 | } |
| 403 | ||
| 404 | /** |
|
| 405 | * Adds a ElementEventHandler. Handler's can be registered for multiple |
|
| 406 | * events. A registered handler will be called at every recognized event. |
|
| 407 | * <p> |
|
| 408 | * The alternative would be to register handlers for each event. Or maybe |
|
| 409 | * The handler interface should have a method to return whether it cares |
|
| 410 | * about certain events. |
|
| 411 | * <p> |
|
| 412 | * @param eventHandler |
|
| 413 | * The ElementEventHandler to be added to the list. |
|
| 414 | */ |
|
| 415 | public void addElementEventHandler( IElementEventHandler eventHandler ) |
|
| 416 | { |
|
| 417 | // lazy here, no concurrency problems expected |
|
| 418 | 700136 | if ( this.eventHandlers == null ) |
| 419 | { |
|
| 420 | 560129 | this.eventHandlers = new ArrayList(); |
| 421 | } |
|
| 422 | 700136 | this.eventHandlers.add( eventHandler ); |
| 423 | 700136 | } |
| 424 | ||
| 425 | /** |
|
| 426 | * Sets the eventHandlers of the IElementAttributes object. |
|
| 427 | * <p> |
|
| 428 | * This add the references to the local list. Subsequent changes in the |
|
| 429 | * caller's list will not be reflected. |
|
| 430 | * <p> |
|
| 431 | * @param eventHandlers |
|
| 432 | * List of IElementEventHandler objects |
|
| 433 | */ |
|
| 434 | public void addElementEventHandlers( ArrayList eventHandlers ) |
|
| 435 | { |
|
| 436 | 1692259 | if ( eventHandlers == null ) |
| 437 | { |
|
| 438 | 1132269 | return; |
| 439 | } |
|
| 440 | ||
| 441 | 560028 | for ( Iterator iter = eventHandlers.iterator(); iter.hasNext(); ) |
| 442 | { |
|
| 443 | 560028 | addElementEventHandler( (IElementEventHandler) iter.next() ); |
| 444 | 560028 | } |
| 445 | 560028 | } |
| 446 | ||
| 447 | /** |
|
| 448 | * Gets the elementEventHandlers. Returns null if none exist. Makes checking |
|
| 449 | * easy. |
|
| 450 | * <p> |
|
| 451 | * @return The elementEventHandlers List of IElementEventHandler objects |
|
| 452 | */ |
|
| 453 | public ArrayList getElementEventHandlers() |
|
| 454 | { |
|
| 455 | 1601633 | return this.eventHandlers; |
| 456 | } |
|
| 457 | ||
| 458 | /** |
|
| 459 | * For logging and debugging the element IElementAttributes. |
|
| 460 | * <p> |
|
| 461 | * @return String info about the values. |
|
| 462 | */ |
|
| 463 | public String toString() |
|
| 464 | { |
|
| 465 | 275 | StringBuffer dump = new StringBuffer(); |
| 466 | ||
| 467 | 275 | dump.append( "[ IS_LATERAL = " ).append( IS_LATERAL ); |
| 468 | 275 | dump.append( ", IS_SPOOL = " ).append( IS_SPOOL ); |
| 469 | 275 | dump.append( ", IS_REMOTE = " ).append( IS_REMOTE ); |
| 470 | 275 | dump.append( ", IS_ETERNAL = " ).append( IS_ETERNAL ); |
| 471 | 275 | dump.append( ", MaxLifeSeconds = " ).append( this.getMaxLifeSeconds() ); |
| 472 | 275 | dump.append( ", IdleTime = " ).append( this.getIdleTime() ); |
| 473 | 275 | dump.append( ", CreateTime = " ).append( this.getCreateTime() ); |
| 474 | 275 | dump.append( ", LastAccessTime = " ).append( this.getLastAccessTime() ); |
| 475 | 275 | dump.append( ", getTimeToLiveSeconds() = " ).append( String.valueOf( getTimeToLiveSeconds() ) ); |
| 476 | 275 | dump.append( ", createTime = " ).append( String.valueOf( createTime ) ).append( " ]" ); |
| 477 | ||
| 478 | 275 | return dump.toString(); |
| 479 | } |
|
| 480 | } |
| This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |