001
014
015 package com.liferay.portlet.mobiledevicerules.action;
016
017 import com.liferay.portal.kernel.bean.BeanParamUtil;
018 import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
019 import com.liferay.portal.kernel.mobile.device.rulegroup.ActionHandlerManagerUtil;
020 import com.liferay.portal.kernel.mobile.device.rulegroup.action.ActionHandler;
021 import com.liferay.portal.kernel.servlet.SessionErrors;
022 import com.liferay.portal.kernel.util.Constants;
023 import com.liferay.portal.kernel.util.LocalizationUtil;
024 import com.liferay.portal.kernel.util.ParamUtil;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portal.kernel.util.UnicodeProperties;
028 import com.liferay.portal.mobile.device.rulegroup.action.impl.LayoutTemplateModificationActionHandler;
029 import com.liferay.portal.mobile.device.rulegroup.action.impl.SimpleRedirectActionHandler;
030 import com.liferay.portal.mobile.device.rulegroup.action.impl.SiteRedirectActionHandler;
031 import com.liferay.portal.mobile.device.rulegroup.action.impl.ThemeModificationActionHandler;
032 import com.liferay.portal.security.auth.PrincipalException;
033 import com.liferay.portal.service.ServiceContext;
034 import com.liferay.portal.service.ServiceContextFactory;
035 import com.liferay.portal.util.WebKeys;
036 import com.liferay.portlet.mobiledevicerules.ActionTypeException;
037 import com.liferay.portlet.mobiledevicerules.NoSuchActionException;
038 import com.liferay.portlet.mobiledevicerules.NoSuchRuleGroupException;
039 import com.liferay.portlet.mobiledevicerules.model.MDRAction;
040 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroup;
041 import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
042 import com.liferay.portlet.mobiledevicerules.service.MDRActionServiceUtil;
043 import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupInstanceLocalServiceUtil;
044
045 import java.util.HashMap;
046 import java.util.Locale;
047 import java.util.Map;
048
049 import javax.portlet.ActionRequest;
050 import javax.portlet.ActionResponse;
051 import javax.portlet.PortletConfig;
052 import javax.portlet.RenderRequest;
053 import javax.portlet.RenderResponse;
054 import javax.portlet.ResourceRequest;
055 import javax.portlet.ResourceResponse;
056
057 import org.apache.struts.action.ActionForm;
058 import org.apache.struts.action.ActionForward;
059 import org.apache.struts.action.ActionMapping;
060
061
064 public class EditActionAction extends EditRuleAction {
065
066 public EditActionAction() {
067 registerEditorJSP(
068 LayoutTemplateModificationActionHandler.class, "layout_tpl");
069 registerEditorJSP(SimpleRedirectActionHandler.class, "simple_url");
070 registerEditorJSP(SiteRedirectActionHandler.class, "site_url");
071 registerEditorJSP(ThemeModificationActionHandler.class, "theme");
072 }
073
074 @Override
075 public void processAction(
076 ActionMapping actionMapping, ActionForm actionForm,
077 PortletConfig portletConfig, ActionRequest actionRequest,
078 ActionResponse actionResponse)
079 throws Exception {
080
081 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
082
083 try {
084 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
085 updateAction(actionRequest);
086 }
087 else if (cmd.equals(Constants.DELETE)) {
088 deleteActions(actionRequest);
089 }
090
091 sendRedirect(actionRequest, actionResponse);
092 }
093 catch (Exception e) {
094 if (e instanceof PrincipalException) {
095 SessionErrors.add(actionRequest, e.getClass());
096
097 setForward(actionRequest, "portlet.mobile_device_rules.error");
098 }
099 else if (e instanceof ActionTypeException ||
100 e instanceof NoSuchActionException ||
101 e instanceof NoSuchRuleGroupException) {
102
103 SessionErrors.add(actionRequest, e.getClass());
104 }
105 else {
106 throw e;
107 }
108 }
109 }
110
111 @Override
112 public ActionForward render(
113 ActionMapping actionMapping, ActionForm actionForm,
114 PortletConfig portletConfig, RenderRequest renderRequest,
115 RenderResponse renderResponse)
116 throws Exception {
117
118 long actionId = ParamUtil.getLong(renderRequest, "actionId");
119
120 MDRAction action = MDRActionServiceUtil.fetchAction(actionId);
121
122 renderRequest.setAttribute(
123 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP_ACTION, action);
124
125 String type = BeanPropertiesUtil.getString(action, "type");
126
127 renderRequest.setAttribute(
128 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP_ACTION_TYPE, type);
129
130 String editorJSP = getEditorJSP(type);
131
132 renderRequest.setAttribute(
133 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP_ACTION_EDITOR_JSP,
134 editorJSP);
135
136 long ruleGroupInstanceId = BeanParamUtil.getLong(
137 action, renderRequest, "ruleGroupInstanceId");
138
139 MDRRuleGroupInstance ruleGroupInstance =
140 MDRRuleGroupInstanceLocalServiceUtil.getMDRRuleGroupInstance(
141 ruleGroupInstanceId);
142
143 renderRequest.setAttribute(
144 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP_INSTANCE, ruleGroupInstance);
145
146 MDRRuleGroup ruleGroup = ruleGroupInstance.getRuleGroup();
147
148 renderRequest.setAttribute(
149 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP, ruleGroup);
150
151 return actionMapping.findForward(
152 "portlet.mobile_device_rules.edit_action");
153 }
154
155 @Override
156 public void serveResource(
157 ActionMapping actionMapping, ActionForm actionForm,
158 PortletConfig portletConfig, ResourceRequest resourceRequest,
159 ResourceResponse resourceResponse)
160 throws Exception {
161
162 long actionId = ParamUtil.getLong(resourceRequest, "actionId");
163
164 MDRAction action = MDRActionServiceUtil.fetchAction(actionId);
165
166 resourceRequest.setAttribute(
167 WebKeys.MOBILE_DEVICE_RULES_RULE_GROUP_ACTION, action);
168
169 String type = ParamUtil.getString(resourceRequest, "type");
170
171 includeEditorJSP(
172 portletConfig, resourceRequest, resourceResponse, type);
173 }
174
175 protected void deleteActions(ActionRequest actionRequest) throws Exception {
176 long[] deleteActionIds = null;
177
178 long actionId = ParamUtil.getLong(actionRequest, "actionId");
179
180 if (actionId > 0) {
181 deleteActionIds = new long[] {actionId};
182 }
183 else {
184 deleteActionIds = StringUtil.split(
185 ParamUtil.getString(actionRequest, "actionIds"), 0L);
186 }
187
188 for (long deleteActionId : deleteActionIds) {
189 MDRActionServiceUtil.deleteAction(deleteActionId);
190 }
191 }
192
193 @Override
194 protected String getEditorJSP(String type) {
195 ActionHandler actionHandler = ActionHandlerManagerUtil.getActionHandler(
196 type);
197
198 String editorJSP = null;
199
200 if (actionHandler != null) {
201 editorJSP = _editorJSPs.get(actionHandler.getClass());
202 }
203
204 if (editorJSP == null) {
205 editorJSP = StringPool.BLANK;
206 }
207
208 return editorJSP;
209 }
210
211 protected void registerEditorJSP(Class<?> clazz, String jspPrefix) {
212 _editorJSPs.put(
213 clazz,
214 "/html/portlet/mobile_device_rules/action/" + jspPrefix + ".jsp");
215 }
216
217 protected void updateAction(ActionRequest actionRequest) throws Exception {
218 long actionId = ParamUtil.getLong(actionRequest, "actionId");
219
220 long ruleGroupInstanceId = ParamUtil.getLong(
221 actionRequest, "ruleGroupInstanceId");
222 Map<Locale, String> nameMap = LocalizationUtil.getLocalizationMap(
223 actionRequest, "name");
224 Map<Locale, String> descriptionMap =
225 LocalizationUtil.getLocalizationMap(actionRequest, "description");
226 String type = ParamUtil.getString(actionRequest, "type");
227
228 ActionHandler actionHandler = ActionHandlerManagerUtil.getActionHandler(
229 type);
230
231 if (actionHandler == null) {
232 throw new ActionTypeException();
233 }
234
235 UnicodeProperties typeSettingsProperties = getTypeSettingsProperties(
236 actionRequest, actionHandler.getPropertyNames());
237
238 ServiceContext serviceContext = ServiceContextFactory.getInstance(
239 actionRequest);
240
241 if (actionId <= 0) {
242 MDRActionServiceUtil.addAction(
243 ruleGroupInstanceId, nameMap, descriptionMap, type,
244 typeSettingsProperties, serviceContext);
245 }
246 else {
247 MDRActionServiceUtil.updateAction(
248 actionId, nameMap, descriptionMap, type, typeSettingsProperties,
249 serviceContext);
250 }
251 }
252
253 private Map<Class<?>, String> _editorJSPs = new HashMap<Class<?>, String>();
254
255 }