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 }