1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.enterpriseadmin.action;
24  
25  import com.liferay.portal.AddressCityException;
26  import com.liferay.portal.AddressStreetException;
27  import com.liferay.portal.AddressZipException;
28  import com.liferay.portal.DuplicateOrganizationException;
29  import com.liferay.portal.EmailAddressException;
30  import com.liferay.portal.NoSuchCountryException;
31  import com.liferay.portal.NoSuchListTypeException;
32  import com.liferay.portal.NoSuchOrganizationException;
33  import com.liferay.portal.NoSuchRegionException;
34  import com.liferay.portal.OrganizationNameException;
35  import com.liferay.portal.OrganizationParentException;
36  import com.liferay.portal.PhoneNumberException;
37  import com.liferay.portal.RequiredOrganizationException;
38  import com.liferay.portal.WebsiteURLException;
39  import com.liferay.portal.kernel.servlet.SessionErrors;
40  import com.liferay.portal.kernel.util.Constants;
41  import com.liferay.portal.kernel.util.HttpUtil;
42  import com.liferay.portal.kernel.util.ParamUtil;
43  import com.liferay.portal.kernel.util.StringUtil;
44  import com.liferay.portal.model.Address;
45  import com.liferay.portal.model.EmailAddress;
46  import com.liferay.portal.model.OrgLabor;
47  import com.liferay.portal.model.Organization;
48  import com.liferay.portal.model.OrganizationConstants;
49  import com.liferay.portal.model.Phone;
50  import com.liferay.portal.model.Website;
51  import com.liferay.portal.security.auth.PrincipalException;
52  import com.liferay.portal.service.OrganizationServiceUtil;
53  import com.liferay.portal.service.ServiceContext;
54  import com.liferay.portal.service.ServiceContextFactory;
55  import com.liferay.portal.struts.PortletAction;
56  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
57  import com.liferay.util.LocalizationUtil;
58  
59  import java.util.List;
60  
61  import javax.portlet.ActionRequest;
62  import javax.portlet.ActionResponse;
63  import javax.portlet.PortletConfig;
64  import javax.portlet.PortletPreferences;
65  import javax.portlet.RenderRequest;
66  import javax.portlet.RenderResponse;
67  
68  import org.apache.struts.action.ActionForm;
69  import org.apache.struts.action.ActionForward;
70  import org.apache.struts.action.ActionMapping;
71  
72  /**
73   * <a href="EditOrganizationAction.java.html"><b><i>View Source</i></b></a>
74   *
75   * @author Brian Wing Shun Chan
76   * @author Julio Camarero
77   * @author Jorge Ferrer
78   *
79   */
80  public class EditOrganizationAction extends PortletAction {
81  
82      public void processAction(
83              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
84              ActionRequest actionRequest, ActionResponse actionResponse)
85          throws Exception {
86  
87          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
88  
89          try {
90              Organization organization = null;
91  
92              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
93                  organization = updateOrganization(actionRequest);
94              }
95              else if (cmd.equals(Constants.DELETE)) {
96                  deleteOrganizations(actionRequest);
97              }
98  
99              String redirect = ParamUtil.getString(actionRequest, "redirect");
100 
101             if (organization != null) {
102                 redirect = HttpUtil.setParameter(
103                     redirect, actionResponse.getNamespace() + "organizationId",
104                     organization.getOrganizationId());
105             }
106 
107             sendRedirect(actionRequest, actionResponse, redirect);
108         }
109         catch (Exception e) {
110             if (e instanceof NoSuchOrganizationException ||
111                 e instanceof PrincipalException) {
112 
113                 SessionErrors.add(actionRequest, e.getClass().getName());
114 
115                 setForward(actionRequest, "portlet.enterprise_admin.error");
116             }
117             else if (e instanceof AddressCityException ||
118                      e instanceof AddressStreetException ||
119                      e instanceof AddressZipException ||
120                      e instanceof DuplicateOrganizationException ||
121                      e instanceof EmailAddressException ||
122                      e instanceof NoSuchCountryException ||
123                      e instanceof NoSuchListTypeException ||
124                      e instanceof NoSuchRegionException ||
125                      e instanceof OrganizationNameException ||
126                      e instanceof OrganizationParentException ||
127                      e instanceof PhoneNumberException ||
128                      e instanceof RequiredOrganizationException ||
129                      e instanceof WebsiteURLException) {
130 
131                 if (e instanceof NoSuchListTypeException) {
132                     NoSuchListTypeException nslte = (NoSuchListTypeException)e;
133 
134                     SessionErrors.add(
135                         actionRequest,
136                         e.getClass().getName() + nslte.getType());
137                 }
138                 else {
139                     SessionErrors.add(actionRequest, e.getClass().getName());
140                 }
141 
142                 if (e instanceof RequiredOrganizationException) {
143                     actionResponse.sendRedirect(
144                         ParamUtil.getString(actionRequest, "redirect"));
145                 }
146             }
147             else {
148                 throw e;
149             }
150         }
151     }
152 
153     public ActionForward render(
154             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
155             RenderRequest renderRequest, RenderResponse renderResponse)
156         throws Exception {
157 
158         try {
159             ActionUtil.getOrganization(renderRequest);
160         }
161         catch (Exception e) {
162             if (e instanceof NoSuchOrganizationException ||
163                 e instanceof PrincipalException) {
164 
165                 SessionErrors.add(renderRequest, e.getClass().getName());
166 
167                 return mapping.findForward("portlet.enterprise_admin.error");
168             }
169             else {
170                 throw e;
171             }
172         }
173 
174         return mapping.findForward(getForward(
175             renderRequest, "portlet.enterprise_admin.edit_organization"));
176     }
177 
178     protected void deleteOrganizations(ActionRequest actionRequest)
179         throws Exception {
180 
181         long[] deleteOrganizationIds = StringUtil.split(
182             ParamUtil.getString(actionRequest, "deleteOrganizationIds"), 0L);
183 
184         for (int i = 0; i < deleteOrganizationIds.length; i++) {
185             OrganizationServiceUtil.deleteOrganization(
186                 deleteOrganizationIds[i]);
187         }
188     }
189 
190     protected Organization updateOrganization(ActionRequest actionRequest)
191         throws Exception {
192 
193         long organizationId = ParamUtil.getLong(
194             actionRequest, "organizationId");
195 
196         long parentOrganizationId = ParamUtil.getLong(
197             actionRequest, "parentOrganizationSearchContainerPrimaryKeys",
198             OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID);
199         String name = ParamUtil.getString(actionRequest, "name");
200         boolean recursable = ParamUtil.getBoolean(actionRequest, "recursable");
201         int statusId = ParamUtil.getInteger(actionRequest, "statusId");
202         String type = ParamUtil.getString(actionRequest, "type");
203         long regionId = ParamUtil.getLong(actionRequest, "regionId");
204         long countryId = ParamUtil.getLong(actionRequest, "countryId");
205         String comments = ParamUtil.getString(actionRequest, "comments");
206         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
207             actionRequest);
208         List<EmailAddress> emailAddresses =
209             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
210         List<OrgLabor> orgLabors = EnterpriseAdminUtil.getOrgLabors(
211             actionRequest);
212         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
213         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
214 
215         ServiceContext serviceContext = ServiceContextFactory.getInstance(
216             Organization.class.getName(), actionRequest);
217 
218         Organization organization = null;
219 
220         if (organizationId <= 0) {
221 
222             // Add organization
223 
224             organization = OrganizationServiceUtil.addOrganization(
225                 parentOrganizationId, name, type, recursable, regionId,
226                 countryId, statusId, comments, addresses, emailAddresses,
227                 orgLabors, phones, websites, serviceContext);
228         }
229         else {
230 
231             // Update organization
232 
233             organization = OrganizationServiceUtil.updateOrganization(
234                 organizationId, parentOrganizationId, name, type,
235                 recursable, regionId, countryId, statusId, comments, addresses,
236                 emailAddresses, orgLabors, phones, websites, serviceContext);
237 
238             PortletPreferences preferences = organization.getPreferences();
239 
240             String reminderQueries = actionRequest.getParameter(
241                 "reminderQueries");
242 
243             preferences.setValue("reminderQueries", reminderQueries);
244 
245             LocalizationUtil.setLocalizedPreferencesValues(
246                 actionRequest, preferences, "reminderQueries");
247 
248             preferences.store();
249         }
250 
251         return organization;
252     }
253 
254 }