// (c) MIT 2003.  All rights reserved.

// -*-Mode: Java-*- 
// $Id: Annotation.java,v 1.2 2003/03/06 00:40:43 moltmans Exp $
// Anotation.java -- 
// Author: Michael Oltmans <moltmans@ai.mit.edu> 
// Created: <Tue Aug 24 13:38:02 1999> 
// Time-stamp: <2000-04-18 13:29:55 moltmans> 
package rec.annotate;

import java.util.*;

/**
 * The root interface that all Annotations must implement
 **/
public interface Annotation
{
  /**
   * Make any assertions in the notebook that are not Entity bindings
   * or entity to annotation mappings.
   **/
  public void updateNotebook();

  /**
   * Retract the information asserted in updateNotebook
   **/
  public void retractUpdate();

  /**
   * Make sure that subclasses have their own versions of merge.  For
   * example, it is possible to merge a movement and a rotation so
   * care should be taken that the merged annotation is always a
   * rotation and is not dependent on which object the merge is called
   * on.n
   **/
  public Annotation merge( Annotation a );

  /**
   * @return a debugging level text description of the annotation.
   **/
  public String describe();

  /**
   * @return a mutable list of entites used in this annotation.
   **/    
  public LinkedList getEntities();

  /**
   * @return a mutable list of the sentnces used to construct this
   *         annotation
   **/
  public LinkedList getSentences();

  /**
   * @return the causes of the event depicted by this annotation.
   **/
  public Annotation getCause();

  /**
   * @return the event caused by this event
   **/
  public Annotation getEffect();

  public void setCause( Annotation cause );
  public void setEffect( Annotation effect );
}
