/*
 * @(#)SSOContext.java
 *
 * Copyright (C) 2007 Infocity Inc. All Rights Reserved.
 */
package info.dragonlady.sso;

import javax.servlet.http.HttpServletRequest;

import org.opensaml.NoSuchProviderException;
import org.opensaml.ReplayCache;
import org.opensaml.ReplayCacheFactory;

/**
 * SSOフレームワークコンテキスト。
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.0 $ $Date: 2007/04/18 20:00:00 $
 */
public class SSOContext {

	private static final SSOContext context = new SSOContext();

	private ReplayCache replayCache = null;

	private ThreadLocal<HttpServletRequest> currentRequest = new ThreadLocal<HttpServletRequest>();

	/**
	 * インスタンス取得。
	 * 
	 * @return SSOContext クラスインスタンス
	 */
	public static final SSOContext getInstance() {
		return context;
	}

	/**
	 * リプレイキャッシュを取得。
	 * 
	 * @return ReplayCache リプレイキャッシュ
	 * @throws NoSuchProviderException
	 */
	public synchronized ReplayCache getReplayCache() throws NoSuchProviderException {
		if(replayCache == null) {
			replayCache = ReplayCacheFactory.getInstance();
		}
		return replayCache;
	}

	/**
	 * HTTP要求を取得。
	 * 
	 * @return HttpServletRequest HTTP要求
	 */
	public HttpServletRequest getCurrentRequest() {
		return currentRequest.get();
	}

	/**
	 * HTTP要求を設定。
	 * 
	 * @param request HTTP要求
	 */
	public void setCurrentRequest(HttpServletRequest request) {
		currentRequest.set(request);
	}

}
