001
014
015 package com.liferay.portlet.stagingbar.action;
016
017 import com.liferay.portal.kernel.exception.SystemException;
018 import com.liferay.portal.kernel.servlet.MultiSessionMessages;
019 import com.liferay.portal.kernel.servlet.SessionErrors;
020 import com.liferay.portal.kernel.util.Constants;
021 import com.liferay.portal.kernel.util.ParamUtil;
022 import com.liferay.portal.kernel.workflow.WorkflowConstants;
023 import com.liferay.portal.model.LayoutRevision;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.service.LayoutRevisionLocalServiceUtil;
026 import com.liferay.portal.service.ServiceContext;
027 import com.liferay.portal.service.ServiceContextFactory;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.theme.ThemeDisplay;
030 import com.liferay.portal.util.PortalUtil;
031 import com.liferay.portal.util.WebKeys;
032 import com.liferay.portlet.exportimport.staging.StagingUtil;
033
034 import javax.portlet.ActionRequest;
035 import javax.portlet.ActionResponse;
036 import javax.portlet.PortletConfig;
037
038 import javax.servlet.http.HttpServletRequest;
039
040 import org.apache.struts.action.ActionForm;
041 import org.apache.struts.action.ActionMapping;
042
043
046 public class EditLayoutRevisionAction extends PortletAction {
047
048 @Override
049 public void processAction(
050 ActionMapping actionMapping, ActionForm actionForm,
051 PortletConfig portletConfig, ActionRequest actionRequest,
052 ActionResponse actionResponse)
053 throws Exception {
054
055 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
056
057 try {
058 if (cmd.equals("delete_layout_revision")) {
059 deleteLayoutRevision(actionRequest);
060 }
061 else if (cmd.equals("update_layout_revision")) {
062 updateLayoutRevision(actionRequest);
063 }
064
065 MultiSessionMessages.add(
066 actionRequest,
067 PortalUtil.getPortletId(actionRequest) + "requestProcessed");
068
069 sendRedirect(actionRequest, actionResponse);
070 }
071 catch (Exception e) {
072 if (e instanceof PrincipalException) {
073 SessionErrors.add(actionRequest, e.getClass());
074
075 setForward(actionRequest, "portlet.export_import.error");
076 }
077 else if (e instanceof SystemException) {
078 SessionErrors.add(actionRequest, e.getClass(), e);
079
080 sendRedirect(actionRequest, actionResponse);
081 }
082 else {
083 throw e;
084 }
085 }
086 }
087
088 protected void deleteLayoutRevision(ActionRequest actionRequest)
089 throws Exception {
090
091 HttpServletRequest request = PortalUtil.getHttpServletRequest(
092 actionRequest);
093
094 long layoutRevisionId = ParamUtil.getLong(
095 actionRequest, "layoutRevisionId");
096
097 LayoutRevision layoutRevision =
098 LayoutRevisionLocalServiceUtil.getLayoutRevision(layoutRevisionId);
099
100 LayoutRevisionLocalServiceUtil.deleteLayoutRevision(layoutRevision);
101
102 boolean updateRecentLayoutRevisionId = ParamUtil.getBoolean(
103 actionRequest, "updateRecentLayoutRevisionId");
104
105 if (updateRecentLayoutRevisionId) {
106 StagingUtil.setRecentLayoutRevisionId(
107 request, layoutRevision.getLayoutSetBranchId(),
108 layoutRevision.getPlid(),
109 layoutRevision.getParentLayoutRevisionId());
110 }
111 }
112
113 @Override
114 protected boolean isCheckMethodOnProcessAction() {
115 return _CHECK_METHOD_ON_PROCESS_ACTION;
116 }
117
118 protected void updateLayoutRevision(ActionRequest actionRequest)
119 throws Exception {
120
121 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
122 WebKeys.THEME_DISPLAY);
123
124 long layoutRevisionId = ParamUtil.getLong(
125 actionRequest, "layoutRevisionId");
126
127 LayoutRevision layoutRevision =
128 LayoutRevisionLocalServiceUtil.getLayoutRevision(layoutRevisionId);
129
130 ServiceContext serviceContext = ServiceContextFactory.getInstance(
131 actionRequest);
132
133 LayoutRevision enableLayoutRevision =
134 LayoutRevisionLocalServiceUtil.updateLayoutRevision(
135 serviceContext.getUserId(), layoutRevisionId,
136 layoutRevision.getLayoutBranchId(), layoutRevision.getName(),
137 layoutRevision.getTitle(), layoutRevision.getDescription(),
138 layoutRevision.getKeywords(), layoutRevision.getRobots(),
139 layoutRevision.getTypeSettings(), layoutRevision.getIconImage(),
140 layoutRevision.getIconImageId(), layoutRevision.getThemeId(),
141 layoutRevision.getColorSchemeId(),
142 layoutRevision.getWapThemeId(),
143 layoutRevision.getWapColorSchemeId(), layoutRevision.getCss(),
144 serviceContext);
145
146 if (layoutRevision.getStatus() != WorkflowConstants.STATUS_INCOMPLETE) {
147 StagingUtil.setRecentLayoutRevisionId(
148 themeDisplay.getUser(), layoutRevision.getLayoutSetBranchId(),
149 layoutRevision.getPlid(), layoutRevision.getLayoutRevisionId());
150
151 return;
152 }
153
154 LayoutRevision lastLayoutRevision =
155 LayoutRevisionLocalServiceUtil.fetchLastLayoutRevision(
156 enableLayoutRevision.getPlid(), true);
157
158 if (lastLayoutRevision != null) {
159 LayoutRevision newLayoutRevision =
160 LayoutRevisionLocalServiceUtil.addLayoutRevision(
161 serviceContext.getUserId(),
162 layoutRevision.getLayoutSetBranchId(),
163 layoutRevision.getLayoutBranchId(),
164 enableLayoutRevision.getLayoutRevisionId(), false,
165 layoutRevision.getPlid(),
166 lastLayoutRevision.getLayoutRevisionId(),
167 lastLayoutRevision.isPrivateLayout(),
168 lastLayoutRevision.getName(), lastLayoutRevision.getTitle(),
169 lastLayoutRevision.getDescription(),
170 lastLayoutRevision.getKeywords(),
171 lastLayoutRevision.getRobots(),
172 lastLayoutRevision.getTypeSettings(),
173 lastLayoutRevision.isIconImage(),
174 lastLayoutRevision.getIconImageId(),
175 lastLayoutRevision.getThemeId(),
176 lastLayoutRevision.getColorSchemeId(),
177 lastLayoutRevision.getWapThemeId(),
178 lastLayoutRevision.getWapColorSchemeId(),
179 lastLayoutRevision.getCss(), serviceContext);
180
181 StagingUtil.setRecentLayoutRevisionId(
182 themeDisplay.getUser(),
183 newLayoutRevision.getLayoutSetBranchId(),
184 newLayoutRevision.getPlid(),
185 newLayoutRevision.getLayoutRevisionId());
186 }
187 }
188
189 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
190
191 }