001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020 package org.apache.directory.server.xdbm.search.impl;
021
022
023 import org.apache.directory.server.xdbm.AbstractIndexCursor;
024 import org.apache.directory.server.xdbm.ForwardIndexEntry;
025 import org.apache.directory.server.xdbm.IndexCursor;
026 import org.apache.directory.server.xdbm.IndexEntry;
027 import org.apache.directory.server.xdbm.Store;
028 import org.apache.directory.shared.ldap.entry.ServerEntry;
029
030
031 /**
032 * A Cursor over all entries in a partition which returns IndexEntries.
033 *
034 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
035 * @version $Rev$, $Date$
036 */
037 public class AllEntriesCursor<ID> extends AbstractIndexCursor<ID, ServerEntry, ID>
038 {
039 private IndexEntry<ID, ServerEntry, ID> indexEntry = new ForwardIndexEntry<ID, ServerEntry, ID>();
040 private final IndexCursor<String, ServerEntry, ID> wrapped;
041
042
043 public AllEntriesCursor( Store<ServerEntry, ID> db ) throws Exception
044 {
045 // Get a reverse cursor because we want to sort by ID
046 wrapped = db.getNdnIndex().reverseCursor();
047 }
048
049
050 /*
051 * @see org.apache.directory.server.xdbm.IndexCursor#afterValue(Long, Object)
052 */
053 public void afterValue( ID key, ID value ) throws Exception
054 {
055 checkNotClosed( "afterValue()" );
056 wrapped.afterValue( key, null );
057 }
058
059
060 /*
061 * @see org.apache.directory.server.xdbm.IndexCursor#beforeValue(java.lang.Long, java.lang.Object)
062 */
063 public void beforeValue( ID id, ID value ) throws Exception
064 {
065 checkNotClosed( "beforeValue()" );
066 wrapped.beforeValue( id, null );
067 }
068
069
070 /*
071 * @see org.apache.directory.server.core.cursor.Cursor#after(java.lang.Object)
072 */
073 public void after( IndexEntry<ID, ServerEntry, ID> indexEntry ) throws Exception
074 {
075 checkNotClosed( "after()" );
076 wrapped.afterValue( indexEntry.getId(), null );
077 }
078
079
080 /*
081 * @see org.apache.directory.server.core.cursor.Cursor#afterLast()
082 */
083 public void afterLast() throws Exception
084 {
085 checkNotClosed( "afterLast()" );
086 wrapped.afterLast();
087 }
088
089
090 /*
091 * @see org.apache.directory.server.core.cursor.Cursor#available()
092 */
093 public boolean available()
094 {
095 return wrapped.available();
096 }
097
098
099 /*
100 * @see org.apache.directory.server.core.cursor.Cursor#before(java.lang.Object)
101 */
102 public void before( IndexEntry<ID, ServerEntry, ID> indexEntry ) throws Exception
103 {
104 checkNotClosed( "before()" );
105 wrapped.beforeValue( indexEntry.getId(), null );
106 }
107
108
109 /*
110 * @see org.apache.directory.server.core.cursor.Cursor#beforeFirst()
111 */
112 public void beforeFirst() throws Exception
113 {
114 checkNotClosed( "beforeFirst()" );
115 wrapped.beforeFirst();
116 }
117
118
119 /*
120 * @see org.apache.directory.server.core.cursor.Cursor#first()
121 */
122 public boolean first() throws Exception
123 {
124 checkNotClosed( "first()" );
125 return wrapped.first();
126 }
127
128
129 /*
130 * @see org.apache.directory.server.core.cursor.Cursor#get()
131 */
132 public IndexEntry<ID, ServerEntry, ID> get() throws Exception
133 {
134 checkNotClosed( "get()" );
135 IndexEntry<String, ServerEntry, ID> wrappedEntry = wrapped.get();
136 indexEntry.setId( wrappedEntry.getId() );
137 indexEntry.setValue( wrappedEntry.getId() );
138 indexEntry.setObject( wrappedEntry.getObject() );
139 return indexEntry;
140 }
141
142
143 /*
144 * @see org.apache.directory.server.core.cursor.Cursor#isElementReused()
145 */
146 public boolean isElementReused()
147 {
148 return true;
149 }
150
151
152 /*
153 * @see org.apache.directory.server.core.cursor.Cursor#last()
154 */
155 public boolean last() throws Exception
156 {
157 checkNotClosed( "last()" );
158 return wrapped.last();
159 }
160
161
162 /*
163 * @see org.apache.directory.server.core.cursor.Cursor#next()
164 */
165 public boolean next() throws Exception
166 {
167 checkNotClosed( "next()" );
168 return wrapped.next();
169 }
170
171
172 /*
173 * @see org.apache.directory.server.core.cursor.Cursor#previous()
174 */
175 public boolean previous() throws Exception
176 {
177 checkNotClosed( "previous()" );
178 return wrapped.previous();
179 }
180 }