001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/io/rtree/MemoryPageFile.java $
002    //----------------------------------------
003    //RTree implementation.
004    //Copyright (C) 2002-2004 Wolfgang Baer - WBaer@gmx.de
005    //
006    //This library is free software; you can redistribute it and/or
007    //modify it under the terms of the GNU Lesser General Public
008    //License as published by the Free Software Foundation; either
009    //version 2.1 of the License, or (at your option) any later version.
010    //
011    //This library is distributed in the hope that it will be useful,
012    //but WITHOUT ANY WARRANTY; without even the implied warranty of
013    //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    //Lesser General Public License for more details.
015    //
016    //You should have received a copy of the GNU Lesser General Public
017    //License along with this library; if not, write to the Free Software
018    //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
019    //----------------------------------------
020    
021    package org.deegree.io.rtree;
022    
023    import java.io.Serializable;
024    import java.util.Hashtable;
025    
026    /**
027     * <p>
028     * A memory based implementation of a PageFile.<br>
029     * Implemented as a Hashtable with keys representing the page file numbers of the saved nodes.
030     * </p>
031     *
032     * @author Wolfgang Baer - WBaer@gmx.de
033     */
034    class MemoryPageFile extends PageFile implements Serializable {
035    
036        private Hashtable<Integer, Node> file = new Hashtable<Integer, Node>( 500 );
037    
038        /**
039         * Constructor
040         */
041        protected MemoryPageFile() {
042            super();
043            file.clear();
044        }
045    
046        /**
047         * @see PageFile#readNode(int)
048         */
049        protected Node readNode( int pageFile )
050                                throws PageFileException {
051            return file.get( new Integer( pageFile ) );
052        }
053    
054        /**
055         * @see PageFile#writeNode(Node)
056         */
057        protected int writeNode( Node node )
058                                throws PageFileException {
059    
060            int i = 0;
061            if ( node.getPageNumber() < 0 ) {
062                while ( true ) {
063                    if ( !file.containsKey( new Integer( i ) ) ) {
064                        break;
065                    }
066                    i++;
067                }
068                node.setPageNumber( i );
069            } else
070                i = node.getPageNumber();
071    
072            file.put( new Integer( i ), node );
073    
074            return i;
075        }
076    
077        /**
078         * @see PageFile#deleteNode(int)
079         */
080        protected Node deleteNode( int pageNumber ) {
081            return file.remove( new Integer( pageNumber ) );
082        }
083    
084        /**
085         * @see PageFile#close()
086         */
087        protected void close()
088                                throws PageFileException {
089            // nothing to do
090        }
091    }