    001    // This file is part of the Attempto Java Packages.
    002    // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
    003    //
    004    // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
    005    // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
    006    // either version 3 of the License, or (at your option) any later version.
    007    //
    008    // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
    009    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    010    // PURPOSE. See the GNU Lesser General Public License for more details.
    011    //
    012    // You should have received a copy of the GNU Lesser General Public License along with the Attempto
    013    // Java Packages. If not, see http://www.gnu.org/licenses/.
    014
    015    package ch.uzh.ifi.attempto.acewiki.core.ontology;
    016
    017    import java.util.ArrayList;
    018    import java.util.List;
    019
    020    import ch.uzh.ifi.attempto.ape.LexiconEntry;
    021
    022    /**
    023     * This class stands for roles that are represented by a transitive verb. Transitive
    024     * verbs have three word forms: a third singular form, a bare infinitive form ,
    025     * and a passive form. The bare infinitive form is used in the case of negation and plural.
    026     * The passive form always ends with the word "by".
    027     *<p>
    028     * 0: third singular form.
    029     * 1: bare infinitive form.
    030     * 2: passive form.
    031     *<p>
    032     * Examples: ["gives", "give", "given by"]; ["knows", "know", "known by"].
    033     *
    034     * @author Tobias Kuhn
    035     */
    036    public class VerbRole extends Role {
    037
    038            private String thirdSg, inf, passive;
    039
    040            /**
    041             * Creates a new verb role.
    042             */
    043            public VerbRole() {
    044            }
    045
    046            public String[] getWords() {
    047                    return new String[] {thirdSg, inf, passive};
    048            }
    049
    050            protected void changeWords(String... words) {
    051                    thirdSg = words[0];
    052                    inf = words[1];
    053                    if (words.length < 3 || words[2] == null) {
    054                            passive = null;
    055                    } else if (words[2].endsWith(" by")) {
    056                            passive = words[2];
    057                    } else {
    058                            passive = words[2] + " by";
    059                    }
    060            }
    061
    062            /**
    063             * Returns the past participle which is the passive form without the "by".
    064             * E.g. for the passive form "given by", the past participle is "given".
    065             *
    066             * @return The past participle form.
    067             */
    068            public String getPastPart() {
    069                    String s = getWord(2);
    070                    if (s == null) {
    071                            return null;
    072                    } else if (s.endsWith(" by")) {
    073                            return s.substring(0, s.length()-3);
    074                    } else {
    075                            throw new RuntimeException("Illegal passive word form: " + s);
    076                    }
    077            }
    078
    079            /**
    080             * Returns the pretty-printed past participle. The pretty printing replaces
    081             * underscores by blanks.
    082             *
    083             * @return The pretty-printed past participle form.
    084             * @see #getPastPart()
    085             */
    086            public String getPrettyPastPart() {
    087                    String s = getWord(2);
    088                    if (s == null) {
    089                            return null;
    090                    } else if (s.endsWith(" by")) {
    091                            return s.substring(0, s.length()-3);
    092                    } else {
    093                            throw new RuntimeException("Illegal passive word form: " + s);
    094                    }
    095            }
    096
    097            List<LexiconEntry> getLexiconEntries() {
    098                    List<LexiconEntry> entries = new ArrayList<LexiconEntry>();
    099                    entries.add(LexiconEntry.createTrVerbThirdEntry(thirdSg, inf));
    100                    entries.add(LexiconEntry.createTrVerbInfEntry(inf, inf));
    101                    if (passive != null) {
    102                            entries.add(LexiconEntry.createTrVerbPPEntry(getPastPart(), inf));
    103                    }
    104                    return entries;
    105            }
    106
    107            public String getType() {
    108                    return "Verb";
    109            }
    110
    111            public String getInternalType() {
    112                    return "trverb";
    113            }
    114
    115    }