1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.forum.app.action;
35
36 import info.magnolia.cms.util.ContentUtil;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.module.forum.DefaultForumManager;
40 import info.magnolia.module.forum.ForumManager;
41 import info.magnolia.ui.admincentral.dialog.action.SaveDialogAction;
42 import info.magnolia.ui.api.action.ActionExecutionException;
43 import info.magnolia.ui.form.EditorCallback;
44 import info.magnolia.ui.form.EditorValidator;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
46
47 import javax.inject.Inject;
48 import javax.jcr.Node;
49 import javax.jcr.RepositoryException;
50
51 import org.apache.commons.lang3.StringUtils;
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55 import com.vaadin.v7.data.Item;
56
57
58
59
60
61
62
63 public class SaveDialogNewMessageAction extends SaveDialogAction<SaveDialogNewMessageActionDefinition> {
64
65 private static final Logger log = LoggerFactory.getLogger(SaveDialogNewMessageAction.class);
66
67 @Inject
68 public SaveDialogNewMessageAction(SaveDialogNewMessageActionDefinition definition, Item item, EditorValidator validator, EditorCallback callback) {
69 super(definition, item, validator, callback);
70 }
71
72 @Override
73 public void execute() throws ActionExecutionException {
74
75 validator.showValidation(true);
76 if (validator.isValid()) {
77 try {
78 ForumManager forumManager = ForumManager.Factory.getInstance();
79 final Node node = (Node) ((JcrItemAdapter) item).getJcrItem();
80 String threadId = NodeUtil.isNodeType(node, DefaultForumManager.THREAD_NODETYPE) ? node.getIdentifier() : forumManager.getThreadFromMessage(ContentUtil.asContent(node)).getUUID();
81
82 String inReplyToId = null;
83 if (item.getItemProperty("inReplyTo") != null && StringUtils.isNotBlank(String.valueOf(item.getItemProperty("inReplyTo").getValue()))) {
84 inReplyToId = String.valueOf(item.getItemProperty("inReplyTo").getValue());
85 } else if (NodeUtil.isNodeType(node, DefaultForumManager.MESSAGE_NODETYPE)) {
86 inReplyToId = node.getIdentifier();
87 }
88
89 String messageTitle = item.getItemProperty("title") != null ? String.valueOf(item.getItemProperty("title").getValue()) : null;
90 String messageText = item.getItemProperty("content") != null ? String.valueOf(item.getItemProperty("content").getValue()) : null;
91 String author = MgnlContext.getUser().getName();
92
93 forumManager.replyToThread(threadId, inReplyToId, messageTitle, messageText, author, false);
94 } catch (RepositoryException e) {
95 throw new ActionExecutionException(e);
96 }
97 callback.onSuccess(getDefinition().getName());
98
99 } else {
100 log.info("Validation error(s) occurred. No save performed.");
101 }
102 }
103 }