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;
021    
022    
023    /**
024     * An index id value pair which can optionally reference the indexed obj
025     * if one has already been loaded.
026     *
027     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
028     * @version $Rev: 917312 $
029     */
030    public class ReverseIndexEntry<V, O, ID> implements IndexEntry<V, O, ID>
031    {
032        /** The underlying Tuple */
033        private final Tuple<ID, V> tuple = new Tuple<ID, V>();
034    
035        /** The indexed object if loaded from the store */
036        private O obj;
037    
038    
039        /**
040         * Sets the Tuple value represented by this ReverseIndexEntry optionally
041         * setting the obj associated with the id if one was loaded from the
042         * master table.
043         *
044         * @param tuple the tuple for the ReverseIndexEntry
045         * @param obj the resusitated object that is indexed if any
046         */
047        public void setTuple( Tuple<ID, V> tuple, O obj )
048        {
049            this.tuple.setKey( tuple.getKey() );
050            this.tuple.setValue( tuple.getValue() );
051            this.obj = obj;
052        }
053    
054    
055        public ID getId()
056        {
057            return tuple.getKey();
058        }
059    
060    
061        public V getValue()
062        {
063            return tuple.getValue();
064        }
065    
066    
067        public void setId( ID id )
068        {
069            tuple.setKey( id );
070        }
071    
072    
073        public void setValue( V key )
074        {
075            tuple.setValue( key );
076        }
077    
078    
079        public O getObject()
080        {
081            if ( obj == null )
082            {
083                return null;
084            }
085    
086            return obj;
087        }
088    
089    
090        public void setObject( O obj )
091        {
092            this.obj = obj;
093        }
094    
095    
096        public Tuple<ID, V> getTuple()
097        {
098            return tuple;
099        }
100    
101    
102        public void clear()
103        {
104            obj = null;
105            tuple.setKey( null );
106            tuple.setValue( null );
107        }
108    
109    
110        public void copy( IndexEntry<V, O, ID> entry )
111        {
112            this.obj = entry.getObject();
113            tuple.setKey( entry.getId() );
114            tuple.setValue( entry.getValue() );
115        }
116    
117    
118        public String toString()
119        {
120            StringBuilder buf = new StringBuilder();
121            buf.append( "ReverseIndexEntry[ " );
122            buf.append( tuple.getValue() );
123            buf.append( ", " );
124            buf.append( tuple.getKey() );
125            buf.append( " ]" );
126            return buf.toString();
127        }
128    }