// This file is part of AceWiki. // Copyright 2008-2013, AceWiki developers. // // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License as published by the Free Software Foundation, either version 3 of // the License, or (at your option) any later version. // // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If // not, see http://www.gnu.org/licenses/. package ch.uzh.ifi.attempto.acewiki.gui; import java.util.ArrayList; import java.util.List; import nextapp.echo.app.Color; import nextapp.echo.app.Column; import nextapp.echo.app.Extent; import nextapp.echo.app.Font; import nextapp.echo.app.Insets; import nextapp.echo.app.Row; import nextapp.echo.app.event.ActionEvent; import nextapp.echo.app.event.ActionListener; import ch.uzh.ifi.attempto.acewiki.Wiki; import ch.uzh.ifi.attempto.acewiki.core.Article; import ch.uzh.ifi.attempto.acewiki.core.LanguageUtils; import ch.uzh.ifi.attempto.acewiki.core.OntologyElement; import ch.uzh.ifi.attempto.acewiki.core.Sentence; import ch.uzh.ifi.attempto.echocomp.HSpace; import ch.uzh.ifi.attempto.echocomp.SolidLabel; import ch.uzh.ifi.attempto.echocomp.VSpace; /** * This class represents a page that shows all references for a certain ontology element. * * @author Tobias Kuhn */ public class ReferencesPage extends WikiPage implements ActionListener { private static final long serialVersionUID = 1025665226113017153L; private static final int pageSize = 50; private OntologyElement ontologyElement; private Column referenceColumn = new Column(); private IndexBar indexBar; private List<Sentence> sentences; private int chosenPage = 0; private Title title; /** * Creates a new references page. */ public ReferencesPage(OntologyElement ontologyElement, Wiki wiki) { super(wiki); this.ontologyElement = ontologyElement; title = new Title("", "", "", this); add(title); addHorizontalLine(); add(new VSpace(18)); indexBar = new IndexBar(0, this); add(indexBar); referenceColumn.setInsets(new Insets(10, 2, 5, 20)); referenceColumn.setCellSpacing(new Extent(2)); add(referenceColumn); } protected void doUpdate() { setTabRow(TabRow.getArticleTabRow(ontologyElement, TabRow.TAB_REFERENCES, getWiki())); title.setText(getHeading(ontologyElement)); title.setPostTitle("- " + getWiki().getGUIText("acewiki_page_references")); title.setTooltip(ontologyElement.getType()); referenceColumn.removeAll(); List<OntologyElement> ontologyElements = getWiki().getOntologyElements(); sentences = new ArrayList<Sentence>(); LanguageUtils.sortOntologyElements(ontologyElements); for (OntologyElement oe : ontologyElements) { if (oe == ontologyElement) continue; for (Sentence s : oe.getArticle().getSentences()) { if (s.contains(ontologyElement)) { sentences.add(s); } } } if (sentences.size() == 0) { indexBar.setVisible(false); referenceColumn.add(new SolidLabel( getWiki().getGUIText("acewiki_references_empty"), Font.ITALIC, 10 )); } else { int i = ((sentences.size()-1) / pageSize) + 1; if (chosenPage > i) chosenPage = 0; indexBar.setNumbers(i); indexBar.setActiveButton(chosenPage); updatePage(); } } private void updatePage() { referenceColumn.removeAll(); indexBar.setVisible(sentences.size() > pageSize); int max = sentences.size(); if (max > (chosenPage + 1) * pageSize) max = (chosenPage + 1) * pageSize; Article a = null; for (int i = chosenPage * pageSize; i < max; i++) { Sentence s = sentences.get(i); if (a != s.getArticle()) { a = s.getArticle(); Row r = new Row(); Column c = new Column(); c.add(new WikiLink(a.getOntologyElement(), getWiki())); Row line = new Row(); line.setBackground(Color.DARKGRAY); line.setInsets(new Insets(0, 1, 0, 0)); c.add(line); r.add(c); if (i > 0 && sentences.get(i-1).getArticle() == a) { r.add(new HSpace()); r.add(new SolidLabel(getWiki().getGUIText("acewiki_list_continued"), Font.ITALIC, 10)); } referenceColumn.add(new VSpace()); referenceColumn.add(r); } Row r = new Row(); r.add(new SentenceComponent(s, this)); referenceColumn.add(r); } } public void actionPerformed(ActionEvent e) { if (e.getSource() == indexBar) { chosenPage = Integer.parseInt(e.getActionCommand()) - 1; log("page", "pressed: page " + (chosenPage+1)); updatePage(); } else if (e.getSource() == title) { getWiki().showEditorWindow(ontologyElement); } } public boolean equals(Object obj) { if (obj instanceof ReferencesPage) { return ontologyElement.equals(((ReferencesPage) obj).ontologyElement); } return false; } public boolean isExpired() { return !getWiki().getOntology().contains(ontologyElement); } public String toString() { return "-REF- " + ontologyElement.getWord(); } }