//LeafElement.java
//
//This library is free software; you can redistribute it and/or
//modify it under the terms of the GNU Lesser General Public
//License as published by the Free Software Foundation; either
//version 2.1 of the License, or (at your option) any later version.
//
//This library is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
//Lesser General Public License for more details.
package rtree;
//package rtree;
import java.util.*;
/**
This class represents database objects.
It consist of a MBR and the PID of the object.
@author Prachuryya Barua
*/
public class LeafElement extends Element
{
/**
for the time being it is 'int'.
Changed to long
*/
long recordPtr;
public LeafElement( Rect minBndRect,long recordPtr)
{
super(minBndRect);
this.recordPtr = recordPtr;
}
/**
if possible make this function abstract and static in the parent class
depends upon the size of the pointer
*/
public static int sizeInBytes()
{
return( Rect.sizeInBytes() + Node.LONG_SIZE);
}
/**
The <tt>"Id"</tt> of the MBR in database.
@return an Long type object
*/
// public Object getPtr()
// {
// return(new Long(recordPtr));
// }
public long getPtr()
{
return recordPtr;
}
public int getElementType()
{
return Node.LEAF_NODE;
}
// void setPtr(Object ptr)
// throws IllegalValueException
// {
// if(!(ptr instanceof Long))
// throw new IllegalValueException("rtree.LeafElement.setPtr: pointer shoild be Long");
// recordPtr = ((Long)ptr).longValue();
// }
public void setPtr(long ptr)
{
recordPtr = ptr;
}
public String toString()
{
return (super.toString()+"\n\trecPointer: "+recordPtr);
}
public Object clone()
{
try{
return new LeafElement(new Rect(Rectangle.getMinX(), Rectangle.getMinY(),
Rectangle.getMaxX(), Rectangle.getMaxY()),recordPtr);
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
This is a utility method that extracts record pointers(IDs) from a <code>LeafElement</code> vector.
This method can be called after calling amy of the spatial calls to RTree.
*/
public synchronized static List extractPtrs(List elements)
throws IllegalArgumentException
{
if(elements == null)
throw new IllegalArgumentException("RTree.LeafElement: Argument null");
List result = new ArrayList();
try{
for (Iterator i = elements.iterator(); i.hasNext();)
//result.addElement(new Long(((LeafElement)i.next()).getPtr()));
result.add(new Integer((int)((LeafElement)i.next()).getPtr()));//temp
//System.out.println("LeafElement.Extractptrs : time " + (System.currentTimeMillis() - time));
return result;
}catch(ClassCastException e){
throw new IllegalArgumentException("RTree.LeafElement: Type of vector is not LeafElement");
}
}
}