001
014
015 package com.liferay.portlet.dynamicdatamapping.action;
016
017 import com.liferay.portal.kernel.portlet.LiferayPortletConfig;
018 import com.liferay.portal.kernel.servlet.SessionErrors;
019 import com.liferay.portal.kernel.servlet.SessionMessages;
020 import com.liferay.portal.kernel.util.HttpUtil;
021 import com.liferay.portal.kernel.util.LocalizationUtil;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.Validator;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.service.ServiceContext;
026 import com.liferay.portal.service.ServiceContextFactory;
027 import com.liferay.portal.struts.PortletAction;
028 import com.liferay.portal.theme.ThemeDisplay;
029 import com.liferay.portal.util.WebKeys;
030 import com.liferay.portlet.PortletURLImpl;
031 import com.liferay.portlet.dynamicdatamapping.NoSuchTemplateException;
032 import com.liferay.portlet.dynamicdatamapping.TemplateNameException;
033 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
034 import com.liferay.portlet.dynamicdatamapping.service.DDMTemplateServiceUtil;
035
036 import java.util.Locale;
037 import java.util.Map;
038
039 import javax.portlet.ActionRequest;
040 import javax.portlet.ActionResponse;
041 import javax.portlet.PortletConfig;
042 import javax.portlet.PortletRequest;
043 import javax.portlet.RenderRequest;
044 import javax.portlet.RenderResponse;
045
046 import org.apache.struts.action.ActionForm;
047 import org.apache.struts.action.ActionForward;
048 import org.apache.struts.action.ActionMapping;
049
050
053 public class CopyTemplateAction extends PortletAction {
054
055 @Override
056 public void processAction(
057 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
058 ActionRequest actionRequest, ActionResponse actionResponse)
059 throws Exception {
060
061 try {
062 DDMTemplate template = copyTemplate(actionRequest);
063
064 String redirect = getSaveAndContinueRedirect(
065 portletConfig, actionRequest, template);
066 String closeRedirect = ParamUtil.getString(
067 actionRequest, "closeRedirect");
068
069 if (Validator.isNotNull(closeRedirect)) {
070 redirect = HttpUtil.setParameter(
071 redirect, "closeRedirect", closeRedirect);
072
073 LiferayPortletConfig liferayPortletConfig =
074 (LiferayPortletConfig)portletConfig;
075
076 SessionMessages.add(
077 actionRequest,
078 liferayPortletConfig.getPortletId() +
079 SessionMessages.KEY_SUFFIX_CLOSE_REDIRECT,
080 closeRedirect);
081 }
082
083 sendRedirect(actionRequest, actionResponse, redirect);
084 }
085 catch (Exception e) {
086 if (e instanceof NoSuchTemplateException ||
087 e instanceof PrincipalException) {
088
089 SessionErrors.add(actionRequest, e.getClass());
090
091 setForward(actionRequest, "portlet.dynamic_data_mapping.error");
092 }
093 else if (e instanceof TemplateNameException) {
094 SessionErrors.add(actionRequest, e.getClass(), e);
095 }
096 else {
097 throw e;
098 }
099 }
100 }
101
102 @Override
103 public ActionForward render(
104 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
105 RenderRequest renderRequest, RenderResponse renderResponse)
106 throws Exception {
107
108 try {
109 ActionUtil.getTemplate(renderRequest);
110 }
111 catch (NoSuchTemplateException nste) {
112
113
114
115
116 }
117 catch (Exception e) {
118 if (e instanceof PrincipalException) {
119 SessionErrors.add(renderRequest, e.getClass());
120
121 return mapping.findForward(
122 "portlet.dynamic_data_mapping.error");
123 }
124 else {
125 throw e;
126 }
127 }
128
129 return mapping.findForward(
130 getForward(
131 renderRequest, "portlet.dynamic_data_mapping.copy_template"));
132 }
133
134 protected DDMTemplate copyTemplate(ActionRequest actionRequest)
135 throws Exception {
136
137 long templateId = ParamUtil.getLong(actionRequest, "templateId");
138
139 Map<Locale, String> nameMap = LocalizationUtil.getLocalizationMap(
140 actionRequest, "name");
141 Map<Locale, String> descriptionMap =
142 LocalizationUtil.getLocalizationMap(actionRequest, "description");
143
144 ServiceContext serviceContext = ServiceContextFactory.getInstance(
145 DDMTemplate.class.getName(), actionRequest);
146
147 return DDMTemplateServiceUtil.copyTemplate(
148 templateId, nameMap, descriptionMap, serviceContext);
149 }
150
151 protected String getSaveAndContinueRedirect(
152 PortletConfig portletConfig, ActionRequest actionRequest,
153 DDMTemplate template)
154 throws Exception {
155
156 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
157 WebKeys.THEME_DISPLAY);
158
159 PortletURLImpl portletURL = new PortletURLImpl(
160 actionRequest, portletConfig.getPortletName(),
161 themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
162
163 portletURL.setParameter(
164 "struts_action", "/dynamic_data_mapping/copy_template");
165 portletURL.setParameter(
166 "templateId", String.valueOf(template.getTemplateId()), false);
167 portletURL.setWindowState(actionRequest.getWindowState());
168
169 return portletURL.toString();
170 }
171
172 }