001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.util.ListUtil;
020    import com.liferay.portal.model.Address;
021    import com.liferay.portal.model.EmailAddress;
022    import com.liferay.portal.model.OrgLabor;
023    import com.liferay.portal.model.Organization;
024    import com.liferay.portal.model.OrganizationConstants;
025    import com.liferay.portal.model.Phone;
026    import com.liferay.portal.model.Website;
027    import com.liferay.portal.security.auth.PrincipalException;
028    import com.liferay.portal.security.permission.ActionKeys;
029    import com.liferay.portal.security.permission.PermissionChecker;
030    import com.liferay.portal.service.ServiceContext;
031    import com.liferay.portal.service.base.OrganizationServiceBaseImpl;
032    import com.liferay.portal.service.permission.GroupPermissionUtil;
033    import com.liferay.portal.service.permission.OrganizationPermissionUtil;
034    import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
035    import com.liferay.portal.service.permission.PortalPermissionUtil;
036    import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
037    
038    import java.util.Iterator;
039    import java.util.LinkedHashMap;
040    import java.util.List;
041    
042    /**
043     * @author Brian Wing Shun Chan
044     * @author Jorge Ferrer
045     * @author Julio Camarero
046     */
047    public class OrganizationServiceImpl extends OrganizationServiceBaseImpl {
048    
049            public void addGroupOrganizations(long groupId, long[] organizationIds)
050                    throws PortalException, SystemException {
051    
052                    GroupPermissionUtil.check(
053                            getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
054    
055                    organizationLocalService.addGroupOrganizations(
056                            groupId, organizationIds);
057            }
058    
059            public void addPasswordPolicyOrganizations(
060                            long passwordPolicyId, long[] organizationIds)
061                    throws PortalException, SystemException {
062    
063                    PasswordPolicyPermissionUtil.check(
064                            getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
065    
066                    organizationLocalService.addPasswordPolicyOrganizations(
067                            passwordPolicyId, organizationIds);
068            }
069    
070            public Organization addOrganization(
071                            long parentOrganizationId, String name, String type,
072                            boolean recursable, long regionId, long countryId, int statusId,
073                            String comments, ServiceContext serviceContext)
074                    throws PortalException, SystemException {
075    
076                    if (!OrganizationPermissionUtil.contains(
077                                    getPermissionChecker(), parentOrganizationId,
078                                    ActionKeys.MANAGE_SUBORGANIZATIONS) &&
079                            !PortalPermissionUtil.contains(
080                                    getPermissionChecker(), ActionKeys.ADD_ORGANIZATION)) {
081    
082                            throw new PrincipalException(
083                                    "User " + getUserId() + " does not have permissions to add " +
084                                            "an organization with parent " + parentOrganizationId);
085                    }
086    
087                    return organizationLocalService.addOrganization(
088                            getUserId(), parentOrganizationId, name, type, recursable,
089                            regionId, countryId, statusId, comments, serviceContext);
090            }
091    
092            public Organization addOrganization(
093                            long parentOrganizationId, String name, String type,
094                            boolean recursable, long regionId, long countryId, int statusId,
095                            String comments, List<Address> addresses,
096                            List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
097                            List<Phone> phones, List<Website> websites,
098                            ServiceContext serviceContext)
099                    throws PortalException, SystemException {
100    
101                    Organization organization = addOrganization(
102                            parentOrganizationId, name, type, recursable, regionId, countryId,
103                            statusId, comments, serviceContext);
104    
105                    EnterpriseAdminUtil.updateAddresses(
106                            Organization.class.getName(), organization.getOrganizationId(),
107                            addresses);
108    
109                    EnterpriseAdminUtil.updateEmailAddresses(
110                            Organization.class.getName(), organization.getOrganizationId(),
111                            emailAddresses);
112    
113                    EnterpriseAdminUtil.updateOrgLabors(organization.getOrganizationId(),
114                            orgLabors);
115    
116                    EnterpriseAdminUtil.updatePhones(
117                            Organization.class.getName(), organization.getOrganizationId(),
118                            phones);
119    
120                    EnterpriseAdminUtil.updateWebsites(
121                            Organization.class.getName(), organization.getOrganizationId(),
122                            websites);
123    
124                    return organization;
125            }
126    
127            public void deleteLogo(long organizationId)
128                    throws PortalException, SystemException {
129    
130                    OrganizationPermissionUtil.check(
131                            getPermissionChecker(), organizationId, ActionKeys.UPDATE);
132    
133                    organizationLocalService.deleteLogo(organizationId);
134            }
135    
136            public void deleteOrganization(long organizationId)
137                    throws PortalException, SystemException {
138    
139                    OrganizationPermissionUtil.check(
140                            getPermissionChecker(), organizationId, ActionKeys.DELETE);
141    
142                    organizationLocalService.deleteOrganization(organizationId);
143            }
144    
145            public List<Organization> getManageableOrganizations(
146                            String actionId, int max)
147                    throws PortalException, SystemException {
148    
149                    PermissionChecker permissionChecker = getPermissionChecker();
150    
151                    if (permissionChecker.isCompanyAdmin()) {
152                            return organizationLocalService.search(
153                                    permissionChecker.getCompanyId(),
154                                    OrganizationConstants.ANY_PARENT_ORGANIZATION_ID, null, null,
155                                    null, null, null, 0, max);
156                    }
157    
158                    LinkedHashMap<String, Object> params =
159                            new LinkedHashMap<String, Object>();
160    
161                    List<Organization> userOrganizations =
162                            organizationLocalService.getUserOrganizations(
163                                    permissionChecker.getUserId());
164    
165                    Long[][] leftAndRightOrganizationIds =
166                            EnterpriseAdminUtil.getLeftAndRightOrganizationIds(
167                                    userOrganizations);
168    
169                    params.put("organizationsTree", leftAndRightOrganizationIds);
170    
171                    List<Organization> manageableOrganizations =
172                            organizationLocalService.search(
173                                    permissionChecker.getCompanyId(),
174                                    OrganizationConstants.ANY_PARENT_ORGANIZATION_ID, null, null,
175                                    null, null, params, 0, max);
176    
177                    manageableOrganizations = ListUtil.copy(manageableOrganizations);
178    
179                    Iterator<Organization> itr = manageableOrganizations.iterator();
180    
181                    while (itr.hasNext()) {
182                            Organization organization = itr.next();
183    
184                            if (!OrganizationPermissionUtil.contains(
185                                            permissionChecker, organization, actionId)) {
186    
187                                    itr.remove();
188                            }
189                    }
190    
191                    return manageableOrganizations;
192            }
193    
194            public Organization getOrganization(long organizationId)
195                    throws PortalException, SystemException {
196    
197                    OrganizationPermissionUtil.check(
198                            getPermissionChecker(), organizationId, ActionKeys.VIEW);
199    
200                    return organizationLocalService.getOrganization(organizationId);
201            }
202    
203            public long getOrganizationId(long companyId, String name)
204                    throws SystemException {
205    
206                    return organizationLocalService.getOrganizationId(companyId, name);
207            }
208    
209            public List<Organization> getUserOrganizations(long userId)
210                    throws PortalException, SystemException {
211    
212                    return organizationLocalService.getUserOrganizations(userId);
213            }
214    
215            public List<Organization> getUserOrganizations(
216                            long userId, boolean inheritUserGroups)
217                    throws PortalException, SystemException {
218    
219                    return organizationLocalService.getUserOrganizations(
220                            userId, inheritUserGroups);
221            }
222    
223            public void setGroupOrganizations(long groupId, long[] organizationIds)
224                    throws PortalException, SystemException {
225    
226                    GroupPermissionUtil.check(
227                            getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
228    
229                    organizationLocalService.setGroupOrganizations(
230                            groupId, organizationIds);
231            }
232    
233            public void unsetGroupOrganizations(long groupId, long[] organizationIds)
234                    throws PortalException, SystemException {
235    
236                    GroupPermissionUtil.check(
237                            getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
238    
239                    organizationLocalService.unsetGroupOrganizations(
240                            groupId, organizationIds);
241            }
242    
243            public void unsetPasswordPolicyOrganizations(
244                            long passwordPolicyId, long[] organizationIds)
245                    throws PortalException, SystemException {
246    
247                    PasswordPolicyPermissionUtil.check(
248                            getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
249    
250                    organizationLocalService.unsetPasswordPolicyOrganizations(
251                            passwordPolicyId, organizationIds);
252            }
253    
254            public Organization updateOrganization(
255                            long organizationId, long parentOrganizationId, String name,
256                            String type, boolean recursable, long regionId, long countryId,
257                            int statusId, String comments, ServiceContext serviceContext)
258                    throws PortalException, SystemException {
259    
260                    OrganizationPermissionUtil.check(
261                            getPermissionChecker(), organizationId, ActionKeys.UPDATE);
262    
263                    return organizationLocalService.updateOrganization(
264                            getUser().getCompanyId(), organizationId, parentOrganizationId,
265                            name, type, recursable, regionId, countryId, statusId, comments,
266                            serviceContext);
267            }
268    
269            public Organization updateOrganization(
270                            long organizationId, long parentOrganizationId, String name,
271                            String type, boolean recursable, long regionId, long countryId,
272                            int statusId, String comments, List<Address> addresses,
273                            List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
274                            List<Phone> phones, List<Website> websites,
275                            ServiceContext serviceContext)
276                    throws PortalException, SystemException {
277    
278                    EnterpriseAdminUtil.updateAddresses(
279                            Organization.class.getName(), organizationId, addresses);
280    
281                    EnterpriseAdminUtil.updateEmailAddresses(
282                            Organization.class.getName(), organizationId, emailAddresses);
283    
284                    EnterpriseAdminUtil.updateOrgLabors(organizationId, orgLabors);
285    
286                    EnterpriseAdminUtil.updatePhones(
287                            Organization.class.getName(), organizationId, phones);
288    
289                    EnterpriseAdminUtil.updateWebsites(
290                            Organization.class.getName(), organizationId, websites);
291    
292                    Organization organization = updateOrganization(
293                            organizationId, parentOrganizationId, name, type, recursable,
294                            regionId, countryId, statusId, comments, serviceContext);
295    
296                    return organization;
297            }
298    
299    }