001/* 002 * Copyright 2015 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.plugins.core.group; 017 018import java.util.ArrayList; 019import java.util.Collections; 020import java.util.Comparator; 021import java.util.HashMap; 022import java.util.Iterator; 023import java.util.List; 024import java.util.Map; 025import java.util.Set; 026 027import org.apache.avalon.framework.parameters.Parameters; 028import org.apache.avalon.framework.service.ServiceException; 029import org.apache.avalon.framework.service.ServiceManager; 030import org.apache.cocoon.acting.ServiceableAction; 031import org.apache.cocoon.environment.ObjectModelHelper; 032import org.apache.cocoon.environment.Redirector; 033import org.apache.cocoon.environment.Request; 034import org.apache.cocoon.environment.SourceResolver; 035 036import org.ametys.core.cocoon.JSonReader; 037import org.ametys.core.group.Group; 038import org.ametys.core.group.GroupManager; 039import org.ametys.core.user.User; 040import org.ametys.core.user.UserIdentity; 041import org.ametys.core.user.UserManager; 042import org.ametys.plugins.core.user.UserHelper; 043 044/** 045 * Get the users of a group 046 * 047 */ 048public class UsersGroupAction extends ServiceableAction 049{ 050 private static final int _DEFAULT_COUNT_VALUE = Integer.MAX_VALUE; 051 private static final int _DEFAULT_OFFSET_VALUE = 0; 052 053 private UserHelper _userHelper; 054 private UserManager _userManager; 055 private GroupManager _groupManager; 056 057 @Override 058 public void service(ServiceManager smanager) throws ServiceException 059 { 060 super.service(smanager); 061 _userHelper = (UserHelper) smanager.lookup(UserHelper.ROLE); 062 _userManager = (UserManager) smanager.lookup(UserManager.ROLE); 063 _groupManager = (GroupManager) smanager.lookup(GroupManager.ROLE); 064 } 065 066 public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception 067 { 068 List<Map<String, Object>> users = new ArrayList<>(); 069 070 @SuppressWarnings("unchecked") 071 Map<String, Object> jsParameters = (Map<String, Object>) objectModel.get(ObjectModelHelper.PARENT_CONTEXT); 072 String groupDirectoryId = (String) jsParameters.get("groupDirectoryId"); 073 074 int offset = parameters.getParameterAsInteger("limit", _DEFAULT_COUNT_VALUE); 075 if (offset == -1) 076 { 077 offset = Integer.MAX_VALUE; 078 } 079 080 int begin = parameters.getParameterAsInteger("start", _DEFAULT_OFFSET_VALUE); 081 082 Group group = _groupManager.getGroup(groupDirectoryId, source); 083 if (group != null) 084 { 085 List<User> sortedUsers = _getSortedUsers(group); 086 Iterator<User> it = sortedUsers.iterator(); 087 088 int index = 0; 089 while (it.hasNext() && index < begin + offset) 090 { 091 User user = it.next(); 092 093 if (index >= begin) 094 { 095 users.add(_userHelper.user2json(user, true)); 096 097 } 098 index++; 099 } 100 } 101 102 Map<String, Object> result = new HashMap<>(); 103 result.put("users", users); 104 result.put("group", source); 105 106 Request request = ObjectModelHelper.getRequest(objectModel); 107 request.setAttribute(JSonReader.OBJECT_TO_READ, result); 108 109 return EMPTY_MAP; 110 } 111 112 private List<User> _getSortedUsers (Group group) 113 { 114 List<User> users = new ArrayList<>(); 115 116 Set<UserIdentity> groupUsers = group.getUsers(); 117 for (UserIdentity identity : groupUsers) 118 { 119 String login = identity.getLogin(); 120 String populationId = identity.getPopulationId(); 121 User user = _userManager.getUser(populationId, login); 122 if (user != null) 123 { 124 users.add(user); 125 } 126 } 127 128 Collections.sort(users, new Comparator<User>() 129 { 130 public int compare(User u1, User u2) 131 { 132 int compare = u1.getLastName().toLowerCase().compareTo(u2.getLastName().toLowerCase()); 133 return compare != 0 ? compare : u1.getFirstName().toLowerCase().compareTo(u2.getFirstName().toLowerCase()); 134 } 135 }); 136 137 return users; 138 } 139 140}