package eu.dnetlib.enabling.resultset;

import eu.dnetlib.miscutils.observer.AbstractObservable;

/**
 * Common stuff for resultset implementations bound to a ResultSetRegistry.
 * 
 * @author marko
 * 
 */
public abstract class AbstractObservableResultset extends AbstractObservable<ResultSetRegistry> implements ResultSet {
	/**
	 * true if the resultset is destroyed.
	 */
	private boolean destroyed = false;

	/**
	 * true if the resultset is open.
	 */
	private boolean open;

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.dnetlib.enabling.resultset.ResultSet#destroy()
	 */
	public void destroy() {
		if (!isDestroyed()) {
			setDestroyed(true);
			notifyObservers();
			deleteObservers();
		}
	}

	public void setDestroyed(final boolean destroyed) {
		this.destroyed = destroyed;
	}

	public boolean isDestroyed() {
		return destroyed;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.dnetlib.enabling.resultset.ResultSet#isOpen()
	 */
	public boolean isOpen() {
		return open;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see eu.dnetlib.enabling.resultset.ResultSet#close()
	 */
	public void close() {
		open = false;
	}

	public void setOpen(final boolean open) {
		this.open = open;
	}

}
