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 ch.uzh.ifi.attempto.acewiki.Wiki; 018 import ch.uzh.ifi.attempto.acewiki.gui.Title; 019 import ch.uzh.ifi.attempto.echocomp.HSpace; 020 import ch.uzh.ifi.attempto.echocomp.Label; 021 import ch.uzh.ifi.attempto.echocomp.SmallButton; 022 import ch.uzh.ifi.attempto.echocomp.Style; 023 import ch.uzh.ifi.attempto.echocomp.VSpace; 024 import nextapp.echo2.app.Border; 025 import nextapp.echo2.app.Button; 026 import nextapp.echo2.app.Color; 027 import nextapp.echo2.app.Column; 028 import nextapp.echo2.app.Extent; 029 import nextapp.echo2.app.Font; 030 import nextapp.echo2.app.Insets; 031 import nextapp.echo2.app.Row; 032 import nextapp.echo2.app.event.ActionListener; 033 034 /** 035 * This is the superclass of all page classes. It represents a wiki page of AceWiki. 036 * 037 * @author Tobias Kuhn 038 */ 039 public abstract class WikiPage extends Column { 040 041 private Wiki wiki; 042 private Title title; 043 private Row tabRow; 044 045 /** 046 * Initializes a new wiki page. 047 * 048 * @param wiki The wiki instance. 049 * @param title The title component. 050 */ 051 public WikiPage(Wiki wiki, Title title) { 052 this.wiki = wiki; 053 this.title = title; 054 055 tabRow = new Row(); 056 tabRow.setInsets(new Insets(10, 0, 0, 0)); 057 add(tabRow); 058 add(new VSpace(20)); 059 add(title); 060 addHorizontalLine(); 061 } 062 063 /** 064 * Checks whether the page still exists and updates the page content. 065 */ 066 public final void update() { 067 if (isExpired()) { 068 removeAll(); 069 add(new ErrorPage(wiki, "This article does no longer exist.")); 070 } else { 071 doUpdate(); 072 } 073 } 074 075 /** 076 * Updates the page content. 077 */ 078 protected void doUpdate() {} 079 080 /** 081 * Returns the wiki instance this page belongs to. 082 * 083 * @return The wiki instance. 084 */ 085 public Wiki getWiki() { 086 return wiki; 087 } 088 089 /** 090 * Returns the title component. 091 * 092 * @return The title component. 093 */ 094 protected Title getTitle() { 095 return title; 096 } 097 098 /** 099 * Writes a log entry. 100 * 101 * @param type The type of the log entry. 102 * @param text The log text. 103 */ 104 protected void log(String type, String text) { 105 wiki.log(type, text); 106 } 107 108 /** 109 * Checks if the page has expired. A page has expired it represents an ontology 110 * element that has been deleted. 111 * 112 * @return true if the page has expired. 113 */ 114 public boolean isExpired() { 115 return false; 116 } 117 118 /** 119 * Adds a new tab to the tab row. 120 * 121 * @param tabName The name of the tab. 122 * @param actionCommand The action command that is given to the action event object. 123 * @param actionListener The actionlistener. 124 */ 125 protected void addTab(String tabName, String actionCommand, ActionListener actionListener) { 126 SmallButton b = new SmallButton(tabName, actionListener, true); 127 if (actionCommand != null) { 128 b.setActionCommand(actionCommand); 129 } 130 tabRow.add(b); 131 tabRow.add(new HSpace(8)); 132 tabRow.add(createTabSeparator()); 133 tabRow.add(new HSpace(8)); 134 } 135 136 /** 137 * Adds a new tab to the tab row. 138 * 139 * @param tabName The name of the tab. 140 * @param actionListener The actionlistener. 141 */ 142 protected void addTab(String tabName, ActionListener actionListener) { 143 addTab(tabName, null, actionListener); 144 } 145 146 /** 147 * Adds a new tab to the tab row that is currently selected. 148 * 149 * @param tabName The name of the tab. 150 */ 151 protected void addSelectedTab(String tabName) { 152 tabRow.add(new SmallButton(tabName, null, false)); 153 tabRow.add(new HSpace(8)); 154 tabRow.add(createTabSeparator()); 155 tabRow.add(new HSpace(8)); 156 } 157 158 private Button createTabSeparator() { 159 Button tabSeparator = new Button(); 160 tabSeparator.setBorder(new Border(1, Color.DARKGRAY, Border.STYLE_SOLID)); 161 tabSeparator.setHeight(new Extent(12)); 162 return tabSeparator; 163 } 164 165 /** 166 * Adds a horizontal line to the page content. 167 */ 168 protected void addHorizontalLine() { 169 Column horizontalLine = new Column(); 170 horizontalLine.setInsets(new Insets(10, 0, 10, 0)); 171 Column c = new Column(); 172 c.setBackground(Color.DARKGRAY); 173 c.setInsets(new Insets(0, 1, 0, 0)); 174 horizontalLine.add(c); 175 add(horizontalLine); 176 } 177 178 /** 179 * Adds a headline to the page content. 180 * 181 * @param text The headline text. 182 */ 183 protected void addHeadline(String text) { 184 Row headline = new Row(); 185 headline.setInsets(new Insets(10, 10, 0, 0)); 186 Label title = new Label(text); 187 title.setFont(new Font(Style.fontTypeface, Font.ITALIC | Font.UNDERLINE, new Extent(13))); 188 title.setLineWrap(false); 189 headline.add(title); 190 add(headline); 191 } 192 193 public abstract boolean equals(Object obj); 194 195 }