001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.types;
028
029
030
031 import org.opends.server.api.Backend;
032
033
034
035 /**
036 * This class defines a Directory Server cache entry, which is simply
037 * used to store an entry with its associated backend and entry ID.
038 */
039 @org.opends.server.types.PublicAPI(
040 stability=org.opends.server.types.StabilityLevel.VOLATILE,
041 mayInstantiate=true,
042 mayExtend=false,
043 mayInvoke=true,
044 notes="This should only be used within a backend")
045 public final class CacheEntry
046 {
047 // The backend with which this cache entry is associated.
048 private Backend backend;
049
050 // The entry itself.
051 private Entry entry;
052
053 // The entry ID for the entry within the backend.
054 private long entryID;
055
056
057
058 /**
059 * Creates a new cache entry with the provided information.
060 *
061 * @param entry The entry for this cache entry.
062 * @param backend The backend for this cache entry.
063 * @param entryID The entry ID for this cache entry.
064 */
065 public CacheEntry(Entry entry, Backend backend, long entryID)
066 {
067 this.entry = entry;
068 this.backend = backend;
069 this.entryID = entryID;
070 }
071
072
073
074 /**
075 * Retrieves the entry for this cache entry.
076 *
077 * @return The entry for this cache entry.
078 */
079 public Entry getEntry()
080 {
081 return entry;
082 }
083
084
085
086 /**
087 * Specifies the entry for this cache entry.
088 *
089 * @param entry The entry for this cache entry.
090 */
091 public void setEntry(Entry entry)
092 {
093 this.entry = entry;
094 }
095
096
097
098 /**
099 * Retrieves the backend for this cache entry.
100 *
101 * @return The backend for this cache entry.
102 */
103 public Backend getBackend()
104 {
105 return backend;
106 }
107
108
109
110 /**
111 * Specifies the backend for this cache entry.
112 *
113 * @param backend The backend for this cache entry.
114 */
115 public void setBackend(Backend backend)
116 {
117 this.backend = backend;
118 }
119
120
121
122 /**
123 * Retrieves the entry ID for this cache entry.
124 *
125 * @return The entry ID for this cache entry.
126 */
127 public long getEntryID()
128 {
129 return entryID;
130 }
131
132
133
134 /**
135 * Specifies the entry ID for this cache entry.
136 *
137 * @param entryID The entryID for this cache entry.
138 */
139 public void setEntryID(long entryID)
140 {
141 this.entryID = entryID;
142 }
143
144
145
146 /**
147 * Retrieves the DN for this cache entry.
148 *
149 * @return The DN for this cache entry.
150 */
151 public DN getDN()
152 {
153 return entry.getDN();
154 }
155
156
157
158 /**
159 * Retrieves the hash code for this cache entry. It will be the
160 * integer representation of the entry ID.
161 *
162 * @return The hash code for this cache entry.
163 */
164 public int hashCode()
165 {
166 return (int) entryID;
167 }
168
169
170
171 /**
172 * Indicates whether this cache entry is equal to the provided \
173 * object. They will be considered equal if the provided object is
174 * a cache entry with the same entry and entry ID.
175 *
176 * @param o The object for which to make the determination.
177 *
178 * @return <CODE>true</CODE> if the provided object is equal to
179 * this cache entry, or <CODE>false</CODE> if not.
180 */
181 public boolean equals(Object o)
182 {
183 if (o == null)
184 {
185 return false;
186 }
187
188 if (o == this)
189 {
190 return true;
191 }
192
193 if (! (o instanceof CacheEntry))
194 {
195 return false;
196 }
197
198 CacheEntry e = (CacheEntry) o;
199 return ((e.entryID == entryID) && (e.entry.equals(entry)));
200 }
201 }
202