package eu.dnetlib.enabling.aas.holder;

import org.opensaml.lite.common.SAMLObject;

import eu.dnetlib.enabling.aas.utils.SelfCleanableSAMLThreadLocal;


/**
 * {@link ThreadLocal} based {@link SAMLObject} holder.
 * Allows sharing SAML data for a processing flow between interceptors and core AAS.
 * @author mhorst
 *
 */
public class ThreadLocalBasedSAMLDataHolder implements IDataHolder<SAMLObject[]> {
	
	/**
	 * Thread local {@link SAMLObject} holder.
	 */
	protected static SelfCleanableSAMLThreadLocal threadLocal;
	
	/**
	 * Default constructor.
	 */
	public ThreadLocalBasedSAMLDataHolder() {
		threadLocal = new SelfCleanableSAMLThreadLocal();
	}

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.aas.holder.IDataHolder#storeData(org.opensaml.common.SAMLObject[])
	 */
	public void storeData(SAMLObject[] data) {
		threadLocal.set(data);
	}
	
	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.aas.holder.IDataHolder#getData()
	 */
	public SAMLObject[] getData() {
		return threadLocal.get();
	}

	/* (non-Javadoc)
	 * @see eu.dnetlib.enabling.aas.holder.IDataHolder#removeData()
	 */
	public SAMLObject[] removeData() {
		return threadLocal.get();
	}
}
