package eu.dnetlib.contract.event;

import org.aspectj.lang.JoinPoint;
import org.contract4j5.contract.Contract;
import org.contract4j5.contract.Post;
import org.contract4j5.contract.Pre;

/**
 * Contract event interface.
 * @author mhorst
 *
 */
@Contract
public interface IContractEvent {
	
	/**
	 * Returns JoinPoint object of current event.
	 * @return JoinPoint object of current event
	 */
	@Post("$return != null")
	public JoinPoint getJoinPoint();
	
	/**
	 * Sets JoinPoint object of current event
	 * @param joinPoint
	 */
	@Pre("joinPoint != null")
	public void setJoinPoint(JoinPoint joinPoint);
	
	/**
	 * Returns ContractEvent type.
	 * @return ContractEvent type
	 */
	@Post("$return != null")
	public String getType();

}
