    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.ArrayList;
    018    import java.util.Collections;
    019
    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.Insets;
    025    import nextapp.echo2.app.Row;
    026    import nextapp.echo2.app.event.ActionEvent;
    027    import nextapp.echo2.app.event.ActionListener;
    028    import ch.uzh.ifi.attempto.acewiki.Wiki;
    029    import ch.uzh.ifi.attempto.acewiki.core.ontology.OntologyElement;
    030    import ch.uzh.ifi.attempto.acewiki.core.ontology.Sentence;
    031    import ch.uzh.ifi.attempto.acewiki.gui.IndexBar;
    032    import ch.uzh.ifi.attempto.acewiki.gui.TextRow;
    033    import ch.uzh.ifi.attempto.acewiki.gui.Title;
    034    import ch.uzh.ifi.attempto.acewiki.gui.WikiLink;
    035    import ch.uzh.ifi.attempto.echocomp.SolidLabel;
    036    import ch.uzh.ifi.attempto.echocomp.VSpace;
    037
    038    /**
    039     * This class represents a page that shows all references for a certain ontology element.
    040     *
    041     * @author Tobias Kuhn
    042     */
    043    public class ReferencesPage extends WikiPage implements ActionListener {
    044
    045            private static final long serialVersionUID = 1025665226113017153L;
    046
    047            private static final int pageSize = 15;
    048
    049            private ArticlePage page;
    050            private Column referenceColumn = new Column();
    051            private IndexBar indexBar;
    052            private ArrayList<Sentence> sentences;
    053            private int chosenPage = 0;
    054
    055            /**
    056             * Creates a new references page.
    057             *
    058             * @param page The main page that contains the article.
    059             */
    060            public ReferencesPage(ArticlePage page) {
    061                    super(page.getWiki(), new Title(page.getOntologyElement().getHeadword(), "- References"));
    062                    this.page = page;
    063
    064                    addTab("Article", this);
    065                    addTab(page.getOntologyElement().getType(), "Word", this);
    066                    addSelectedTab("References");
    067                    if (page instanceof ConceptPage) {
    068                            addTab("Individuals", this);
    069                            addTab("Hierarchy", this);
    070                    }
    071                    if (page instanceof IndividualPage) {
    072                            addTab("Assignments", this);
    073                    }
    074
    075                    add(new VSpace(18));
    076
    077                    indexBar = new IndexBar("Page:", 0, this);
    078                    add(indexBar);
    079
    080                    referenceColumn.setInsets(new Insets(10, 2, 5, 20));
    081                    referenceColumn.setCellSpacing(new Extent(2));
    082                    add(referenceColumn);
    083            }
    084
    085            protected void doUpdate() {
    086                    getTitle().setText(page.getOntologyElement().getHeadword());
    087                    referenceColumn.removeAll();
    088                    ArrayList<OntologyElement> ontologyElements = new ArrayList<OntologyElement>(getWiki().getOntologyElements());
    089                    sentences = new ArrayList<Sentence>();
    090                    Collections.sort(ontologyElements);
    091                    for (OntologyElement oe : ontologyElements) {
    092                            if (oe == page.getOntologyElement()) continue;
    093                            for (Sentence s : oe.getSentences()) {
    094                                    if (s.contains(page.getOntologyElement())) {
    095                                            sentences.add(s);
    096                                    }
    097                            }
    098                    }
    099                    if (sentences.size() == 0) {
    100                            indexBar.setVisible(false);
    101                            String hw = page.getOntologyElement().getHeadword();
    102                            referenceColumn.add(new SolidLabel("(no other article refers to '" + hw + "')", Font.ITALIC, 10));
    103                    } else {
    104                            int i = ((sentences.size()-1) / pageSize) + 1;
    105                            if (chosenPage > i) chosenPage = 0;
    106                            indexBar.setNumbers(i);
    107                            indexBar.setActiveButton(chosenPage);
    108                            updatePage();
    109                    }
    110            }
    111
    112            public void updatePage() {
    113                    referenceColumn.removeAll();
    114
    115                    indexBar.setVisible(sentences.size() > pageSize);
    116
    117                    int max = sentences.size();
    118                    if (max > (chosenPage + 1) * pageSize) max = (chosenPage + 1) * pageSize;
    119
    120                    OntologyElement oe = null;
    121                    for (int i = chosenPage * pageSize; i < max; i++) {
    122                            Sentence s = sentences.get(i);
    123                            if (oe != s.getOwner()) {
    124                                    oe = s.getOwner();
    125                                    Row r = new Row();
    126                                    Column c = new Column();
    127                                    c.add(new WikiLink(oe, getWiki()));
    128                                    Row line = new Row();
    129                                    line.setBackground(Color.DARKGRAY);
    130                                    line.setInsets(new Insets(0, 1, 0, 0));
    131                                    c.add(line);
    132                                    r.add(c);
    133                                    referenceColumn.add(new VSpace());
    134                                    referenceColumn.add(r);
    135                            }
    136                            Row r = new Row();
    137                            r.add(new TextRow(s, this));
    138                            referenceColumn.add(r);
    139                    }
    140            }
    141
    142            public void actionPerformed(ActionEvent e) {
    143                    Wiki wiki = getWiki();
    144                    if ("Article".equals(e.getActionCommand())) {
    145                            log("page", "pressed: article");
    146                            wiki.showPage(page);
    147                    } else if ("Word".equals(e.getActionCommand())) {
    148                            log("page", "pressed: word");
    149                            wiki.showPage(new WordPage(page));
    150                    } else if ("Individuals".equals(e.getActionCommand())) {
    151                            log("page", "pressed: individuals");
    152                            wiki.showPage(new IndividualsPage((ConceptPage) page));
    153                    } else if ("Hierarchy".equals(e.getActionCommand())) {
    154                            log("page", "pressed: hierarchy");
    155                            wiki.showPage(new HierarchyPage((ConceptPage) page));
    156                    } else if ("Assignments".equals(e.getActionCommand())) {
    157                            log("page", "pressed: assignments");
    158                            wiki.showPage(new AssignmentsPage((IndividualPage) page));
    159                    } else if (e.getSource() == indexBar) {
    160                            chosenPage = Integer.parseInt(e.getActionCommand()) - 1;
    161                            log("page", "pressed: page " + (chosenPage+1));
    162                            updatePage();
    163                    }
    164            }
    165
    166            public boolean equals(Object obj) {
    167                    if (obj instanceof ReferencesPage) {
    168                            return page.equals(((ReferencesPage) obj).page);
    169                    }
    170                    return false;
    171            }
    172
    173            public boolean isExpired() {
    174                    return page.isExpired();
    175            }
    176
    177            public String toString() {
    178                    return "-REF- " + page.getOntologyElement().getWord();
    179            }
    180
    181    }