package com.constellio.app.ui.framework.data; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.UserCredentialVO; import com.constellio.app.ui.framework.builders.UserCredentialToVOBuilder; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.entities.security.global.UserCredentialStatus; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.users.UserServices; @SuppressWarnings("serial") public class UserCredentialVODataProvider extends AbstractDataProvider { private transient UserServices userServices; private String globalGroupCode; private String filter; private transient List<UserCredentialVO> userCredentialVOs; private transient List<UserCredentialVO> filteredUserCredentialVOs; private transient UserCredentialToVOBuilder voBuilder; public void setUserCredentialVOs(List<UserCredentialVO> userCredentialVOs) { this.userCredentialVOs = userCredentialVOs; setFilter(null); } public UserCredentialVODataProvider(UserCredentialToVOBuilder voBuilder, ModelLayerFactory modelLayerFactory, String globalGroupCode) { this.voBuilder = voBuilder; init(modelLayerFactory, globalGroupCode); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); init(constellioFactories.getModelLayerFactory(), globalGroupCode); } void init(ModelLayerFactory modelLayerFactory, String groupCode) { this.globalGroupCode = groupCode; userServices = modelLayerFactory.newUserServices(); loadUserCredentialVOs(); } private void loadUserCredentialVOs() { List<UserCredentialVO> newUserCredentialVOs = new ArrayList<>(); List<UserCredential> userCredentials; if (globalGroupCode != null) { userCredentials = userServices.getGlobalGroupActifUsers(globalGroupCode); } else { userCredentials = userServices.getAllUserCredentials(); } for (UserCredential userCredential : userCredentials) { UserCredentialVO userCredentialVO = voBuilder.build(userCredential); newUserCredentialVOs.add(userCredentialVO); } sort(newUserCredentialVOs); setUserCredentialVOs(newUserCredentialVOs); } public String getFilter() { return filter; } public void setFilter(String filter) { filteredUserCredentialVOs = new ArrayList<>(); if (filter != null) { this.filter = filter.toLowerCase(); for (UserCredentialVO userCredentialVO : userCredentialVOs) { if ((userCredentialVO.getUsername() != null && userCredentialVO.getUsername().toLowerCase().contains(this.filter)) || (userCredentialVO.getUsername() != null && userCredentialVO.getUsername().toLowerCase() .contains(this.filter)) || (userCredentialVO.getEmail() != null && userCredentialVO.getEmail().toLowerCase() .contains(this.filter)) || (userCredentialVO.getFirstName() != null && userCredentialVO.getFirstName().toLowerCase() .contains(this.filter)) || (userCredentialVO.getLastName() != null && userCredentialVO.getLastName().toLowerCase() .contains(this.filter))) { filteredUserCredentialVOs.add(userCredentialVO); } } } else { this.filter = null; filteredUserCredentialVOs.addAll(userCredentialVOs); } } public List<UserCredentialVO> listUserCredentialVOs() { return filteredUserCredentialVOs; } public List<UserCredentialVO> listUserCredentialVOs(int startIndex, int count) { int toIndex = startIndex + count; List subList = new ArrayList(); if (startIndex > filteredUserCredentialVOs.size()) { return subList; } else if (toIndex > filteredUserCredentialVOs.size()) { toIndex = filteredUserCredentialVOs.size(); } return filteredUserCredentialVOs.subList(startIndex, toIndex); } public List<UserCredentialVO> listActiveUserCredentialVOs() { List<UserCredentialVO> activeUserCredentialVOs = new ArrayList<>(); List<UserCredential> userCredentials = userServices.getActiveUserCredentials(); for (UserCredential userCredential : userCredentials) { UserCredentialVO userCredentialVO = voBuilder.build(userCredential); activeUserCredentialVOs.add(userCredentialVO); } return activeUserCredentialVOs; } public UserCredentialVO getUserCredentialVO(String username) { UserCredential userCredential; try { userCredential = userServices.getUser(username); } catch (Exception e) { return null; } return voBuilder.build(userCredential); } public UserCredentialVO getUserCredentialVO(Integer index) { UserCredentialVO userCredentialVO = filteredUserCredentialVOs.get(index); return userCredentialVO != null ? userCredentialVO : null; } public int size() { return filteredUserCredentialVOs.size(); } public List<Integer> list() { List<Integer> indexes = new ArrayList<>(); for (int i = 0; i < filteredUserCredentialVOs.size(); i++) { UserCredentialVO userCredentialVO = filteredUserCredentialVOs.get(i); if (userCredentialVO != null) { indexes.add(i); } } return indexes; } public List<UserCredentialVO> listActifsUserCredentialVOsNotInGlobalGroup(String globalGroupCode) { List<UserCredentialVO> newUserCredentialVOs = new ArrayList<>(); List<String> usernamesInGlobalGroup = listUsernamesInGlobalGroup(globalGroupCode); for (UserCredentialVO userCredentialVO : listActiveUserCredentialVOs()) { if (!usernamesInGlobalGroup.contains(userCredentialVO.getUsername())) { newUserCredentialVOs.add(userCredentialVO); } } sort(newUserCredentialVOs); return newUserCredentialVOs; } private List<String> listUsernamesInGlobalGroup(String globalGroupCode) { List<String> usernames = new ArrayList<>(); for (UserCredential userCredential : userServices.getGlobalGroupActifUsers(globalGroupCode)) { usernames.add(userCredential.getUsername()); } return usernames; } private void sort(List<UserCredentialVO> userCredentialVOs) { Collections.sort(userCredentialVOs, new Comparator<UserCredentialVO>() { @Override public int compare(UserCredentialVO o1, UserCredentialVO o2) { return o1.getUsername().toLowerCase().compareTo(o2.getUsername().toLowerCase()); } }); } public List<UserCredentialVO> listUserCredentialVOsWithStatus(UserCredentialStatus status) { List<UserCredentialVO> userCredentialVOsWithStatus = new ArrayList<>(); for (UserCredentialVO userCredentialVO : filteredUserCredentialVOs) { if (status == userCredentialVO.getStatus()) { userCredentialVOsWithStatus.add(userCredentialVO); } } return userCredentialVOsWithStatus; } }