Writing a new cache algorithm

This section explains how to write a custom cache algorithm to meet specific application requirements. The example in this section is a simplified version of the class IlvDefaultTileCache provided in the JViews Maps library.
The complete source code for this example can be found in the following file:
The class SimpleTileCache extends the class IlvTileCache .
public class SimpleTileCache 
  extends IlvTileCache
{
cacheSize defines the maximum number of tiles that can be stored in the cache.
  // default cache size
  private int cacheSize = 5;
  // To Store the tiles
  transient private Vector tiles = new Vector();
The following constructor creates an instance of the default cache with the specified size (in this example, 5).
 public SimpleTileCache(int size)
  {
    cacheSize = size;
  }
The following constructor reads the cache from the provided input stream. Caches created using this constructor implement the IlvPersistentObject interface and can thus be saved with an IlvTiledLayer object.
  public SimpleTileCache(IlvInputStream stream)
  throws IlvReadFileException
  {
    cacheSize = stream.readInt("size");
  }
The write() method writes the cache to an output stream.
 public void write(IlvOutputStream stream) 
    throws IOException
  {
    super.write(stream);
    stream.write("size", cacheSize);
  }
The following method belongs to the IlvTileCache interface. It is called when a tile is cached. In this implementation, the tile is added at the end of the internal tile list.
  public void tileCached(IlvTile tile)
  {
    tiles.addElement(tile);
  }
The following method belongs to the IlvTileCache interface. It is called when a tile is removed from the cache and locked again. With this implementation, the tile is removed from the internal tile list.
  public void tileRetrieved(IlvTile tile)
  {
    tiles.removeElement(tile);
  }
The following method belongs to the IlvTileCache interface. It is called when a tile is about to be loaded. With this implementation, if the number of tiles in the cache exceeds the cache size, the least recently used tiles, at the top the internal tile list, will be unloaded to make room for new tiles.
  public void tileAboutToLoad(IlvTile tile)
  {
    int toRemove = tiles.size() - cacheSize;
    if (toRemove <= 0)
      return;
    for (int i = toRemove; i > 0; i--) {
      IlvTile current = (IlvTile) tiles.elementAt(0);
      tiles.removeElementAt(0);
      releaseTile(current);
    }
  }
The following method belongs to the IlvTileCache interface. It is called when a tiled layer is taken out of the manager to remove the tiles managed by its tile controller from the cache.
  public void controllerDisposed(IlvTileController controller)
  {
    int i = 0;
    while (i < tiles.size()) {
      IlvTile tile = (IlvTile) tiles.elementAt(i);
      if (tile.getController() == controller) 
        tiles.removeElementAt(i);
      else
        i++;
    }
  }