ramblings/oxygen/js-debugger-include/src-java/simple/documentation/framework/operations/highlight/ReviewParaOperation.java

108 lines
4.0 KiB
Java

package simple.documentation.framework.operations.highlight;
import java.awt.Component;
import java.util.LinkedHashMap;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import ro.sync.ecss.extensions.api.ArgumentDescriptor;
import ro.sync.ecss.extensions.api.ArgumentsMap;
import ro.sync.ecss.extensions.api.AuthorAccess;
import ro.sync.ecss.extensions.api.AuthorOperation;
import ro.sync.ecss.extensions.api.AuthorOperationException;
import ro.sync.ecss.extensions.api.highlights.AuthorHighlighter;
import ro.sync.ecss.extensions.api.highlights.AuthorPersistentHighlighter;
import ro.sync.ecss.extensions.api.highlights.ColorHighlightPainter;
import ro.sync.ecss.extensions.api.node.AuthorNode;
import ro.sync.ecss.extensions.commons.ui.OKCancelDialog;
import ro.sync.exml.view.graphics.Color;
/**
* Operation used to highlight a paragraph as reviewed.
*/
public class ReviewParaOperation implements AuthorOperation {
/**
* Highlight author.
*/
static final String AUTHOR = "author";
/**
* Highlight ID.
*/
static final String ID = "id";
/**
* Highlight comment.
*/
static final String COMMENT = "comment";
/**
* @see ro.sync.ecss.extensions.api.AuthorOperation#doOperation(ro.sync.ecss.extensions.api.AuthorAccess, ro.sync.ecss.extensions.api.ArgumentsMap)
*/
public void doOperation(AuthorAccess authorAccess, ArgumentsMap map) throws IllegalArgumentException,
AuthorOperationException {
// Highlight the selected paragraph if any.
AuthorNode selectedNode = authorAccess.getEditorAccess().getFullySelectedNode();
if (selectedNode != null) {
// Show dialog for adding highlight comment
AuthorPersistentHighlighter persistentHighlighter = authorAccess.getEditorAccess().getPersistentHighlighter();
AuthorHighlighter highlighter = authorAccess.getEditorAccess().getHighlighter();
EditHighlightsDialog commentDlg = new EditHighlightsDialog(
(JFrame) authorAccess.getWorkspaceAccess().getParentFrame(),
"Review Paragraph",
true,
null,
authorAccess);
commentDlg.showDialog();
if (commentDlg.getResult() == OKCancelDialog.RESULT_OK) {
// Get author name and timestamp.
String authorName = authorAccess.getReviewController().getReviewerAuthorName();
String timestamp = authorAccess.getReviewController().getCurrentTimestamp();
// Compose highlight properties
LinkedHashMap<String, String> properties = new LinkedHashMap<String, String>();
properties.put(ID, timestamp);
properties.put(AUTHOR, authorName);
String comment = commentDlg.getComment();
properties.put(COMMENT, comment);
int startOffset = selectedNode.getStartOffset();
int endOffset = selectedNode.getEndOffset();
if (comment != null && comment.trim().length() > 0) {
// Add a persistent highlight
persistentHighlighter.addHighlight(startOffset, endOffset, properties);
} else {
// Add non-persistent highlight
ColorHighlightPainter painter = new ColorHighlightPainter();
painter.setTextForegroundColor(Color.COLOR_RED_DARKER);
try {
highlighter.addHighlight(startOffset, endOffset, painter, null);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
} else {
JOptionPane.showMessageDialog(
(Component) authorAccess.getWorkspaceAccess().getParentFrame(),
"Select the whole paragraph!!!");
}
}
/**
* @see ro.sync.ecss.extensions.api.Extension#getDescription()
*/
public String getDescription() {
return "Review selected paragraph.";
}
/**
* @see ro.sync.ecss.extensions.api.AuthorOperation#getArguments()
*/
public ArgumentDescriptor[] getArguments() {
return null;
}
}