001: /*
002: * The contents of this file are subject to the
003: * Mozilla Public License Version 1.1 (the "License");
004: * you may not use this file except in compliance with the License.
005: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
006: *
007: * Software distributed under the License is distributed on an "AS IS"
008: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
009: * See the License for the specific language governing rights and
010: * limitations under the License.
011: *
012: * The Initial Developer of the Original Code is Simulacra Media Ltd.
013: * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
014: *
015: * All Rights Reserved.
016: *
017: * Contributor(s):
018: */
019: package org.openharmonise.commons.cache;
020:
021: /**
022: * Class to provide a soft link to an object in a cache, i.e. an link to
023: * an object which may or may not actually reside in the cache but can
024: * be accessed through the cache. Useful for pointing to objects which
025: * logically don't change but their object representations do.
026: *
027: * @author Michael Bell
028: * @version $Revision: 1.1 $
029: *
030: */
031: public class CachePointer {
032:
033: /**
034: * Cache key of object.
035: */
036: protected Object m_cache_key;
037:
038: /**
039: * Cache which will contain the object.
040: */
041: protected AbstractCache m_cache;
042:
043: /**
044: * Constructs a cache pointer which does not reference any object.
045: */
046: public CachePointer() {
047:
048: }
049:
050: /**
051: * Constructs a cache pointer which references the object found in
052: * cache <code>cache</code> with cache key <code>key</code>.
053: *
054: * @param key the cache key
055: * @param cache the cache
056: */
057: public CachePointer(Object key, AbstractCache cache) {
058: m_cache_key = key;
059: m_cache = cache;
060: }
061:
062: /**
063: * Returns the cache the pointer is referencing.
064: *
065: * @return the cache
066: */
067: public AbstractCache getCache() {
068: return m_cache;
069: }
070:
071: /**
072: * Returns the cache key for the object the pointer is referencing.
073: *
074: * @return the cache key
075: */
076: public Object getKey() {
077: return m_cache_key;
078: }
079:
080: /**
081: * Set the cache the pointer will reference.
082: *
083: * @param cache cache to be referenced
084: */
085: public void setCache(AbstractCache cache) {
086: this .m_cache = cache;
087: }
088:
089: /**
090: * Sets the cache key for the object the pointer will reference.
091: *
092: * @param object the cache key corresponding to the cached object
093: */
094: public void setKey(Object object) {
095: m_cache_key = object;
096: }
097:
098: /**
099: * Returns the object this pointer references.
100: *
101: * @return the cached object this cache pointer references
102: * @throws CacheException
103: */
104: public Object getObject() throws CacheException {
105: return m_cache.getObject(m_cache_key);
106: }
107:
108: /* (non-Javadoc)
109: * @see java.lang.Object#equals(java.lang.Object)
110: */
111: public boolean equals(Object obj) {
112: boolean bEq = false;
113:
114: if (obj instanceof CachePointer) {
115: CachePointer ptr = (CachePointer) obj;
116:
117: if (this == ptr) {
118: bEq = true;
119: } else if (ptr.getCache().equals(m_cache) == true
120: && ptr.getKey().equals(m_cache_key) == true) {
121: bEq = true;
122: }
123: }
124: return bEq;
125: }
126:
127: }
|