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