/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.staging.processes.web.internal.portlet.action; import com.liferay.exportimport.kernel.exception.RemoteExportException; import com.liferay.exportimport.kernel.lar.ExportImportHelperUtil; import com.liferay.exportimport.kernel.staging.StagingUtil; import com.liferay.portal.kernel.exception.LayoutPrototypeException; import com.liferay.portal.kernel.exception.RemoteOptionsException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.lock.DuplicateLockException; import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand; import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand; import com.liferay.portal.kernel.security.auth.AuthException; import com.liferay.portal.kernel.security.auth.PrincipalException; import com.liferay.portal.kernel.security.auth.RemoteAuthException; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.servlet.SessionMessages; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Portal; import com.liferay.portal.kernel.util.Validator; import com.liferay.staging.constants.StagingProcessesPortletKeys; import com.liferay.taglib.ui.util.SessionTreeJSClicks; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.servlet.http.HttpServletRequest; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Levente Hudák */ @Component( immediate = true, property = { "javax.portlet.name=" + StagingProcessesPortletKeys.STAGING_PROCESSES, "mvc.command.name=publishLayouts" }, service = MVCActionCommand.class ) public class PublishLayoutsMVCActionCommand extends BaseMVCActionCommand { @Override protected void doProcessAction( ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String cmd = ParamUtil.getString(actionRequest, Constants.CMD); if (Validator.isNull(cmd)) { String portletId = _portal.getPortletId(actionRequest); SessionMessages.add(actionRequest, portletId); return; } String redirect = ParamUtil.getString(actionRequest, "redirect"); try { if (cmd.equals("copy_from_live")) { setLayoutIdMap(actionRequest); StagingUtil.copyFromLive(actionRequest); } else if (cmd.equals(Constants.PUBLISH_TO_LIVE)) { setLayoutIdMap(actionRequest); hideDefaultSuccessMessage(actionRequest); StagingUtil.publishToLive(actionRequest); } else if (cmd.equals(Constants.PUBLISH_TO_REMOTE)) { hideDefaultSuccessMessage(actionRequest); setLayoutIdMap(actionRequest); StagingUtil.publishToRemote(actionRequest); } else if (cmd.equals("schedule_copy_from_live")) { setLayoutIdMap(actionRequest); StagingUtil.scheduleCopyFromLive(actionRequest); } else if (cmd.equals("schedule_publish_to_live")) { setLayoutIdMap(actionRequest); StagingUtil.schedulePublishToLive(actionRequest); } else if (cmd.equals("schedule_publish_to_remote")) { setLayoutIdMap(actionRequest); StagingUtil.schedulePublishToRemote(actionRequest); } else if (cmd.equals("unschedule_copy_from_live")) { StagingUtil.unscheduleCopyFromLive(actionRequest); } else if (cmd.equals("unschedule_publish_to_live")) { StagingUtil.unschedulePublishToLive(actionRequest); } else if (cmd.equals("unschedule_publish_to_remote")) { StagingUtil.unschedulePublishToRemote(actionRequest); } sendRedirect(actionRequest, actionResponse, redirect); } catch (Exception e) { if (e instanceof PrincipalException) { SessionErrors.add(actionRequest, e.getClass()); actionResponse.setRenderParameter( "mvcPath", "/error/error.jsp"); } else if (e instanceof AuthException || e instanceof DuplicateLockException || e instanceof LayoutPrototypeException || e instanceof RemoteAuthException || e instanceof RemoteExportException || e instanceof RemoteOptionsException || e instanceof SystemException) { if (e instanceof RemoteAuthException) { SessionErrors.add(actionRequest, AuthException.class, e); } else { SessionErrors.add(actionRequest, e.getClass(), e); } sendRedirect(actionRequest, actionResponse, redirect); } else if (e instanceof IllegalArgumentException) { SessionErrors.add(actionRequest, e.getClass(), e); } else { throw e; } } } protected void setLayoutIdMap(ActionRequest actionRequest) { HttpServletRequest portletRequest = _portal.getHttpServletRequest( actionRequest); long groupId = ParamUtil.getLong(actionRequest, "groupId"); boolean privateLayout = ParamUtil.getBoolean( actionRequest, "privateLayout"); String treeId = ParamUtil.getString(actionRequest, "treeId"); String openNodes = SessionTreeJSClicks.getOpenNodes( portletRequest, treeId + "SelectedNode"); String selectedLayoutsJSON = ExportImportHelperUtil.getSelectedLayoutsJSON( groupId, privateLayout, openNodes); actionRequest.setAttribute("layoutIdMap", selectedLayoutsJSON); } @Reference private Portal _portal; }