/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse Public License v1.0       
 * which accompanies this distribution, and is available at                  
 * http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.utils.session;

import com.vaadin.server.VaadinSession;

/**
 * Attributes saved for the vaadin session = session static
 */
public class VaadinSessionAttributes {

	private static VaadinSession session() {
		return VaadinSession.getCurrent();
	}
	
	/**
	 * remove variable
	 * @param variable
	 */
	public static void remove(String variable) {
		set(variable, null);
	}

	/**
	 * set variable
	 * @param variable
	 * @param value
	 */
	public static void set(String variable, Object value) {
		session().setAttribute(variable, value);
	}

	/**
	 * get variable
	 * @param variable
	 */
	public static Object get(String variable) {
	    return session().getAttribute(variable);
	}

	/**
	 * remove variable
	 * @param variable
	 */
    public static <T> void remove(Class<T> variable) {
    	set(variable, null);
    }

	/**
	 * set variable
	 * @param variable
	 * @param value
	 */
    public static <T> void set(Class<T> variable, T value) {
    	session().setAttribute(variable, value);
    }
	
	/**
	 * get variable
	 * @param variable
	 */
    public static <T> T get(Class<T> variable) {
    	return session().getAttribute(variable);
    }
}
