package eu.dnetlib.contract.node;


/**
 * Contract definition node markup.
 * Main interface used in contract definition.
 * TODO implement clone methods
 * @author mhorst
 *
 */
public interface IContractDefinitionNode {
	
	public static final char NODE_POS_ID_DELIMITER = '.';
	
	/**
	 * Returns node identifier.
	 * @return node identifier
	 */
	public String getNodePositionIdentifier();

	/**
	 * Sets node identifier.
	 * @param nodePositionIdentifier
	 */
	public void setNodePositionIdentifier(String nodePositionIdentifier);
	
	/**
	 * Returns next referenced {@link IContractDefinitionNode} element.
	 * @return next referenced IContractDefinitionNode element
	 */
	public IContractDefinitionNode getNextNode();
	
	/**
	 * Sets next referenced {@link IContractDefinitionNode} element.
	 * @param node
	 */
	public void setNextNode(IContractDefinitionNode node);
	
	/**
	 * Sets previous referenced {@link IContractDefinitionNode} element.
	 * @param node
	 */
	public void setPrevNode(IContractDefinitionNode node);
	
	/**
	 * Returns previous referenced {@link IContractDefinitionNode} element.
	 * @return previous referenced IContractDefinitionNode element
	 */
	public IContractDefinitionNode getPrevNode();
	
	/**
	 * Returns parent SEQ or RAND node of current check point.
	 * @return parent SEQ or RAND node of current check point
	 */
	public IContractDefinitionNode getParentNode();

	/**
	 * Sets parent SEQ or RAND node of current check point.
	 * @param parentNode
	 */
	public void setParentNode(IContractDefinitionNode parentNode);

}
