001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.acewiki.gui;
016
017 import nextapp.echo.app.event.ActionEvent;
018 import nextapp.echo.app.event.ActionListener;
019 import ch.uzh.ifi.attempto.acewiki.core.Article;
020 import ch.uzh.ifi.attempto.acewiki.core.Comment;
021 import ch.uzh.ifi.attempto.acewiki.core.Statement;
022 import ch.uzh.ifi.attempto.echocomp.TextAreaWindow;
023
024 /**
025 * This class manages the comment editor. It creates the editor window and handles its
026 * responses.
027 *
028 * @author Tobias Kuhn
029 */
030 public class CommentEditorHandler implements ActionListener {
031
032 private static final long serialVersionUID = 1156092885844135235L;
033
034 private TextAreaWindow textAreaWindow;
035 private Statement statement;
036 private ArticlePage page;
037 private boolean edit;
038
039 /**
040 * Creates a new comment editor handler, either to create a new comment or to edit an existing
041 * comment.
042 *
043 * @param statement The statement in front of which the new comment should be added (in the
044 * case of edit=false) or the comment that should be edited (in the case of edit=true).
045 * @param page The host page of the comment.
046 * @param edit true if an existing comment should be edited, or false if a new comment should
047 * be created.
048 */
049 private CommentEditorHandler(Statement statement, ArticlePage page, boolean edit) {
050 this.statement = statement;
051 this.page = page;
052 this.edit = edit;
053
054 textAreaWindow = new TextAreaWindow("Comment Editor", this);
055 textAreaWindow.setSize(600, 350);
056 if (edit) {
057 textAreaWindow.setText(((Comment) statement).getText());
058 }
059 }
060
061 /**
062 * Generates a new comment editor window for the creation of a new comment.
063 *
064 * @param followingStatement The statement in front of which the new sentences should be added,
065 * or null if the sentences should be added to the end of the article.
066 * @param page The host page into which the sentence should be added.
067 * @return A new preditor window.
068 */
069 public static TextAreaWindow generateCreationWindow(Statement followingStatement,
070 ArticlePage page) {
071 CommentEditorHandler h = new CommentEditorHandler(followingStatement, page, false);
072 return h.getWindow();
073 }
074
075 /**
076 * Generates a new comment editor window for editing an existing comment.
077 *
078 * @param comment The comment that should be edited.
079 * @param page The host page which contains the sentence to be edited.
080 * @return A new preditor window.
081 */
082 public static TextAreaWindow generateEditWindow(Comment comment, ArticlePage page) {
083 CommentEditorHandler h = new CommentEditorHandler(comment, page, true);
084 return h.getWindow();
085 }
086
087 private TextAreaWindow getWindow() {
088 return textAreaWindow;
089 }
090
091 public void actionPerformed(ActionEvent e) {
092 if (e.getActionCommand().equals("OK")) {
093 Article article = page.getArticle();
094 Comment comment = article.getOntology().getStatementFactory()
095 .createComment(textAreaWindow.getText(), article);
096 if (edit) {
097 article.edit(statement, comment);
098 } else {
099 article.add(statement, comment);
100 }
101 page.update();
102 page.getWiki().removeWindow(textAreaWindow);
103 } else if (e.getActionCommand().equals("Cancel")) {
104 page.getWiki().removeWindow(textAreaWindow);
105 }
106 }
107
108 }