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 }