package com.constellio.app.modules.rm.reports.model.administration.plan; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import com.constellio.app.modules.rm.reports.model.administration.plan.UserReportModel.UserReportModel_AdministrativeUnit; import com.constellio.app.modules.rm.reports.model.administration.plan.UserReportModel.UserReportModel_User; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.entities.security.Role; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.StatusFilter; import com.constellio.model.services.search.query.ReturnedMetadatasFilter; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators; import com.constellio.model.services.security.AuthorizationsServices; public class UserReportPresenter { private String collection; private ModelLayerFactory modelLayerFactory; private RMSchemasRecordsServices rmSchemasRecordsServices; private SearchServices searchServices; private RecordServices recordServices; private AuthorizationsServices authorizationsServices; private List<AdministrativeUnit> administrativeUnits; public UserReportPresenter(String collection, ModelLayerFactory modelLayerFactory) { this.collection = collection; this.modelLayerFactory = modelLayerFactory; } public UserReportModel build() { init(); UserReportModel model = new UserReportModel(); List<UserReportModel_User> modelUsers = getModelUsers(); model.setUsers(modelUsers); return model; } private void init() { searchServices = modelLayerFactory.newSearchServices(); rmSchemasRecordsServices = new RMSchemasRecordsServices(collection, modelLayerFactory); recordServices = modelLayerFactory.newRecordServices(); authorizationsServices = modelLayerFactory.newAuthorizationsServices(); administrativeUnits = getAdministrativeUnits(); } private List<UserReportModel_User> getModelUsers() { List<UserReportModel_User> modelUsers = new ArrayList<>(); List<User> users = getUsers(); if (users != null) { for (User user : users) { if (user != null) { UserReportModel_User modelUser = new UserReportModel_User(); String firstName = StringUtils.defaultString(user.getFirstName()); modelUser.setFirstName(firstName); String lastName = StringUtils.defaultString(user.getLastName()); modelUser.setLastName(lastName); String userName = StringUtils.defaultString(user.getUsername()); modelUser.setUserName(userName); String userId = StringUtils.defaultString(user.getId()); userId = StringUtils.stripStart(userId, "0"); modelUser.setUserId(userId); String status = StringUtils.defaultString(isActive(user)); modelUser.setStatus(status); modelUser.setAdministrativeUnits(getAdministrativeUnitsModel(user)); modelUsers.add(modelUser); } } } return modelUsers; } private List<User> getUsers() { LogicalSearchQuery allUsersQuery = new LogicalSearchQuery(LogicalSearchQueryOperators.from( rmSchemasRecordsServices.userSchemaType()).returnAll()).filteredByStatus(StatusFilter.ACTIVES); return rmSchemasRecordsServices.wrapUsers(searchServices.search(allUsersQuery)); } private String isActive(User user) { boolean isDisabled = true; if (user != null) { String userId = user.getId(); if (StringUtils.isNotEmpty(userId)) { Record userRecord = recordServices.getDocumentById(user.getId()); if (userRecord != null) { Boolean disabledValue = userRecord.get(Schemas.LOGICALLY_DELETED_STATUS); isDisabled = disabledValue != null && disabledValue; } } } return isDisabled ? "Inactif" : "Actif"; } List<UserReportModel_AdministrativeUnit> getAdministrativeUnitsModel(User user) { List<UserReportModel_AdministrativeUnit> modelAdministrativeUnits = new ArrayList<>(); for (AdministrativeUnit administrativeUnit : administrativeUnits) { List<User> users = authorizationsServices.getUsersWithRoleForRecord(Role.WRITE, rmSchemasRecordsServices.getAdministrativeUnit(administrativeUnit.getId()).getWrappedRecord()); if (users.contains(user)) { UserReportModel_AdministrativeUnit modelAdministrativeUnit = new UserReportModel_AdministrativeUnit(); String code = StringUtils.defaultString(administrativeUnit.getCode()); String description = StringUtils.defaultString(administrativeUnit .getDescription()); String title = StringUtils.defaultString(administrativeUnit.getTitle()); modelAdministrativeUnit.setCode(code); modelAdministrativeUnit.setDescription(description); modelAdministrativeUnit.setLabel(title); modelAdministrativeUnits.add(modelAdministrativeUnit); } } return modelAdministrativeUnits; } List<AdministrativeUnit> getAdministrativeUnits() { LogicalSearchQuery allAdminUnitsQuery = new LogicalSearchQuery(LogicalSearchQueryOperators.from( rmSchemasRecordsServices.administrativeUnit.schemaType()).returnAll()).filteredByStatus(StatusFilter.ACTIVES) .sortAsc(Schemas.CODE).setReturnedMetadatas(ReturnedMetadatasFilter.onlyMetadatas(Schemas.CODE)); return rmSchemasRecordsServices.wrapAdministrativeUnits(searchServices.search(allAdminUnitsQuery)); } public FoldersLocator getFoldersLocator() { return modelLayerFactory.getFoldersLocator(); } }