    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 nextapp.echo2.app.Column;
    018    import nextapp.echo2.app.Extent;
    019    import nextapp.echo2.app.Font;
    020    import nextapp.echo2.app.Insets;
    021    import nextapp.echo2.app.Row;
    022    import nextapp.echo2.app.event.ActionEvent;
    023    import nextapp.echo2.app.event.ActionListener;
    024    import ch.uzh.ifi.attempto.acewiki.Wiki;
    025    import ch.uzh.ifi.attempto.acewiki.core.ontology.Concept;
    026    import ch.uzh.ifi.attempto.acewiki.core.ontology.Individual;
    027    import ch.uzh.ifi.attempto.acewiki.core.ontology.OntologyElement;
    028    import ch.uzh.ifi.attempto.acewiki.core.ontology.Role;
    029    import ch.uzh.ifi.attempto.acewiki.core.ontology.Sentence;
    030    import ch.uzh.ifi.attempto.acewiki.gui.TextRow;
    031    import ch.uzh.ifi.attempto.acewiki.gui.Title;
    032    import ch.uzh.ifi.attempto.acewiki.gui.editor.SentenceEditorHandler;
    033    import ch.uzh.ifi.attempto.echocomp.SmallButton;
    034    import ch.uzh.ifi.attempto.echocomp.SolidLabel;
    035
    036    /**
    037     * This class stands for a wiki page that represents an ontology element and shows the
    038     * article of this ontology element.
    039     *
    040     * @author Tobias Kuhn
    041     */
    042    public abstract class ArticlePage extends WikiPage implements ActionListener {
    043
    044            private Column textColumn = new Column();
    045            private SmallButton addButton = new SmallButton("add...", this);
    046
    047            /**
    048             * Creates a new article page.
    049             *
    050             * @param wiki The wiki instance.
    051             * @param ontologyElement The ontology element whose article should be shown.
    052             */
    053            protected ArticlePage(Wiki wiki, OntologyElement ontologyElement) {
    054                    super(wiki, new Title(ontologyElement.getHeadword()));
    055
    056                    addSelectedTab("Article");
    057                    addTab(ontologyElement.getType(), "Word", this);
    058                    addTab("References", this);
    059
    060                    textColumn.setInsets(new Insets(10, 20, 0, 50));
    061                    textColumn.setCellSpacing(new Extent(2));
    062                    add(textColumn);
    063            }
    064
    065            /**
    066             * Creates an article page for the given ontology element.
    067             *
    068             * @param oe The ontology element for which an article page should be created.
    069             * @param wiki The wiki instance.
    070             * @return The new article page.
    071             */
    072            public static ArticlePage create(OntologyElement oe, Wiki wiki) {
    073                    if (oe instanceof Individual) {
    074                            return new IndividualPage((Individual) oe, wiki);
    075                    } else if (oe instanceof Concept) {
    076                            return new ConceptPage((Concept) oe, wiki);
    077                    } else if (oe instanceof Role) {
    078                            return new RolePage((Role) oe, wiki);
    079                    }
    080                    return null;
    081            }
    082
    083            /**
    084             * Returns the ontology element of this article page.
    085             *
    086             * @return The ontology element.
    087             */
    088            public abstract OntologyElement getOntologyElement();
    089
    090            /**
    091             * This method is called when the user requests to edit a sentence of the article. This method
    092             * opens then the respective sentence editor window.
    093             *
    094             * @param sentence The sentence of the article that should be edited.
    095             */
    096            public abstract void edit(Sentence sentence);
    097
    098            protected void doUpdate() {
    099                    textColumn.removeAll();
    100
    101                    for (Sentence s : getOntologyElement().getSentences()) {
    102                            textColumn.add(new TextRow(s, this));
    103                    }
    104
    105                    if (getOntologyElement().getSentences().size() == 0) {
    106                            textColumn.add(new SolidLabel("(article is empty)", Font.ITALIC, 10));
    107                    }
    108
    109                    Row addButtonRow = new Row();
    110                    addButtonRow.add(addButton);
    111                    textColumn.add(addButtonRow);
    112            }
    113
    114            public boolean equals(Object obj) {
    115                    if (obj instanceof ArticlePage) {
    116                            return getOntologyElement() == ((ArticlePage) obj).getOntologyElement();
    117                    }
    118                    return false;
    119            }
    120
    121            public String toString() {
    122                    return getOntologyElement().getWord();
    123            }
    124
    125            public boolean isExpired() {
    126                    return !getWiki().getOntology().contains(getOntologyElement());
    127            }
    128
    129            public void actionPerformed(ActionEvent e) {
    130                    if (e.getSource() == addButton) {
    131                            log("page", "pressed: add");
    132                            getWiki().showWindow(SentenceEditorHandler.generatePreditorAddWindow(null, this));
    133                    } else if ("References".equals(e.getActionCommand())) {
    134                            log("page", "pressed: references");
    135                            getWiki().showPage(new ReferencesPage(this));
    136                    } else if ("Word".equals(e.getActionCommand())) {
    137                            log("page", "pressed: word");
    138                            getWiki().showPage(new WordPage(this));
    139                    }
    140            }
    141
    142    }