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.enterpriseadmin.action;
16  
17  import com.liferay.portal.AddressCityException;
18  import com.liferay.portal.AddressStreetException;
19  import com.liferay.portal.AddressZipException;
20  import com.liferay.portal.DuplicateOrganizationException;
21  import com.liferay.portal.EmailAddressException;
22  import com.liferay.portal.NoSuchCountryException;
23  import com.liferay.portal.NoSuchListTypeException;
24  import com.liferay.portal.NoSuchOrganizationException;
25  import com.liferay.portal.NoSuchRegionException;
26  import com.liferay.portal.OrganizationNameException;
27  import com.liferay.portal.OrganizationParentException;
28  import com.liferay.portal.PhoneNumberException;
29  import com.liferay.portal.RequiredOrganizationException;
30  import com.liferay.portal.WebsiteURLException;
31  import com.liferay.portal.kernel.servlet.SessionErrors;
32  import com.liferay.portal.kernel.util.Constants;
33  import com.liferay.portal.kernel.util.HttpUtil;
34  import com.liferay.portal.kernel.util.ParamUtil;
35  import com.liferay.portal.kernel.util.StringUtil;
36  import com.liferay.portal.model.Address;
37  import com.liferay.portal.model.EmailAddress;
38  import com.liferay.portal.model.OrgLabor;
39  import com.liferay.portal.model.Organization;
40  import com.liferay.portal.model.OrganizationConstants;
41  import com.liferay.portal.model.Phone;
42  import com.liferay.portal.model.Website;
43  import com.liferay.portal.security.auth.PrincipalException;
44  import com.liferay.portal.service.OrganizationServiceUtil;
45  import com.liferay.portal.service.ServiceContext;
46  import com.liferay.portal.service.ServiceContextFactory;
47  import com.liferay.portal.struts.PortletAction;
48  import com.liferay.portlet.communities.util.CommunitiesUtil;
49  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
50  import com.liferay.util.LocalizationUtil;
51  
52  import java.util.List;
53  
54  import javax.portlet.ActionRequest;
55  import javax.portlet.ActionResponse;
56  import javax.portlet.PortletConfig;
57  import javax.portlet.PortletPreferences;
58  import javax.portlet.RenderRequest;
59  import javax.portlet.RenderResponse;
60  
61  import org.apache.struts.action.ActionForm;
62  import org.apache.struts.action.ActionForward;
63  import org.apache.struts.action.ActionMapping;
64  
65  /**
66   * <a href="EditOrganizationAction.java.html"><b><i>View Source</i></b></a>
67   *
68   * @author Brian Wing Shun Chan
69   * @author Julio Camarero
70   * @author Jorge Ferrer
71   */
72  public class EditOrganizationAction extends PortletAction {
73  
74      public void processAction(
75              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
76              ActionRequest actionRequest, ActionResponse actionResponse)
77          throws Exception {
78  
79          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
80  
81          try {
82              Organization organization = null;
83  
84              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
85                  organization = updateOrganization(actionRequest);
86              }
87              else if (cmd.equals(Constants.DELETE)) {
88                  deleteOrganizations(actionRequest);
89              }
90  
91              String redirect = ParamUtil.getString(actionRequest, "redirect");
92  
93              if (organization != null) {
94                  redirect = HttpUtil.setParameter(
95                      redirect, actionResponse.getNamespace() + "organizationId",
96                      organization.getOrganizationId());
97              }
98  
99              sendRedirect(actionRequest, actionResponse, redirect);
100         }
101         catch (Exception e) {
102             if (e instanceof NoSuchOrganizationException ||
103                 e instanceof PrincipalException) {
104 
105                 SessionErrors.add(actionRequest, e.getClass().getName());
106 
107                 setForward(actionRequest, "portlet.enterprise_admin.error");
108             }
109             else if (e instanceof AddressCityException ||
110                      e instanceof AddressStreetException ||
111                      e instanceof AddressZipException ||
112                      e instanceof DuplicateOrganizationException ||
113                      e instanceof EmailAddressException ||
114                      e instanceof NoSuchCountryException ||
115                      e instanceof NoSuchListTypeException ||
116                      e instanceof NoSuchRegionException ||
117                      e instanceof OrganizationNameException ||
118                      e instanceof OrganizationParentException ||
119                      e instanceof PhoneNumberException ||
120                      e instanceof RequiredOrganizationException ||
121                      e instanceof WebsiteURLException) {
122 
123                 if (e instanceof NoSuchListTypeException) {
124                     NoSuchListTypeException nslte = (NoSuchListTypeException)e;
125 
126                     SessionErrors.add(
127                         actionRequest,
128                         e.getClass().getName() + nslte.getType());
129                 }
130                 else {
131                     SessionErrors.add(actionRequest, e.getClass().getName());
132                 }
133 
134                 if (e instanceof RequiredOrganizationException) {
135                     actionResponse.sendRedirect(
136                         ParamUtil.getString(actionRequest, "redirect"));
137                 }
138             }
139             else {
140                 throw e;
141             }
142         }
143     }
144 
145     public ActionForward render(
146             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
147             RenderRequest renderRequest, RenderResponse renderResponse)
148         throws Exception {
149 
150         try {
151             ActionUtil.getOrganization(renderRequest);
152         }
153         catch (Exception e) {
154             if (e instanceof NoSuchOrganizationException ||
155                 e instanceof PrincipalException) {
156 
157                 SessionErrors.add(renderRequest, e.getClass().getName());
158 
159                 return mapping.findForward("portlet.enterprise_admin.error");
160             }
161             else {
162                 throw e;
163             }
164         }
165 
166         return mapping.findForward(getForward(
167             renderRequest, "portlet.enterprise_admin.edit_organization"));
168     }
169 
170     protected void deleteOrganizations(ActionRequest actionRequest)
171         throws Exception {
172 
173         long[] deleteOrganizationIds = StringUtil.split(
174             ParamUtil.getString(actionRequest, "deleteOrganizationIds"), 0L);
175 
176         for (int i = 0; i < deleteOrganizationIds.length; i++) {
177             OrganizationServiceUtil.deleteOrganization(
178                 deleteOrganizationIds[i]);
179         }
180     }
181 
182     protected Organization updateOrganization(ActionRequest actionRequest)
183         throws Exception {
184 
185         long organizationId = ParamUtil.getLong(
186             actionRequest, "organizationId");
187 
188         long parentOrganizationId = ParamUtil.getLong(
189             actionRequest, "parentOrganizationSearchContainerPrimaryKeys",
190             OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID);
191         String name = ParamUtil.getString(actionRequest, "name");
192         boolean recursable = ParamUtil.getBoolean(actionRequest, "recursable");
193         int statusId = ParamUtil.getInteger(actionRequest, "statusId");
194         String type = ParamUtil.getString(actionRequest, "type");
195         long regionId = ParamUtil.getLong(actionRequest, "regionId");
196         long countryId = ParamUtil.getLong(actionRequest, "countryId");
197         String comments = ParamUtil.getString(actionRequest, "comments");
198         List<Address> addresses = EnterpriseAdminUtil.getAddresses(
199             actionRequest);
200         List<EmailAddress> emailAddresses =
201             EnterpriseAdminUtil.getEmailAddresses(actionRequest);
202         List<OrgLabor> orgLabors = EnterpriseAdminUtil.getOrgLabors(
203             actionRequest);
204         List<Phone> phones = EnterpriseAdminUtil.getPhones(actionRequest);
205         List<Website> websites = EnterpriseAdminUtil.getWebsites(actionRequest);
206 
207         ServiceContext serviceContext = ServiceContextFactory.getInstance(
208             Organization.class.getName(), actionRequest);
209 
210         Organization organization = null;
211 
212         if (organizationId <= 0) {
213 
214             // Add organization
215 
216             organization = OrganizationServiceUtil.addOrganization(
217                 parentOrganizationId, name, type, recursable, regionId,
218                 countryId, statusId, comments, addresses, emailAddresses,
219                 orgLabors, phones, websites, serviceContext);
220         }
221         else {
222 
223             // Update organization
224 
225             organization = OrganizationServiceUtil.updateOrganization(
226                 organizationId, parentOrganizationId, name, type,
227                 recursable, regionId, countryId, statusId, comments, addresses,
228                 emailAddresses, orgLabors, phones, websites, serviceContext);
229 
230             boolean deleteLogo = ParamUtil.getBoolean(
231                 actionRequest, "deleteLogo");
232 
233             if (deleteLogo) {
234                 OrganizationServiceUtil.deleteLogo(
235                     organization.getOrganizationId());
236             }
237         }
238 
239         // Layout set prototypes
240 
241         long publicLayoutSetPrototypeId = ParamUtil.getLong(
242             actionRequest, "publicLayoutSetPrototypeId");
243         long privateLayoutSetPrototypeId = ParamUtil.getLong(
244             actionRequest, "privateLayoutSetPrototypeId");
245 
246         CommunitiesUtil.applyLayoutSetPrototypes(
247             organization.getGroup(), publicLayoutSetPrototypeId,
248             privateLayoutSetPrototypeId);
249 
250         // Reminder queries
251 
252         String reminderQueries = actionRequest.getParameter("reminderQueries");
253 
254         PortletPreferences preferences = organization.getPreferences();
255 
256         preferences.setValue("reminderQueries", reminderQueries);
257 
258         LocalizationUtil.setLocalizedPreferencesValues(
259             actionRequest, preferences, "reminderQueries");
260 
261         preferences.store();
262 
263         return organization;
264     }
265 
266 }