    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.gui.page;
    016
    017    import java.util.List;
    018
    019    import nextapp.echo2.app.Border;
    020    import nextapp.echo2.app.Color;
    021    import nextapp.echo2.app.Column;
    022    import nextapp.echo2.app.Extent;
    023    import nextapp.echo2.app.Font;
    024    import nextapp.echo2.app.Grid;
    025    import nextapp.echo2.app.Insets;
    026    import nextapp.echo2.app.ResourceImageReference;
    027    import nextapp.echo2.app.Row;
    028    import nextapp.echo2.app.event.ActionEvent;
    029    import nextapp.echo2.app.event.ActionListener;
    030    import ch.uzh.ifi.attempto.acewiki.Wiki;
    031    import ch.uzh.ifi.attempto.acewiki.core.ontology.Individual;
    032    import ch.uzh.ifi.attempto.acewiki.core.ontology.NounConcept;
    033    import ch.uzh.ifi.attempto.acewiki.core.ontology.OfRole;
    034    import ch.uzh.ifi.attempto.acewiki.core.ontology.OntologyElement;
    035    import ch.uzh.ifi.attempto.acewiki.core.ontology.Sentence;
    036    import ch.uzh.ifi.attempto.acewiki.core.ontology.TrAdjRole;
    037    import ch.uzh.ifi.attempto.acewiki.core.ontology.VerbRole;
    038    import ch.uzh.ifi.attempto.acewiki.gui.Title;
    039    import ch.uzh.ifi.attempto.acewiki.gui.editor.NounForm;
    040    import ch.uzh.ifi.attempto.acewiki.gui.editor.NounOfForm;
    041    import ch.uzh.ifi.attempto.acewiki.gui.editor.ProperNameForm;
    042    import ch.uzh.ifi.attempto.acewiki.gui.editor.TrAdjForm;
    043    import ch.uzh.ifi.attempto.acewiki.gui.editor.VerbForm;
    044    import ch.uzh.ifi.attempto.echocomp.HSpace;
    045    import ch.uzh.ifi.attempto.echocomp.Label;
    046    import ch.uzh.ifi.attempto.echocomp.MessageWindow;
    047    import ch.uzh.ifi.attempto.echocomp.SmallButton;
    048    import ch.uzh.ifi.attempto.echocomp.SolidLabel;
    049    import ch.uzh.ifi.attempto.echocomp.VSpace;
    050
    051    /**
    052     * This class represents a page that shows the details about a certain word.
    053     *
    054     * @author Tobias Kuhn
    055     */
    056    public class WordPage extends WikiPage implements ActionListener {
    057
    058            private static final long serialVersionUID = 5800290686564822519L;
    059
    060            private ArticlePage page;
    061
    062            private SmallButton editButton = new SmallButton("edit...", this);
    063            private SmallButton delButton = new SmallButton("delete...", this);
    064
    065            private Column textColumn = new Column();
    066
    067            /**
    068             * Creates a new word page.
    069             *
    070             * @param page The main page that contains the article.
    071             */
    072            public WordPage(ArticlePage page) {
    073                    super(page.getWiki(), new Title(page.getOntologyElement().getHeadword(), "- " + page.getOntologyElement().getType()));
    074                    this.page = page;
    075
    076                    addTab("Article", this);
    077                    addSelectedTab(page.getOntologyElement().getType());
    078                    addTab("References", this);
    079                    if (page instanceof ConceptPage) {
    080                            addTab("Individuals", this);
    081                            addTab("Hierarchy", this);
    082                    }
    083                    if (page instanceof IndividualPage) {
    084                            addTab("Assignments", this);
    085                    }
    086
    087                    add(new VSpace(10));
    088
    089                    textColumn.setInsets(new Insets(10, 10, 5, 20));
    090                    textColumn.setCellSpacing(new Extent(5));
    091                    add(textColumn);
    092            }
    093
    094            protected void doUpdate() {
    095                    getTitle().setText(page.getOntologyElement().getHeadword());
    096
    097                    textColumn.removeAll();
    098
    099                    Grid iconRow = new Grid(2);
    100                    iconRow.setRowHeight(0, new Extent(110));
    101                    iconRow.setColumnWidth(0, new Extent(100));
    102                    iconRow.setInsets(new Insets(0, 0, 0, 10));
    103                    textColumn.add(iconRow);
    104
    105                    Grid lexiconGrid = new Grid(2);
    106                    lexiconGrid.setInsets(new Insets(5, 1, 20, 2));
    107                    lexiconGrid.setBorder(new Border(1, Color.DARKGRAY, Border.STYLE_SOLID));
    108                    lexiconGrid.setBackground(new Color(245, 245, 245));
    109                    textColumn.add(lexiconGrid);
    110
    111                    OntologyElement oe = page.getOntologyElement();
    112                    if (oe instanceof Individual) {
    113                            Individual ind = (Individual) oe;
    114                            iconRow.add(new Label(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/individual.png")));
    115                            iconRow.add(new Label(
    116                                            "\"" + ind.getPrettyWord(1) + "\" is a proper name and represents an individual. " +
    117                                            "There is exactly one thing that has the name \"" + ind.getPrettyWord(1) + "\". " +
    118                                            "This proper name is used " + (ind.hasDefiniteArticle() ? "with a definite article: \"" + ind.getPrettyWord(0) + "\"." : "without a definite article."),
    119                                            Font.ITALIC
    120                                    ));
    121                            lexiconGrid.add(new SolidLabel("word class", Font.ITALIC + Font.BOLD, 11));
    122                            lexiconGrid.add(new SolidLabel("proper name", Font.ITALIC));
    123                            lexiconGrid.add(new SolidLabel("word", Font.ITALIC + Font.BOLD, 11));
    124                            lexiconGrid.add(new SolidLabel(ind.getPrettyWord(1)));
    125                            lexiconGrid.add(new SolidLabel("definite article", Font.ITALIC + Font.BOLD, 11));
    126                            lexiconGrid.add(new SolidLabel((ind.hasDefiniteArticle() ? "yes" : "no"), Font.ITALIC));
    127                    } else if (oe instanceof NounConcept) {
    128                            NounConcept noun = (NounConcept) oe;
    129                            String sg = noun.getPrettyWord(0);
    130                            String pl = noun.getPrettyWord(1);
    131                            iconRow.add(new Label(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/concept.png")));
    132                            iconRow.add(new Label(
    133                                            "\"" + sg + "\" is a noun and represents a type of things. " +
    134                                            "It stands for all things that are " + pl + ". " +
    135                                            "The singular form is \"" + sg + "\" and the plural form is \"" + pl + "\".",
    136                                            Font.ITALIC
    137                                    ));
    138                            lexiconGrid.add(new SolidLabel("word class", Font.ITALIC + Font.BOLD, 11));
    139                            lexiconGrid.add(new SolidLabel("noun", Font.ITALIC));
    140                            lexiconGrid.add(new SolidLabel("singular", Font.ITALIC + Font.BOLD, 11));
    141                            lexiconGrid.add(new SolidLabel(sg));
    142                            lexiconGrid.add(new SolidLabel("plural", Font.ITALIC + Font.BOLD, 11));
    143                            lexiconGrid.add(new SolidLabel(pl));
    144                    } else if (oe instanceof VerbRole) {
    145                            VerbRole verb = (VerbRole) oe;
    146                            String th = verb.getPrettyWord(0);
    147                            String inf = verb.getPrettyWord(1);
    148                            String pp = verb.getPrettyPastPart();
    149                            iconRow.add(new Label(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/role.png")));
    150                            iconRow.add(new Label(
    151                                            "\"" + inf + "\" is a verb and represents a relation between things. " +
    152                                            "It represents the fact that certain things " + inf + " other things. " +
    153                                            "The third singular form is \"" + th + "\", the bare infinitive form is \"" + inf + "\", " +
    154                                            "and the past participle form is " + (pp == null ? "undefined" : "\"" + pp + "\"") + ".",
    155                                            Font.ITALIC
    156                                    ));
    157                            lexiconGrid.add(new SolidLabel("word class", Font.ITALIC + Font.BOLD, 11));
    158                            lexiconGrid.add(new SolidLabel("verb", Font.ITALIC));
    159                            lexiconGrid.add(new SolidLabel("third singular", Font.ITALIC + Font.BOLD, 11));
    160                            lexiconGrid.add(new SolidLabel(th));
    161                            lexiconGrid.add(new SolidLabel("bare infinitive", Font.ITALIC + Font.BOLD, 11));
    162                            lexiconGrid.add(new SolidLabel(inf));
    163                            lexiconGrid.add(new SolidLabel("past participle", Font.ITALIC + Font.BOLD, 11));
    164                            lexiconGrid.add(new SolidLabel(pp));
    165                    } else if (oe instanceof OfRole) {
    166                            OfRole of = (OfRole) oe;
    167                            iconRow.add(new Label(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/role.png")));
    168                            iconRow.add(new Label(
    169                                            "\"" + of.getPrettyNoun() + " of\" is an of-construct and represents a relation between things. " +
    170                                            "It represents the fact that certain things are a " + of.getPrettyNoun() + " of other things. " +
    171                                            "It consists of the noun \"" + of.getPrettyNoun() + "\" plus the preposition \"of\".",
    172                                            Font.ITALIC
    173                                    ));
    174                            lexiconGrid.add(new SolidLabel("word class", Font.ITALIC + Font.BOLD, 11));
    175                            lexiconGrid.add(new SolidLabel("of-construct", Font.ITALIC));
    176                            lexiconGrid.add(new SolidLabel("noun", Font.ITALIC + Font.BOLD, 11));
    177                            lexiconGrid.add(new SolidLabel(of.getPrettyNoun()));
    178                    } else if (oe instanceof TrAdjRole) {
    179                            TrAdjRole tradj = (TrAdjRole) oe;
    180                            iconRow.add(new Label(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/role.png")));
    181                            iconRow.add(new Label(
    182                                            "\"" + tradj.getPrettyWord(0) + "\" is a transitive adjective and represents a relation between things. " +
    183                                            "It represents the fact that certain things are " + tradj.getPrettyWord(0) + " other things. ",
    184                                            Font.ITALIC
    185                                    ));
    186                            lexiconGrid.add(new SolidLabel("word class", Font.ITALIC + Font.BOLD, 11));
    187                            lexiconGrid.add(new SolidLabel("transitive adjective", Font.ITALIC));
    188                            lexiconGrid.add(new SolidLabel("word", Font.ITALIC + Font.BOLD, 11));
    189                            lexiconGrid.add(new SolidLabel(tradj.getPrettyWord(0)));
    190                    }
    191
    192                    textColumn.add(new VSpace());
    193
    194                    Row headButtonRow = new Row();
    195                    headButtonRow.add(editButton);
    196                    headButtonRow.add(new HSpace());
    197                    headButtonRow.add(delButton);
    198                    textColumn.add(headButtonRow);
    199            }
    200
    201            public void actionPerformed(ActionEvent e) {
    202                    Wiki wiki = getWiki();
    203                    if ("Article".equals(e.getActionCommand())) {
    204                            log("page", "pressed: article");
    205                            wiki.showPage(page);
    206                    } else if ("References".equals(e.getActionCommand())) {
    207                            log("page", "pressed: references");
    208                            wiki.showPage(new ReferencesPage(page));
    209                    } else if ("Individuals".equals(e.getActionCommand())) {
    210                            log("page", "pressed: individuals");
    211                            wiki.showPage(new IndividualsPage((ConceptPage) page));
    212                    } else if ("Hierarchy".equals(e.getActionCommand())) {
    213                            log("page", "pressed: hierarchy");
    214                            wiki.showPage(new HierarchyPage((ConceptPage) page));
    215                    } else if ("Assignments".equals(e.getActionCommand())) {
    216                            log("page", "pressed: assignments");
    217                            wiki.showPage(new AssignmentsPage((IndividualPage) page));
    218                    } else if (e.getSource() == delButton) {
    219                            log("page", "pressed: delete");
    220                            OntologyElement oe = page.getOntologyElement();
    221                            List<Sentence> references = wiki.getOntology().getReferences(oe);
    222                            for (Sentence s : oe.getSentences()) {
    223                                    references.remove(s);
    224                            }
    225                            if (!references.isEmpty()) {
    226                                    log("page", "error: cannot delete article with references");
    227                                    wiki.showWindow(new MessageWindow("Error", "This article cannot be deleted, because other articles refer to it.", null, this, "OK"));
    228                            } else {
    229                                    log("page", "delete confirmation");
    230                                    wiki.showWindow(new MessageWindow("Delete", "Do you really want to delete this word and all the content of its article?", null, this, "Yes", "No"));
    231                            }
    232                    } else if (e.getSource() instanceof MessageWindow && e.getActionCommand().equals("Yes")) {
    233                            log("page", "delete confirmed");
    234                            wiki.getOntology().remove(page.getOntologyElement());
    235                            wiki.showStartPage();
    236                    } else if (e.getSource() == editButton) {
    237                            log("page", "pressed: edit word");
    238                            if (page instanceof ConceptPage) {
    239                                    wiki.showWindow(NounForm.createEditorWindow((NounConcept) page.getOntologyElement(), wiki));
    240                            } else if (page instanceof IndividualPage) {
    241                                    wiki.showWindow(ProperNameForm.createEditorWindow((Individual) page.getOntologyElement(), wiki));
    242                            } else if (page.getOntologyElement() instanceof OfRole) {
    243                                    wiki.showWindow(NounOfForm.createEditorWindow((OfRole) page.getOntologyElement(), wiki));
    244                            } else if (page.getOntologyElement() instanceof VerbRole) {
    245                                    wiki.showWindow(VerbForm.createEditorWindow((VerbRole) page.getOntologyElement(), wiki));
    246                            } else if (page.getOntologyElement() instanceof TrAdjRole) {
    247                                    wiki.showWindow(TrAdjForm.createEditorWindow((TrAdjRole) page.getOntologyElement(), wiki));
    248                            }
    249                    }
    250            }
    251
    252            public boolean equals(Object obj) {
    253                    if (obj instanceof WordPage) {
    254                            return page.equals(((WordPage) obj).page);
    255                    }
    256                    return false;
    257            }
    258
    259            public boolean isExpired() {
    260                    return page.isExpired();
    261            }
    262
    263            public String toString() {
    264                    return "-WORD- " + page.getOntologyElement().getWord();
    265            }
    266
    267    }