1
22
23 package com.liferay.portlet.messageboards.action;
24
25 import com.liferay.documentlibrary.FileNameException;
26 import com.liferay.documentlibrary.FileSizeException;
27 import com.liferay.portal.kernel.servlet.SessionErrors;
28 import com.liferay.portal.kernel.util.Constants;
29 import com.liferay.portal.kernel.util.ParamUtil;
30 import com.liferay.portal.security.auth.PrincipalException;
31 import com.liferay.portal.service.ServiceContext;
32 import com.liferay.portal.service.ServiceContextFactory;
33 import com.liferay.portal.struts.PortletAction;
34 import com.liferay.portal.util.PortalUtil;
35 import com.liferay.portlet.ActionResponseImpl;
36 import com.liferay.portlet.messageboards.MessageBodyException;
37 import com.liferay.portlet.messageboards.MessageSubjectException;
38 import com.liferay.portlet.messageboards.NoSuchMessageException;
39 import com.liferay.portlet.messageboards.RequiredMessageException;
40 import com.liferay.portlet.messageboards.model.MBMessage;
41 import com.liferay.portlet.messageboards.service.MBMessageServiceUtil;
42
43 import javax.portlet.ActionRequest;
44 import javax.portlet.ActionResponse;
45 import javax.portlet.PortletConfig;
46
47 import org.apache.struts.action.ActionForm;
48 import org.apache.struts.action.ActionMapping;
49
50
55 public class EditDiscussionAction extends PortletAction {
56
57 public void processAction(
58 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
59 ActionRequest actionRequest, ActionResponse actionResponse)
60 throws Exception {
61
62 ActionResponseImpl actionResponseImpl =
63 (ActionResponseImpl)actionResponse;
64
65 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
66
67 try {
68 String redirect = ParamUtil.getString(actionRequest, "redirect");
69
70 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
71 MBMessage message = updateMessage(actionRequest);
72
73 redirect +=
74 "#" + actionResponseImpl.getNamespace() + "messageScroll" +
75 message.getMessageId();
76 }
77 else if (cmd.equals(Constants.DELETE)) {
78 deleteMessage(actionRequest);
79 }
80
81 sendRedirect(actionRequest, actionResponse, redirect);
82 }
83 catch (Exception e) {
84 if (e instanceof NoSuchMessageException ||
85 e instanceof PrincipalException ||
86 e instanceof RequiredMessageException) {
87
88 SessionErrors.add(actionRequest, e.getClass().getName());
89
90 setForward(actionRequest, "portlet.message_boards.error");
91 }
92 else if (e instanceof FileNameException ||
93 e instanceof FileSizeException ||
94 e instanceof MessageBodyException ||
95 e instanceof MessageSubjectException) {
96
97 SessionErrors.add(actionRequest, e.getClass().getName());
98
99 sendRedirect(actionRequest, actionResponse);
100 }
101 else {
102 throw e;
103 }
104 }
105 }
106
107 protected void deleteMessage(ActionRequest actionRequest) throws Exception {
108 long groupId = PortalUtil.getScopeGroupId(actionRequest);
109 String className = ParamUtil.getString(actionRequest, "className");
110 long classPK = ParamUtil.getLong(actionRequest, "classPK");
111
112 long messageId = ParamUtil.getLong(actionRequest, "messageId");
113
114 MBMessageServiceUtil.deleteDiscussionMessage(
115 groupId, className, classPK, messageId);
116 }
117
118 protected boolean isCheckMethodOnProcessAction() {
119 return _CHECK_METHOD_ON_PROCESS_ACTION;
120 }
121
122 protected MBMessage updateMessage(ActionRequest actionRequest)
123 throws Exception {
124
125 String className = ParamUtil.getString(actionRequest, "className");
126 long classPK = ParamUtil.getLong(actionRequest, "classPK");
127
128 long messageId = ParamUtil.getLong(actionRequest, "messageId");
129
130 long threadId = ParamUtil.getLong(actionRequest, "threadId");
131 long parentMessageId = ParamUtil.getLong(
132 actionRequest, "parentMessageId");
133 String subject = ParamUtil.getString(actionRequest, "subject");
134 String body = ParamUtil.getString(actionRequest, "body");
135
136 ServiceContext serviceContext = ServiceContextFactory.getInstance(
137 MBMessage.class.getName(), actionRequest);
138
139 MBMessage message = null;
140
141 if (messageId <= 0) {
142
143
145 message = MBMessageServiceUtil.addDiscussionMessage(
146 className, classPK, threadId, parentMessageId, subject, body,
147 serviceContext);
148 }
149 else {
150
151
153 message = MBMessageServiceUtil.updateDiscussionMessage(
154 className, classPK, messageId, subject, body, serviceContext);
155 }
156
157 return message;
158 }
159
160 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
161
162 }