001    // This file is part of AceWiki.
002    // Copyright 2008-2012, AceWiki developers.
003    // 
004    // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005    // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006    // the License, or (at your option) any later version.
007    // 
008    // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009    // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010    // Lesser General Public License for more details.
011    // 
012    // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013    // not, see http://www.gnu.org/licenses/.
014    
015    package ch.uzh.ifi.attempto.acewiki.core;
016    
017    import ch.uzh.ifi.attempto.base.TextElement;
018    
019    /**
020     * This class represents a text element that links to an ontology element. The text of
021     * the text elements corresponds to one of the word forms of the ontology element.
022     * 
023     * @author Tobias Kuhn
024     */
025    // TODO Get rid of pre and post texts.
026    public class OntologyTextElement extends TextElement {
027            
028            private OntologyElement ontologyElement;
029            private int wordNumber;
030            private String pre = "";
031            private String post = "";
032            
033            /**
034             * Creates a new ontology text element.
035             * 
036             * @param element The ontology element.
037             * @param wordNumber The word number.
038             */
039            public OntologyTextElement(OntologyElement element, int wordNumber) {
040                    if (element.getWord(wordNumber) == null) {
041                            throw new RuntimeException(element + " has no word number " + wordNumber);
042                    }
043                    this.ontologyElement = element;
044                    this.wordNumber = wordNumber;
045            }
046    
047            /**
048             * Returns the text of this text element in its plain form where underscores are not
049             * replaces by blanks.
050             * 
051             * @return The plain text.
052             */
053            public String getUnderscoredText() {
054                    return super.getText();
055            }
056            
057            public String getText() {
058                    String t = super.getText();
059                    if (t == null) return null;
060                    return LanguageUtils.getPrettyPrinted(t);
061            }
062            
063            public String getOriginalText() {
064                    return pre + ontologyElement.getWord(wordNumber) + post;
065            }
066            
067            /**
068             * This method adds a text to the front of the word of the ontology element.
069             * 
070             * @param pre The text to be added to the front.
071             */
072            public void setPreText(String pre) {
073                    if (pre != null) this.pre = pre;
074            }
075            
076            /**
077             * Returns the text added to the front.
078             * 
079             * @return The text to be added to the front.
080             */
081            public String getPreText() {
082                    return pre;
083            }
084            
085            /**
086             * This method adds a text to the end of the word of the ontology element.
087             * 
088             * @param post The text to be added to the end.
089             */
090            public void setPostText(String post) {
091                    if (post != null) this.post = post;
092            }
093            
094            /**
095             * Returns the text added to the end.
096             * 
097             * @return The text to be added to the end.
098             */
099            public String getPostText() {
100                    return post;
101            }
102    
103            /**
104             * Returns the id of the word form of the ontology element that is used for this
105             * text element.
106             * 
107             * @return The word form id.
108             */
109            public int getWordNumber() {
110                    return wordNumber;
111            }
112            
113            /**
114             * Returns the ontology element to which this text element is linked.
115             * 
116             * @return The ontology element.
117             */
118            public OntologyElement getOntologyElement() {
119                    return ontologyElement;
120            }
121            
122            public boolean equals(Object obj) {
123                    if (obj instanceof OntologyTextElement) {
124                            OntologyTextElement other = ((OntologyTextElement) obj);
125                            return (
126                                            ontologyElement == other.ontologyElement &&
127                                            wordNumber == other.wordNumber
128                                    );
129                    }
130                    return false;
131            }
132    
133    }