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.util.PortalUtil;
027 import com.liferay.portlet.documentlibrary.FileSizeException;
028 import com.liferay.portlet.dynamicdatalists.NoSuchRecordException;
029 import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
030 import com.liferay.portlet.dynamicdatalists.service.DDLRecordServiceUtil;
031 import com.liferay.portlet.dynamicdatalists.util.DDLUtil;
032 import com.liferay.portlet.dynamicdatamapping.StorageFieldRequiredException;
033
034 import javax.portlet.ActionRequest;
035 import javax.portlet.ActionResponse;
036 import javax.portlet.PortletConfig;
037 import javax.portlet.RenderRequest;
038 import javax.portlet.RenderResponse;
039
040 import org.apache.struts.action.ActionForm;
041 import org.apache.struts.action.ActionForward;
042 import org.apache.struts.action.ActionMapping;
043
044
048 public class EditRecordAction extends PortletAction {
049
050 @Override
051 public void processAction(
052 ActionMapping actionMapping, ActionForm actionForm,
053 PortletConfig portletConfig, ActionRequest actionRequest,
054 ActionResponse actionResponse)
055 throws Exception {
056
057 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
058
059 try {
060 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
061 updateRecord(actionRequest);
062 }
063 else if (cmd.equals(Constants.DELETE)) {
064 deleteRecord(actionRequest);
065 }
066 else if (cmd.equals(Constants.REVERT)) {
067 revertRecord(actionRequest);
068 }
069
070 if (Validator.isNotNull(cmd)) {
071 sendRedirect(actionRequest, actionResponse);
072 }
073 }
074 catch (Exception e) {
075 if (e instanceof NoSuchRecordException ||
076 e instanceof PrincipalException) {
077
078 SessionErrors.add(actionRequest, e.getClass());
079
080 setForward(actionRequest, "portlet.dynamic_data_lists.error");
081 }
082 else if (e instanceof FileSizeException ||
083 e instanceof StorageFieldRequiredException) {
084
085 SessionErrors.add(actionRequest, e.getClass());
086 }
087 else {
088 throw e;
089 }
090 }
091 }
092
093 @Override
094 public ActionForward render(
095 ActionMapping actionMapping, ActionForm actionForm,
096 PortletConfig portletConfig, RenderRequest renderRequest,
097 RenderResponse renderResponse)
098 throws Exception {
099
100 try {
101 ActionUtil.getRecord(renderRequest);
102 }
103 catch (Exception e) {
104 if (e instanceof NoSuchRecordException ||
105 e instanceof PrincipalException) {
106
107 SessionErrors.add(renderRequest, e.getClass());
108
109 return actionMapping.findForward(
110 "portlet.dynamic_data_lists.error");
111 }
112 else {
113 throw e;
114 }
115 }
116
117 return actionMapping.findForward(
118 getForward(
119 renderRequest, "portlet.dynamic_data_lists.edit_record"));
120 }
121
122 protected void deleteRecord(ActionRequest actionRequest) throws Exception {
123 long recordId = ParamUtil.getLong(actionRequest, "recordId");
124
125 DDLRecordServiceUtil.deleteRecord(recordId);
126 }
127
128 protected void revertRecord(ActionRequest actionRequest) throws Exception {
129 long recordId = ParamUtil.getLong(actionRequest, "recordId");
130
131 String version = ParamUtil.getString(actionRequest, "version");
132
133 ServiceContext serviceContext = ServiceContextFactory.getInstance(
134 DDLRecord.class.getName(), actionRequest);
135
136 DDLRecordServiceUtil.revertRecord(recordId, version, serviceContext);
137 }
138
139 protected DDLRecord updateRecord(ActionRequest actionRequest)
140 throws Exception {
141
142 UploadPortletRequest uploadPortletRequest =
143 PortalUtil.getUploadPortletRequest(actionRequest);
144
145 ServiceContext serviceContext = ServiceContextFactory.getInstance(
146 DDLRecord.class.getName(), uploadPortletRequest);
147
148 long recordId = ParamUtil.getLong(serviceContext, "recordId");
149
150 long recordSetId = ParamUtil.getLong(serviceContext, "recordSetId");
151
152 return DDLUtil.updateRecord(
153 recordId, recordSetId, true, serviceContext);
154 }
155
156 }