// 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 nextapp.echo.app.Color; import nextapp.echo.app.Column; import nextapp.echo.app.Component; import nextapp.echo.app.Extent; import nextapp.echo.app.Font; import nextapp.echo.app.Insets; import nextapp.echo.app.Row; import ch.uzh.ifi.attempto.acewiki.Wiki; import ch.uzh.ifi.attempto.acewiki.core.LanguageUtils; import ch.uzh.ifi.attempto.acewiki.core.OntologyElement; import ch.uzh.ifi.attempto.echocomp.Label; import ch.uzh.ifi.attempto.echocomp.Style; import ch.uzh.ifi.attempto.echocomp.VSpace; /** * This is the superclass of all page classes. It represents a wiki page of AceWiki. * * @author Tobias Kuhn */ public abstract class WikiPage extends Column { private static final long serialVersionUID = -1972548696966691981L; private Wiki wiki; private TabRow tabRow; /** * Initializes a new wiki page. * * @param wiki The wiki instance. */ public WikiPage(Wiki wiki) { this.wiki = wiki; setInsets(new Insets(0, 0, 0, 40)); } /** * Checks whether the page still exists and updates the page content. */ public final void update() { if (isExpired()) { removeAll(); add(new ErrorPage(wiki, wiki.getGUIText("acewiki_error_deletedpage"))); } else { doUpdate(); } } /** * Updates the page content. */ protected void doUpdate() {} /** * Returns the wiki instance this page belongs to. * * @return The wiki instance. */ public Wiki getWiki() { return wiki; } /** * Writes a log entry. * * @param type The type of the log entry. * @param text The log text. */ protected void log(String type, String text) { wiki.log(type, text); } /** * Checks if the page has expired. A page has expired it represents an ontology * element that has been deleted. * * @return true if the page has expired. */ public boolean isExpired() { return false; } public void removeAll() { super.removeAll(); } protected void setTabRow(TabRow tabRow) { if (tabRow == null || indexOf(this.tabRow) < 0) { add(tabRow, 0); add(new VSpace(20), 1); } else { remove(this.tabRow); add(tabRow, 0); } this.tabRow = tabRow; } /** * Adds a horizontal line to the page content. */ protected void addHorizontalLine() { Column horizontalLine = new Column(); horizontalLine.setInsets(new Insets(10, 0, 10, 0)); Column c = new Column(); c.setBackground(Color.DARKGRAY); c.setInsets(new Insets(0, 1, 0, 0)); horizontalLine.add(c); add(horizontalLine); } /** * Adds a headline to the page content. * * @param text The headline text (or the text key for localization). */ protected void addHeadline(String text) { addHeadline(text, null); } /** * Adds a headline to the page content. The component is shown after the headline text. * * @param text The headline text (or the text key for localization). * @param comp The component. */ protected void addHeadline(String text, Component comp) { Row headline = new Row(); headline.setInsets(new Insets(10, 10, 10, 0)); headline.setCellSpacing(new Extent(5)); Label title = new Label(wiki.getGUIText(text)); title.setFont(new Font(Style.fontTypeface, Font.ITALIC | Font.UNDERLINE, new Extent(13))); title.setLineWrap(false); headline.add(title); if (comp != null) { headline.add(comp); } add(headline); } /** * Returns the heading text for the given ontology element. * * @param oe The ontology element. * @return The heading. */ protected String getHeading(OntologyElement oe) { return LanguageUtils.getHeading(oe); } public abstract boolean equals(Object obj); }