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
072 if (Validator.isNotNull(cmd)) {
073 sendRedirect(actionRequest, actionResponse);
074 }
075 }
076 catch (Exception e) {
077 if (e instanceof NoSuchRecordException ||
078 e instanceof PrincipalException) {
079
080 SessionErrors.add(actionRequest, e.getClass());
081
082 setForward(actionRequest, "portlet.dynamic_data_lists.error");
083 }
084 else if (e instanceof FileSizeException ||
085 e instanceof StorageFieldRequiredException) {
086
087 SessionErrors.add(actionRequest, e.getClass());
088 }
089 else {
090 throw e;
091 }
092 }
093 }
094
095 @Override
096 public ActionForward render(
097 ActionMapping actionMapping, ActionForm actionForm,
098 PortletConfig portletConfig, RenderRequest renderRequest,
099 RenderResponse renderResponse)
100 throws Exception {
101
102 try {
103 ActionUtil.getRecord(renderRequest);
104 }
105 catch (Exception e) {
106 if (e instanceof NoSuchRecordException ||
107 e instanceof PrincipalException) {
108
109 SessionErrors.add(renderRequest, e.getClass());
110
111 return actionMapping.findForward(
112 "portlet.dynamic_data_lists.error");
113 }
114 else {
115 throw e;
116 }
117 }
118
119 return actionMapping.findForward(
120 getForward(
121 renderRequest, "portlet.dynamic_data_lists.edit_record"));
122 }
123
124 protected void deleteRecord(ActionRequest actionRequest) throws Exception {
125 long recordId = ParamUtil.getLong(actionRequest, "recordId");
126
127 DDLRecordLocalServiceUtil.deleteRecord(recordId);
128 }
129
130 protected void revertRecordVersion(ActionRequest actionRequest)
131 throws Exception {
132
133 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
134 WebKeys.THEME_DISPLAY);
135
136 long recordId = ParamUtil.getLong(actionRequest, "recordId");
137
138 String version = ParamUtil.getString(actionRequest, "version");
139
140 ServiceContext serviceContext = ServiceContextFactory.getInstance(
141 DDLRecord.class.getName(), actionRequest);
142
143 DDLRecordLocalServiceUtil.revertRecordVersion(
144 themeDisplay.getUserId(), recordId, version, serviceContext);
145 }
146
147 protected DDLRecord updateRecord(ActionRequest actionRequest)
148 throws Exception {
149
150 UploadPortletRequest uploadPortletRequest =
151 PortalUtil.getUploadPortletRequest(actionRequest);
152
153 ServiceContext serviceContext = ServiceContextFactory.getInstance(
154 DDLRecord.class.getName(), uploadPortletRequest);
155
156 long recordId = ParamUtil.getLong(serviceContext, "recordId");
157
158 long recordSetId = ParamUtil.getLong(serviceContext, "recordSetId");
159
160 return DDLUtil.updateRecord(
161 recordId, recordSetId, false, serviceContext);
162 }
163
164 }