001
014
015 package com.liferay.portlet.dynamicdatalists.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.upload.UploadPortletRequest;
019 import com.liferay.portal.kernel.util.Constants;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.service.ServiceContext;
024 import com.liferay.portal.service.ServiceContextFactory;
025 import com.liferay.portal.struts.PortletAction;
026 import com.liferay.portal.theme.ThemeDisplay;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portal.util.WebKeys;
029 import com.liferay.portlet.documentlibrary.FileSizeException;
030 import com.liferay.portlet.dynamicdatalists.NoSuchRecordException;
031 import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
032 import com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalServiceUtil;
033 import com.liferay.portlet.dynamicdatalists.util.DDLUtil;
034 import com.liferay.portlet.dynamicdatamapping.StorageFieldRequiredException;
035
036 import javax.portlet.ActionRequest;
037 import javax.portlet.ActionResponse;
038 import javax.portlet.PortletConfig;
039 import javax.portlet.RenderRequest;
040 import javax.portlet.RenderResponse;
041
042 import org.apache.struts.action.ActionForm;
043 import org.apache.struts.action.ActionForward;
044 import org.apache.struts.action.ActionMapping;
045
046
050 public class EditRecordAction extends PortletAction {
051
052 @Override
053 public void processAction(
054 ActionMapping actionMapping, ActionForm actionForm,
055 PortletConfig portletConfig, ActionRequest actionRequest,
056 ActionResponse actionResponse)
057 throws Exception {
058
059 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
060
061 try {
062 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
063 updateRecord(actionRequest);
064 }
065 else if (cmd.equals(Constants.DELETE)) {
066 deleteRecord(actionRequest);
067 }
068 else if (cmd.equals(Constants.REVERT)) {
069 revertRecordVersion(actionRequest);
070 }
071 else if (cmd.equals(Constants.TRANSLATE)) {
072 updateRecord(actionRequest);
073
074 setForward(
075 actionRequest,
076 "portlet.dynamic_data_lists.update_translation_redirect");
077 }
078
079 if (Validator.isNotNull(cmd) && !cmd.equals(Constants.TRANSLATE)) {
080 sendRedirect(actionRequest, actionResponse);
081 }
082 }
083 catch (Exception e) {
084 if (e instanceof NoSuchRecordException ||
085 e instanceof PrincipalException) {
086
087 SessionErrors.add(actionRequest, e.getClass());
088
089 setForward(actionRequest, "portlet.dynamic_data_lists.error");
090 }
091 else if (e instanceof FileSizeException ||
092 e instanceof StorageFieldRequiredException) {
093
094 SessionErrors.add(actionRequest, e.getClass());
095 }
096 else {
097 throw e;
098 }
099 }
100 }
101
102 @Override
103 public ActionForward render(
104 ActionMapping actionMapping, ActionForm actionForm,
105 PortletConfig portletConfig, RenderRequest renderRequest,
106 RenderResponse renderResponse)
107 throws Exception {
108
109 try {
110 ActionUtil.getRecord(renderRequest);
111 }
112 catch (Exception e) {
113 if (e instanceof NoSuchRecordException ||
114 e instanceof PrincipalException) {
115
116 SessionErrors.add(renderRequest, e.getClass());
117
118 return actionMapping.findForward(
119 "portlet.dynamic_data_lists.error");
120 }
121 else {
122 throw e;
123 }
124 }
125
126 return actionMapping.findForward(
127 getForward(
128 renderRequest, "portlet.dynamic_data_lists.edit_record"));
129 }
130
131 protected void deleteRecord(ActionRequest actionRequest) throws Exception {
132 long recordId = ParamUtil.getLong(actionRequest, "recordId");
133
134 DDLRecordLocalServiceUtil.deleteRecord(recordId);
135 }
136
137 protected void revertRecordVersion(ActionRequest actionRequest)
138 throws Exception {
139
140 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
141 WebKeys.THEME_DISPLAY);
142
143 long recordId = ParamUtil.getLong(actionRequest, "recordId");
144
145 String version = ParamUtil.getString(actionRequest, "version");
146
147 ServiceContext serviceContext = ServiceContextFactory.getInstance(
148 DDLRecord.class.getName(), actionRequest);
149
150 DDLRecordLocalServiceUtil.revertRecordVersion(
151 themeDisplay.getUserId(), recordId, version, serviceContext);
152 }
153
154 protected DDLRecord updateRecord(ActionRequest actionRequest)
155 throws Exception {
156
157 UploadPortletRequest uploadPortletRequest =
158 PortalUtil.getUploadPortletRequest(actionRequest);
159
160 ServiceContext serviceContext = ServiceContextFactory.getInstance(
161 DDLRecord.class.getName(), uploadPortletRequest);
162
163 long recordId = ParamUtil.getLong(serviceContext, "recordId");
164
165 long recordSetId = ParamUtil.getLong(serviceContext, "recordSetId");
166
167 return DDLUtil.updateRecord(
168 recordId, recordSetId, true, serviceContext);
169 }
170
171 }