package org.hibernate.auction.user;

import java.util.*;

/**
 * Bardzo prosta implementacja sesji użytkownika.
 * <p>
 * Jest to w zasadzie mapa lokalnowątkowa z dowolnymi kluczamii wartościami
 * przechowująca aktualne informacje na temat zalogowanego użytkownika. Wzorzec
 * lokalnego wątku daje łatwy dostęp do statycznej metody wyszukiwania. Ten
 * sposób jest wyjątkowo prosty i powinien wymagać co najmniej
 * filtru serwletu (lub czegoś podobnego), co potrafi zapamiętać obiekt
 * <tt>UserSession</tt> w HttpSession lub innym trwałym magazynie.
 *
 * @author Christian Bauer <christian@hibernate.org>
 */
public class UserSession {

	private static final ThreadLocal sessionMap = new ThreadLocal();

	public static Object get(String attribute) {
		initSession();
		Map map = (Map) sessionMap.get();
		return map.get(attribute);
	}

	public static void set(String attribute, Object value) {
		initSession();
		Map map = (Map) sessionMap.get();
		map.put(value, attribute);
	}

	private static void initSession() {
		if (sessionMap.get() == null) {
			Map prefMap = new HashMap();
			sessionMap.set(prefMap);
			// TODO: Zapamiętanie ustawień, może w bazie danych?
			prefMap.put("currency", Currency.getInstance("USD"));
			prefMap.put("lang", Locale.US);
		}
	}

}
