package eu.dnetlib.enabling.aas.client;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.opensaml.lite.saml2.core.Assertion;

/**
 * Service assertion holder storing single assertion.
 * @author mhorst
 *
 */
public class ServiceSingleAssertionHolder implements ISingleAssertionHolder {

	private Assertion assertion;
	
	@Override
	public Assertion getAssertion() {
		return assertion;
	}

	@Override
	public Assertion addOrReplace(Assertion assertion) {
		this.assertion = assertion;
		return assertion;
	}

	@Override
	public boolean containsAssertion(String assertionId) {
		return assertion!=null && assertion.getID().equals(assertionId);
	}

	@Override
	public Collection<Assertion> getAllAssertions() {
		List<Assertion> result = new ArrayList<Assertion>();
		if (assertion!=null) {
			result.add(assertion);
		}
		return result;
	}

	@Override
	public Assertion getAssertion(Assertion assertion) {
		if (this.assertion!=null && this.assertion.getID().equals(assertion.getID())) {
			return this.assertion;
		} else {
			return null;
		}
	}

	@Override
	public Assertion remove(Assertion assertion) {
		if (this.assertion!=null && this.assertion.getID().equals(assertion.getID())) {
			Assertion result = this.assertion;
			this.assertion = null;
			return result;
		} else {
			return null;
		}
	}

	@Override
	public Assertion remove(String identifier) {
		if (this.assertion!=null && this.assertion.getID().equals(identifier)) {
			Assertion result = this.assertion;
			this.assertion = null;
			return result;
		} else {
			return null;
		}
	}

	@Override
	public Assertion getAssertion(String identifier) {
		if (this.assertion!=null && this.assertion.getID().equals(identifier)) {
			return this.assertion;
		} else {
			return null;
		}
	}

	@Override
	public Assertion revoke(String identifier) {
		return this.remove(identifier);
	}

	@Override
	public Assertion updateAssertion(Assertion assertion) {
		return addOrReplace(assertion);
	}

}
