001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/io/rtree/PageFile.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 package org.deegree.io.rtree; 021 022 import java.io.Serializable; 023 024 /** 025 * <p> 026 * Abstract class implementing general methods of a PageFile. 027 * </p> 028 * 029 * @author Wolfgang Baer - WBaer@gmx.de 030 * @author last edited by: $Author: apoth $ 031 * 032 * @version $Revision: 6813 $, $Date: 2007-05-04 15:41:50 +0200 (Fr, 04 Mai 2007) $ 033 */ 034 abstract class PageFile implements Serializable { 035 036 /** dimension of saved data */ 037 protected int dimension; 038 039 /** capacity of a node (= MaxLoad + 1) */ 040 protected int capacity; 041 042 /** minimum load of a node */ 043 protected int minimum; 044 045 /** 046 * Returns the dimension of the PageFile 047 * 048 * @return int 049 * 050 */ 051 protected int getDimension() { 052 return dimension; 053 } 054 055 /** 056 * Returns the minimum load of a node 057 * 058 * @return int 059 */ 060 protected int getMinimum() { 061 return minimum; 062 } 063 064 /** 065 * Returns the capacity of a node in the PageFile. Capacity is defined a maximum load of a node 066 * plus 1 for overflow 067 * 068 * @return int 069 */ 070 protected int getCapacity() { 071 return capacity; 072 } 073 074 /** 075 * Reads a node from the PageFile for given index 076 * 077 * @param pageFileNumber - 078 * index of page file number where node is saved 079 * @return Node 080 * @throws PageFileException 081 */ 082 protected abstract Node readNode( int pageFileNumber ) 083 throws PageFileException; 084 085 /** 086 * Writes a node into the PageFile Method tests if node has already a PageNumber, otherwise a 087 * new page number is assigned and returned. 088 * 089 * @param node - 090 * Node to write 091 * @return int - page number 092 * @throws PageFileException 093 */ 094 protected abstract int writeNode( Node node ) 095 throws PageFileException; 096 097 /** 098 * Marks the node at given page number as deleted. 099 * 100 * @param pageFileNumber - 101 * page number 102 * @return Node - deleted node 103 * @throws PageFileException 104 */ 105 protected abstract Node deleteNode( int pageFileNumber ) 106 throws PageFileException; 107 108 /** 109 * Initializes the PageFile. 110 * 111 * @param dimension - 112 * dimension of the data 113 * @param capacity - 114 * capacity of a node 115 * @throws PageFileException 116 */ 117 protected void initialize( int dimension, int capacity ) 118 throws PageFileException { 119 this.dimension = dimension; 120 this.capacity = capacity; 121 this.minimum = (int) Math.round( ( capacity - 1 ) * 0.5 ); 122 if ( this.minimum < 2 ) 123 this.minimum = 2; 124 } 125 126 /** 127 * Closes the pagefile. 128 * 129 * @throws PageFileException 130 */ 131 protected abstract void close() 132 throws PageFileException; 133 134 }