package at.gv.egovernment.moa.id.auth;

import at.gv.egovernment.moa.id.util.MOAIDMessageProvider;
import at.gv.egovernment.moa.logging.Logger;

/**
 * Thread cleaning the <code>AuthenticationServer</code> session store
 * and authentication data store from garbage.
 * 
 * @author Paul Ivancsics
 * @version $Id$
 */
public class AuthenticationSessionCleaner implements Runnable {

  /** interval the <code>AuthenticationSessionCleaner</code> is run in */
  private static final long SESSION_CLEANUP_INTERVAL = 30 * 60; // 30 min

	/**
	 * Runs the thread. Cleans the <code>AuthenticationServer</code> session store
 	 * and authentication data store from garbage, then sleeps for given interval, and restarts.
   */
  public void run() {
    while (true) {
      try {
      	Logger.debug("AuthenticationSessionCleaner run");
      	AuthenticationServer.getInstance().cleanup();
      } 
      catch (Exception e) {
        Logger.error(MOAIDMessageProvider.getInstance().getMessage("cleaner.01", null), e);
      }
      try {
        Thread.sleep(SESSION_CLEANUP_INTERVAL * 1000);
      } 
      catch (InterruptedException e) {
      }
    }
  }

  /**
   * start the sessionCleaner
   */
  public static void start() {
    // start the session cleanup thread
    Thread sessionCleaner =
      new Thread(new AuthenticationSessionCleaner());
    sessionCleaner.setName("SessionCleaner");
    sessionCleaner.setDaemon(true);
    sessionCleaner.setPriority(Thread.MIN_PRIORITY);
    sessionCleaner.start();
  }

}