001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
044     * @author Eudaldo Alonso
045     */
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    }