1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.announcements.action;
16  
17  import com.liferay.portal.kernel.servlet.SessionErrors;
18  import com.liferay.portal.kernel.util.Constants;
19  import com.liferay.portal.kernel.util.GetterUtil;
20  import com.liferay.portal.kernel.util.ParamUtil;
21  import com.liferay.portal.kernel.util.StringUtil;
22  import com.liferay.portal.kernel.util.WebKeys;
23  import com.liferay.portal.security.auth.PrincipalException;
24  import com.liferay.portal.struts.PortletAction;
25  import com.liferay.portal.theme.ThemeDisplay;
26  import com.liferay.portlet.announcements.EntryContentException;
27  import com.liferay.portlet.announcements.EntryDisplayDateException;
28  import com.liferay.portlet.announcements.EntryExpirationDateException;
29  import com.liferay.portlet.announcements.EntryTitleException;
30  import com.liferay.portlet.announcements.EntryURLException;
31  import com.liferay.portlet.announcements.NoSuchEntryException;
32  import com.liferay.portlet.announcements.service.AnnouncementsEntryServiceUtil;
33  
34  import java.util.Calendar;
35  
36  import javax.portlet.ActionRequest;
37  import javax.portlet.ActionResponse;
38  import javax.portlet.PortletConfig;
39  import javax.portlet.RenderRequest;
40  import javax.portlet.RenderResponse;
41  
42  import org.apache.struts.action.ActionForm;
43  import org.apache.struts.action.ActionForward;
44  import org.apache.struts.action.ActionMapping;
45  
46  /**
47   * <a href="EditEntryAction.java.html"><b><i>View Source</i></b></a>
48   *
49   * @author Raymond Augé
50   */
51  public class EditEntryAction extends PortletAction {
52  
53      public void processAction(
54              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
55              ActionRequest actionRequest, ActionResponse actionResponse)
56          throws Exception {
57  
58          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
59  
60          try {
61              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
62                  updateEntry(actionRequest);
63              }
64              else if (cmd.equals(Constants.DELETE)) {
65                  deleteEntry(actionRequest);
66              }
67  
68              String redirect = ParamUtil.getString(actionRequest, "redirect");
69  
70              actionResponse.sendRedirect(redirect);
71          }
72          catch (Exception e) {
73              if (e instanceof EntryContentException ||
74                  e instanceof EntryDisplayDateException ||
75                  e instanceof EntryExpirationDateException ||
76                  e instanceof EntryTitleException ||
77                  e instanceof EntryURLException ||
78                  e instanceof NoSuchEntryException ||
79                  e instanceof PrincipalException) {
80  
81                  SessionErrors.add(actionRequest, e.getClass().getName());
82              }
83              else {
84                  throw e;
85              }
86          }
87      }
88  
89      public ActionForward render(
90              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
91              RenderRequest renderRequest, RenderResponse renderResponse)
92          throws Exception {
93  
94          try {
95              ActionUtil.getEntry(renderRequest);
96          }
97          catch (Exception e) {
98              if (e instanceof NoSuchEntryException ||
99                  e instanceof PrincipalException) {
100 
101                 SessionErrors.add(renderRequest, e.getClass().getName());
102 
103                 return mapping.findForward("portlet.announcements.error");
104             }
105             else {
106                 throw e;
107             }
108         }
109 
110         return mapping.findForward(
111             getForward(renderRequest, "portlet.announcements.edit_entry"));
112     }
113 
114     protected void deleteEntry(ActionRequest actionRequest) throws Exception {
115         long entryId = ParamUtil.getLong(actionRequest, "entryId");
116 
117         AnnouncementsEntryServiceUtil.deleteEntry(entryId);
118     }
119 
120     protected void updateEntry(ActionRequest actionRequest) throws Exception {
121         ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
122             WebKeys.THEME_DISPLAY);
123 
124         long entryId = ParamUtil.getLong(actionRequest, "entryId");
125 
126         String[] distributionScopeParts = StringUtil.split(
127             ParamUtil.getString(actionRequest, "distributionScope"));
128 
129         long classNameId = 0;
130         long classPK = 0;
131 
132         if (distributionScopeParts.length == 2) {
133             classNameId = GetterUtil.getLong(distributionScopeParts[0]);
134 
135             if (classNameId > 0) {
136                 classPK = GetterUtil.getLong(distributionScopeParts[1]);
137             }
138         }
139 
140         String title = ParamUtil.getString(actionRequest, "title");
141         String content = ParamUtil.getString(actionRequest, "content");
142         String url = ParamUtil.getString(actionRequest, "url");
143         String type = ParamUtil.getString(actionRequest, "type");
144 
145         int displayDateMonth = ParamUtil.getInteger(
146             actionRequest, "displayDateMonth");
147         int displayDateDay = ParamUtil.getInteger(
148             actionRequest, "displayDateDay");
149         int displayDateYear = ParamUtil.getInteger(
150             actionRequest, "displayDateYear");
151         int displayDateHour = ParamUtil.getInteger(
152             actionRequest, "displayDateHour");
153         int displayDateMinute = ParamUtil.getInteger(
154             actionRequest, "displayDateMinute");
155         int displayDateAmPm = ParamUtil.getInteger(
156             actionRequest, "displayDateAmPm");
157 
158         if (displayDateAmPm == Calendar.PM) {
159             displayDateHour += 12;
160         }
161 
162         int expirationDateMonth = ParamUtil.getInteger(
163             actionRequest, "expirationDateMonth");
164         int expirationDateDay = ParamUtil.getInteger(
165             actionRequest, "expirationDateDay");
166         int expirationDateYear = ParamUtil.getInteger(
167             actionRequest, "expirationDateYear");
168         int expirationDateHour = ParamUtil.getInteger(
169             actionRequest, "expirationDateHour");
170         int expirationDateMinute = ParamUtil.getInteger(
171             actionRequest, "expirationDateMinute");
172         int expirationDateAmPm = ParamUtil.getInteger(
173             actionRequest, "expirationDateAmPm");
174 
175         if (expirationDateAmPm == Calendar.PM) {
176             expirationDateHour += 12;
177         }
178 
179         int priority = ParamUtil.getInteger(actionRequest, "priority");
180         boolean alert = ParamUtil.getBoolean(actionRequest, "alert");
181 
182         if (entryId <= 0) {
183 
184             // Add entry
185 
186             AnnouncementsEntryServiceUtil.addEntry(
187                 themeDisplay.getPlid(), classNameId, classPK, title, content,
188                 url, type, displayDateMonth, displayDateDay, displayDateYear,
189                 displayDateHour, displayDateMinute, expirationDateMonth,
190                 expirationDateDay, expirationDateYear, expirationDateHour,
191                 expirationDateMinute, priority, alert);
192         }
193         else {
194 
195             // Update entry
196 
197             AnnouncementsEntryServiceUtil.updateEntry(
198                 entryId, title, content, url, type, displayDateMonth,
199                 displayDateDay, displayDateYear, displayDateHour,
200                 displayDateMinute, expirationDateMonth, expirationDateDay,
201                 expirationDateYear, expirationDateHour, expirationDateMinute,
202                 priority);
203         }
204     }
205 
206 }