// 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.event.ActionEvent;
import nextapp.echo.app.event.ActionListener;
import ch.uzh.ifi.attempto.acewiki.core.Article;
import ch.uzh.ifi.attempto.acewiki.core.Comment;
import ch.uzh.ifi.attempto.acewiki.core.Statement;
import ch.uzh.ifi.attempto.echocomp.TextAreaWindow;
/**
* This class manages the comment editor. It creates the editor window and handles its
* responses.
*
* @author Tobias Kuhn
*/
public class CommentEditorHandler implements ActionListener {
private static final long serialVersionUID = 1156092885844135235L;
private TextAreaWindow textAreaWindow;
private Statement statement;
private ArticlePage page;
private boolean edit;
/**
* Creates a new comment editor handler, either to create a new comment or to edit an existing
* comment.
*
* @param statement The statement in front of which the new comment should be added (in the
* case of edit=false) or the comment that should be edited (in the case of edit=true).
* @param page The host page of the comment.
* @param edit true if an existing comment should be edited, or false if a new comment should
* be created.
*/
private CommentEditorHandler(Statement statement, ArticlePage page, boolean edit) {
this.statement = statement;
this.page = page;
this.edit = edit;
textAreaWindow = new TextAreaWindow(page.getWiki().getGUIText("acewiki_commeditor_title"), this);
textAreaWindow.setSize(600, 350);
if (edit) {
textAreaWindow.setText(((Comment) statement).getText());
}
}
/**
* Generates a new comment editor window for the creation of a new comment.
*
* @param followingStatement The statement in front of which the new sentences should be added,
* or null if the sentences should be added to the end of the article.
* @param page The host page into which the sentence should be added.
* @return A new preditor window.
*/
public static TextAreaWindow generateCreationWindow(Statement followingStatement,
ArticlePage page) {
CommentEditorHandler h = new CommentEditorHandler(followingStatement, page, false);
return h.getWindow();
}
/**
* Generates a new comment editor window for editing an existing comment.
*
* @param comment The comment that should be edited.
* @param page The host page which contains the sentence to be edited.
* @return A new preditor window.
*/
public static TextAreaWindow generateEditWindow(Comment comment, ArticlePage page) {
CommentEditorHandler h = new CommentEditorHandler(comment, page, true);
return h.getWindow();
}
private TextAreaWindow getWindow() {
return textAreaWindow;
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("OK")) {
Article article = page.getArticle();
Comment comment = article.getOntology().getStatementFactory()
.createComment(textAreaWindow.getText(), article);
if (edit) {
article.edit(statement, comment);
page.getWiki().updateStatement(statement, comment);
} else {
article.add(statement, comment);
}
page.update();
page.getWiki().removeWindow(textAreaWindow);
} else if (e.getActionCommand().equals("Cancel")) {
page.getWiki().removeWindow(textAreaWindow);
}
}
}