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.util;
16  
17  import com.liferay.portal.PortalException;
18  import com.liferay.portal.SystemException;
19  import com.liferay.portal.kernel.util.ArrayUtil;
20  import com.liferay.portal.kernel.util.ListUtil;
21  import com.liferay.portal.kernel.util.OrderByComparator;
22  import com.liferay.portal.model.Organization;
23  import com.liferay.portal.model.Role;
24  import com.liferay.portal.model.RoleConstants;
25  import com.liferay.portal.model.User;
26  import com.liferay.portal.security.permission.ActionKeys;
27  import com.liferay.portal.security.permission.PermissionChecker;
28  import com.liferay.portal.service.OrganizationLocalServiceUtil;
29  import com.liferay.portal.service.permission.RolePermissionUtil;
30  import com.liferay.portal.util.PropsValues;
31  import com.liferay.portal.util.comparator.GroupNameComparator;
32  import com.liferay.portal.util.comparator.GroupTypeComparator;
33  import com.liferay.portal.util.comparator.OrganizationNameComparator;
34  import com.liferay.portal.util.comparator.OrganizationTypeComparator;
35  import com.liferay.portal.util.comparator.PasswordPolicyDescriptionComparator;
36  import com.liferay.portal.util.comparator.PasswordPolicyNameComparator;
37  import com.liferay.portal.util.comparator.RoleDescriptionComparator;
38  import com.liferay.portal.util.comparator.RoleNameComparator;
39  import com.liferay.portal.util.comparator.RoleTypeComparator;
40  import com.liferay.portal.util.comparator.UserEmailAddressComparator;
41  import com.liferay.portal.util.comparator.UserFirstNameComparator;
42  import com.liferay.portal.util.comparator.UserGroupDescriptionComparator;
43  import com.liferay.portal.util.comparator.UserGroupNameComparator;
44  import com.liferay.portal.util.comparator.UserJobTitleComparator;
45  import com.liferay.portal.util.comparator.UserLastNameComparator;
46  import com.liferay.portal.util.comparator.UserScreenNameComparator;
47  
48  import java.util.Iterator;
49  import java.util.List;
50  
51  /**
52   * <a href="EnterpriseAdminUtil.java.html"><b><i>View Source</i></b></a>
53   *
54   * @author Brian Wing Shun Chan
55   */
56  public class EnterpriseAdminUtil {
57  
58      public static List<Role> filterRoles(
59          PermissionChecker permissionChecker, List<Role> roles) {
60  
61          List<Role> filteredRoles = ListUtil.copy(roles);
62  
63          Iterator<Role> itr = filteredRoles.iterator();
64  
65          while (itr.hasNext()) {
66              Role role = itr.next();
67  
68              String name = role.getName();
69  
70              if (name.equals(RoleConstants.COMMUNITY_MEMBER) ||
71                  name.equals(RoleConstants.GUEST) ||
72                  name.equals(RoleConstants.OWNER) ||
73                  name.equals(RoleConstants.ORGANIZATION_MEMBER) ||
74                  name.equals(RoleConstants.USER)) {
75  
76                  itr.remove();
77              }
78          }
79  
80          if (permissionChecker.isCompanyAdmin()) {
81              return filteredRoles;
82          }
83  
84          itr = filteredRoles.iterator();
85  
86          while (itr.hasNext()) {
87              Role role = itr.next();
88  
89              if (!RolePermissionUtil.contains(
90                      permissionChecker, role.getRoleId(),
91                      ActionKeys.ASSIGN_MEMBERS)) {
92  
93                  itr.remove();
94              }
95          }
96  
97          return filteredRoles;
98      }
99  
100     public static OrderByComparator getGroupOrderByComparator(
101         String orderByCol, String orderByType) {
102 
103         boolean orderByAsc = false;
104 
105         if (orderByType.equals("asc")) {
106             orderByAsc = true;
107         }
108 
109         OrderByComparator orderByComparator = null;
110 
111         if (orderByCol.equals("name")) {
112             orderByComparator = new GroupNameComparator(orderByAsc);
113         }
114         else if (orderByCol.equals("type")) {
115             orderByComparator = new GroupTypeComparator(orderByAsc);
116         }
117         else {
118             orderByComparator = new GroupNameComparator(orderByAsc);
119         }
120 
121         return orderByComparator;
122     }
123 
124     public static Long[][] getLeftAndRightOrganizationIds(long organizationId)
125         throws PortalException, SystemException {
126 
127         Organization organization =
128             OrganizationLocalServiceUtil.getOrganization(organizationId);
129 
130         return getLeftAndRightOrganizationIds(organization);
131     }
132 
133     public static Long[][] getLeftAndRightOrganizationIds(
134         Organization organization) {
135 
136         return new Long[][] {
137             new Long[] {
138                 organization.getLeftOrganizationId(),
139                 organization.getRightOrganizationId()
140             }
141         };
142     }
143 
144     public static Long[][] getLeftAndRightOrganizationIds(
145         List<Organization> organizations) {
146 
147         Long[][] leftAndRightOrganizationIds = new Long[organizations.size()][];
148 
149         for (int i = 0; i < organizations.size(); i++) {
150             Organization organization = organizations.get(i);
151 
152             leftAndRightOrganizationIds[i] =
153                 new Long[] {
154                     organization.getLeftOrganizationId(),
155                     organization.getRightOrganizationId()
156                 };
157         }
158 
159         return leftAndRightOrganizationIds;
160     }
161 
162     public static Long[] getOrganizationIds(List<Organization> organizations) {
163         if ((organizations == null) || organizations.isEmpty()) {
164             return new Long[0];
165         }
166 
167         Long[] organizationIds = new Long[organizations.size()];
168 
169         for (int i = 0; i < organizations.size(); i++) {
170             Organization organization = organizations.get(i);
171 
172             organizationIds[i] = new Long(organization.getOrganizationId());
173         }
174 
175         return organizationIds;
176     }
177 
178     public static OrderByComparator getOrganizationOrderByComparator(
179         String orderByCol, String orderByType) {
180 
181         boolean orderByAsc = false;
182 
183         if (orderByType.equals("asc")) {
184             orderByAsc = true;
185         }
186 
187         OrderByComparator orderByComparator = null;
188 
189         if (orderByCol.equals("name")) {
190             orderByComparator = new OrganizationNameComparator(orderByAsc);
191         }
192         else if (orderByCol.equals("type")) {
193             orderByComparator = new OrganizationTypeComparator(orderByAsc);
194         }
195         else {
196             orderByComparator = new OrganizationNameComparator(orderByAsc);
197         }
198 
199         return orderByComparator;
200     }
201 
202     public static OrderByComparator getPasswordPolicyOrderByComparator(
203         String orderByCol, String orderByType) {
204 
205         boolean orderByAsc = false;
206 
207         if (orderByType.equals("asc")) {
208             orderByAsc = true;
209         }
210 
211         OrderByComparator orderByComparator = null;
212 
213         if (orderByCol.equals("name")) {
214             orderByComparator = new PasswordPolicyNameComparator(orderByAsc);
215         }
216         else if (orderByCol.equals("description")) {
217             orderByComparator = new PasswordPolicyDescriptionComparator(
218                 orderByAsc);
219         }
220         else {
221             orderByComparator = new PasswordPolicyNameComparator(orderByAsc);
222         }
223 
224         return orderByComparator;
225     }
226 
227     public static OrderByComparator getRoleOrderByComparator(
228         String orderByCol, String orderByType) {
229 
230         boolean orderByAsc = false;
231 
232         if (orderByType.equals("asc")) {
233             orderByAsc = true;
234         }
235 
236         OrderByComparator orderByComparator = null;
237 
238         if (orderByCol.equals("name")) {
239             orderByComparator = new RoleNameComparator(orderByAsc);
240         }
241         else if (orderByCol.equals("description")) {
242             orderByComparator = new RoleDescriptionComparator(orderByAsc);
243         }
244         else if (orderByCol.equals("type")) {
245             orderByComparator = new RoleTypeComparator(orderByAsc);
246         }
247         else {
248             orderByComparator = new RoleNameComparator(orderByAsc);
249         }
250 
251         return orderByComparator;
252     }
253 
254     public static OrderByComparator getUserGroupOrderByComparator(
255         String orderByCol, String orderByType) {
256 
257         boolean orderByAsc = false;
258 
259         if (orderByType.equals("asc")) {
260             orderByAsc = true;
261         }
262 
263         OrderByComparator orderByComparator = null;
264 
265         if (orderByCol.equals("name")) {
266             orderByComparator = new UserGroupNameComparator(orderByAsc);
267         }
268         else if (orderByCol.equals("description")) {
269             orderByComparator = new UserGroupDescriptionComparator(orderByAsc);
270         }
271         else {
272             orderByComparator = new UserGroupNameComparator(orderByAsc);
273         }
274 
275         return orderByComparator;
276     }
277 
278     public static OrderByComparator getUserOrderByComparator(
279         String orderByCol, String orderByType) {
280 
281         boolean orderByAsc = false;
282 
283         if (orderByType.equals("asc")) {
284             orderByAsc = true;
285         }
286 
287         OrderByComparator orderByComparator = null;
288 
289         if (orderByCol.equals("email-address")) {
290             orderByComparator = new UserEmailAddressComparator(orderByAsc);
291         }
292         else if (orderByCol.equals("first-name")) {
293             orderByComparator = new UserFirstNameComparator(orderByAsc);
294         }
295         else if (orderByCol.equals("job-title")) {
296             orderByComparator = new UserJobTitleComparator(orderByAsc);
297         }
298         else if (orderByCol.equals("last-name")) {
299             orderByComparator = new UserLastNameComparator(orderByAsc);
300         }
301         else if (orderByCol.equals("screen-name")) {
302             orderByComparator = new UserScreenNameComparator(orderByAsc);
303         }
304         else {
305             orderByComparator = new UserLastNameComparator(orderByAsc);
306         }
307 
308         return orderByComparator;
309     }
310 
311     public static boolean hasUpdateEmailAddress(
312             PermissionChecker permissionChecker, User user) {
313 
314         String[] fieldEditiableUserEmailAddress =
315             PropsValues.
316                 FIELD_EDITABLE_COM_LIFERAY_PORTAL_MODEL_USER_EMAILADDRESS;
317 
318         if (ArrayUtil.contains(
319                 fieldEditiableUserEmailAddress, "administrator") &&
320             permissionChecker.isCompanyAdmin()) {
321 
322             return true;
323         }
324 
325         if (ArrayUtil.contains(
326                 fieldEditiableUserEmailAddress, "user-with-mx") &&
327             user.hasCompanyMx()) {
328 
329             return true;
330         }
331 
332         if (ArrayUtil.contains(
333                 fieldEditiableUserEmailAddress, "user-without-mx") &&
334             !user.hasCompanyMx()) {
335 
336             return true;
337         }
338 
339         return false;
340     }
341 
342     public static boolean hasUpdateScreenName(
343         PermissionChecker permissionChecker, User user) {
344 
345         String[] fieldEditiableUserScreenName =
346             PropsValues.
347                 FIELD_EDITABLE_COM_LIFERAY_PORTAL_MODEL_USER_SCREENNAME;
348 
349         if (ArrayUtil.contains(
350                 fieldEditiableUserScreenName, "administrator") &&
351             permissionChecker.isCompanyAdmin()) {
352 
353             return true;
354         }
355 
356         if (ArrayUtil.contains(
357                 fieldEditiableUserScreenName, "user-with-mx") &&
358             user.hasCompanyMx()) {
359 
360             return true;
361         }
362 
363         if (ArrayUtil.contains(
364                 fieldEditiableUserScreenName, "user-without-mx") &&
365             !user.hasCompanyMx()) {
366 
367             return true;
368         }
369 
370         return false;
371     }
372 
373 }