001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/io/quadtree/Quadtree.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2001-2008 by:
006     EXSE, Department of Geography, University of Bonn
007     http://www.giub.uni-bonn.de/deegree/
008     lat/lon GmbH
009     http://www.lat-lon.de
010    
011     This library is free software; you can redistribute it and/or
012     modify it under the terms of the GNU Lesser General Public
013     License as published by the Free Software Foundation; either
014     version 2.1 of the License, or (at your option) any later version.
015    
016     This library is distributed in the hope that it will be useful,
017     but WITHOUT ANY WARRANTY; without even the implied warranty of
018     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
019     Lesser General Public License for more details.
020    
021     You should have received a copy of the GNU Lesser General Public
022     License along with this library; if not, write to the Free Software
023     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
024    
025     Contact:
026    
027     Andreas Poth
028     lat/lon GmbH
029     Aennchenstr. 19
030     53177 Bonn
031     Germany
032     E-Mail: poth@lat-lon.de
033    
034     Prof. Dr. Klaus Greve
035     Department of Geography
036     University of Bonn
037     Meckenheimer Allee 166
038     53115 Bonn
039     Germany
040     E-Mail: greve@giub.uni-bonn.de
041    
042     ---------------------------------------------------------------------------*/
043    package org.deegree.io.quadtree;
044    
045    import java.util.List;
046    
047    import org.deegree.model.spatialschema.Envelope;
048    import org.deegree.model.spatialschema.Point;
049    
050    /**
051     * 
052     * 
053     * 
054     * @version $Revision: 9342 $
055     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
056     * @author last edited by: $Author: apoth $
057     * 
058     * @version 1.0. $Revision: 9342 $, $Date: 2007-12-27 13:32:57 +0100 (Do, 27 Dez 2007) $
059     * @param <T> the datatype to be used as id
060     * 
061     * @since 2.0
062     */
063    public interface Quadtree<T> {
064    
065        /**
066         * inserts a new item into the quadtree
067         * 
068         * @param itemKey key of the Item to be inserted.
069         * @param envelope bbox of the item.
070         * @throws IndexException
071         */
072        public abstract void insert( T itemKey, Envelope envelope )
073                                                                     throws IndexException;
074    
075        /**
076         * inserts a new item into the quadtree
077         * 
078         * @param itemKey key of the Item to be inserted.
079         * @param point if the item is a point.
080         * @throws IndexException
081         */
082        public abstract void insert( T itemKey, Point point )
083                                                               throws IndexException;
084    
085        /**
086         * returns a List containing all items whose envelope intersects with the passed one
087         * 
088         * @param envelope
089         * @return a List containing all items whose envelope intersects with the passed one
090         * @throws IndexException
091         */
092        public abstract List query( Envelope envelope )
093                                                       throws IndexException;
094    
095        /**
096         * deletes a specific item from the tree (not the item itself will be deleted, just its reference will be)
097         * 
098         * @param itemKey key of item to be deleted.
099         * @throws IndexException if the rootnode cannot be loaded, or the given item does not exist.
100         */
101        public abstract void deleteItem( T itemKey ) throws IndexException;
102    
103        /**
104         * updates spacial index of the specified item in the quadtree.
105         * 
106         * @param itemKey the ID of the item.
107         * @param newBBox the new BBoundingbox of the item.
108         * @throws IndexException if the rootnode cannot be loaded, or the given item does not exist.
109         */
110        public abstract void update( T itemKey, Envelope newBBox ) throws IndexException;
111    
112        /**
113         * deletes all references of items whose envelope intersects with the passed one (
114         * 
115         * @see #deleteItem(Object) )
116         * @param envelope
117         */
118        public abstract void deleteRange( Envelope envelope );
119    
120        /**
121         * 
122         * @return the maxium depth of the tree (which was configured at instantiation of the db ).
123         */
124        public abstract int getDepth();
125    
126        /**
127         * returns the bounding box covered by the quadtrees root node
128         * 
129         * @return the bounding box covered by the quadtrees root node
130         * @throws IndexException
131         */
132        public abstract Envelope getRootBoundingBox()
133                                                     throws IndexException;
134    
135    }