001
014
015 package com.liferay.portlet.dynamicdatamapping.action;
016
017 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
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.PortalUtil;
030 import com.liferay.portal.util.WebKeys;
031 import com.liferay.portlet.PortletURLFactoryUtil;
032 import com.liferay.portlet.dynamicdatamapping.NoSuchTemplateException;
033 import com.liferay.portlet.dynamicdatamapping.TemplateNameException;
034 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
035 import com.liferay.portlet.dynamicdatamapping.service.DDMTemplateServiceUtil;
036
037 import java.util.Locale;
038 import java.util.Map;
039
040 import javax.portlet.ActionRequest;
041 import javax.portlet.ActionResponse;
042 import javax.portlet.PortletConfig;
043 import javax.portlet.PortletRequest;
044 import javax.portlet.RenderRequest;
045 import javax.portlet.RenderResponse;
046
047 import org.apache.struts.action.ActionForm;
048 import org.apache.struts.action.ActionForward;
049 import org.apache.struts.action.ActionMapping;
050
051
054 public class CopyTemplateAction extends PortletAction {
055
056 @Override
057 public void processAction(
058 ActionMapping actionMapping, ActionForm actionForm,
059 PortletConfig portletConfig, ActionRequest actionRequest,
060 ActionResponse actionResponse)
061 throws Exception {
062
063 try {
064 DDMTemplate template = copyTemplate(actionRequest);
065
066 String redirect = getSaveAndContinueRedirect(
067 portletConfig, actionRequest, template);
068 String closeRedirect = ParamUtil.getString(
069 actionRequest, "closeRedirect");
070
071 if (Validator.isNotNull(closeRedirect)) {
072 redirect = HttpUtil.setParameter(
073 redirect, "closeRedirect", closeRedirect);
074
075 SessionMessages.add(
076 actionRequest,
077 PortalUtil.getPortletId(actionRequest) +
078 SessionMessages.KEY_SUFFIX_CLOSE_REDIRECT,
079 closeRedirect);
080 }
081
082 sendRedirect(actionRequest, actionResponse, redirect);
083 }
084 catch (Exception e) {
085 if (e instanceof NoSuchTemplateException ||
086 e instanceof PrincipalException) {
087
088 SessionErrors.add(actionRequest, e.getClass());
089
090 setForward(actionRequest, "portlet.dynamic_data_mapping.error");
091 }
092 else if (e instanceof TemplateNameException) {
093 SessionErrors.add(actionRequest, e.getClass(), e);
094 }
095 else {
096 throw e;
097 }
098 }
099 }
100
101 @Override
102 public ActionForward render(
103 ActionMapping actionMapping, ActionForm actionForm,
104 PortletConfig portletConfig, RenderRequest renderRequest,
105 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 actionMapping.findForward(
122 "portlet.dynamic_data_mapping.error");
123 }
124 else {
125 throw e;
126 }
127 }
128
129 return actionMapping.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 LiferayPortletURL portletURL = PortletURLFactoryUtil.create(
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 }