protected RpfCacheHandler sweepCaches(){
  if (caches.size() < maxUsers) {
    return null;
  }
  long diff=Long.MAX_VALUE;
  Enumeration keys=timestamps.keys();
  Object getRid=null;
  while (keys.hasMoreElements()) {
    Object tester=keys.nextElement();
    Long time=(Long)timestamps.get(tester);
    if (time.longValue() < diff) {
      getRid=tester;
      diff=time.longValue();
    }
  }
  boolean DEBUG=false;
  if (getRid != null) {
    if (Debug.debugging("crfp")) {
      DEBUG=true;
    }
    if (DEBUG)     Debug.output("Removing cache for new user, was " + caches.size());
    caches.remove(getRid);
    timestamps.remove(getRid);
    viewAttributeLists.remove(getRid);
    if (DEBUG)     Debug.output("  now " + caches.size());
  }
  if (caches.size() >= maxUsers) {
    return sweepCaches();
  }
 else {
    return (RpfCacheHandler)getRid;
  }
}

protected RpfCacheHandler sweepCaches ( ) { if ( caches . size ( ) < maxUsers ) { return null ; } long diff = Long . MAX_VALUE ; Enumeration keys = timestamps . keys ( ) ; Object getRid = null ; while ( keys . hasMoreElements ( ) ) { Object tester = keys . nextElement ( ) ; Long time = ( Long ) timestamps . get ( tester ) ; if ( time . longValue ( ) < diff ) { getRid = tester ; diff = time . longValue ( ) ; } } boolean DEBUG = false ; if ( getRid != null ) { if ( Debug . debugging ( "crfp" ) ) { DEBUG = true ; } if ( DEBUG ) Debug . output ( "Removing cache for new user, was " + caches . size ( ) ) ; caches . remove ( getRid ) ; timestamps . remove ( getRid ) ; viewAttributeLists . remove ( getRid ) ; if ( DEBUG ) Debug . output ( "  now " + caches . size ( ) ) ; } if ( caches . size ( ) >= maxUsers ) { return sweepCaches ( ) ; } else { return ( RpfCacheHandler ) getRid ; } }
create a spot in the cache for a new entry . if something is removed from the cache , it is returned here .
