content: // This file is part of AceWiki.
  // Copyright 2008-2013, AceWiki developers.
  // 
  // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
  // Lesser General Public License as published by the Free Software Foundation, either version 3 of
  // the License, or (at your option) any later version.
  // 
  // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  // Lesser General Public License for more details.
  // 
  // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
  // not, see http://www.gnu.org/licenses/.
  
  package ch.uzh.ifi.attempto.acewiki.core;
  
  import java.util.List;
  
  import ch.uzh.ifi.attempto.base.MultiTextContainer;
  import ch.uzh.ifi.attempto.base.TextElement;
  
  /**
   * This interface represents a potentially ambiguous sentence and covers declarative
   * as well as interrogative tree sets. It can be viewed in different languages.
   * 
   * @author Tobias Kuhn
   * @author Kaarel Kaljurand
   */
  public interface Sentence extends Statement {
  
  	/**
  	 * Returns a list of text elements that represent the tokens of this sentence in the given
  	 * language (the first one if there are multiple alternatives).
  	 * 
  	 * @param language The language.
  	 * @return A token list.
  	 */
  	public List<TextElement> getTextElements(String language);
  
  	/**
  	 * Returns a text container with the text of this sentence (possibly with alternatives) in the
  	 * given language.
  	 * 
  	 * @param language The language.
  	 * @return The multi-text container.
  	 */
  	public MultiTextContainer getTextContainer(String language);
  
  	/**
  	 * Returns true if this sentence can participate in reasoning.
  	 * 
  	 * @return true if this sentence can participate in reasoning.
  	 */
  	// TODO move to ontology or reasoner class?
  	public boolean isReasonable();
  
  	/**
  	 * Returns true if the sentence is integrated into the ontology.
  	 * 
  	 * @return true if the sentence is integrated into the ontology.
  	 */
  	public boolean isIntegrated();
  
  	/**
  	 * Informs the sentence object whether it is integrated into the ontology or not. This
  	 * method should only be called from the ontology or an ontology loader.
  	 * 
  	 * @param integrated true if the sentence is integrated into the ontology.
  	 */
  	public void setIntegrated(boolean integrated);
  
  	/**
  	 * Checks whether the sentence contains the given ontology element (no matter which
  	 * word form).
  	 * 
  	 * @param e The ontology element.
  	 * @return true if the ontology element occurs in this sentence.
  	 */
  	public boolean contains(OntologyElement e);
  
  	/**
  	 * This method is called whenever some words of the sentence are modified.
  	 */
  	public void update();
  
  	/**
  	 * Returns whether the sentence can be changed or is immutable.
  	 * 
  	 * @return true if the sentence cannot be changed.
  	 */
  	public boolean isImmutable();
  
  	/**
  	 * Returns a list of sentence details in the given language and for the given representation.
  	 * 
  	 * @param language The language.
  	 * @param index The index of the representation.
  	 * @return A list of sentence details.
  	 */
  	public List<SentenceDetail> getDetails(String language, int index);
  
  	/**
  	 * Returns the number of internal representations. A value larger than 1 indicates internal
  	 * ambiguity.
  	 * 
  	 * @return The number of internal representations.
  	 */
  	public int getNumberOfRepresentations();
  
  	public Sentence unambiguousCopyFor(Article article, int index);
  
  }
  