package com.constellio.app.ui.pages.globalGroup; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.constellio.app.ui.application.NavigatorConfigurationService; import com.constellio.app.ui.entities.GlobalGroupVO; import com.constellio.app.ui.entities.UserCredentialVO; import com.constellio.app.ui.framework.builders.GlobalGroupToVOBuilder; import com.constellio.app.ui.framework.builders.UserCredentialToVOBuilder; import com.constellio.app.ui.framework.data.GlobalGroupVODataProvider; import com.constellio.app.ui.framework.data.UserCredentialVODataProvider; import com.constellio.app.ui.pages.base.BasePresenter; import com.constellio.app.ui.params.ParamUtils; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.global.GlobalGroup; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.services.users.UserServices; @SuppressWarnings("serial") public class DisplayGlobalGroupPresenter extends BasePresenter<DisplayGlobalGroupView> { transient UserServices userServices; private Map<String, String> paramsMap; private String breadCrumb; public DisplayGlobalGroupPresenter(DisplayGlobalGroupView view) { super(view); init(); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); init(); } private void init() { userServices = modelLayerFactory.newUserServices(); } public GlobalGroupVO getGlobalGroupVO(String code) { GlobalGroup globalGroup = userServices.getGroup(code); GlobalGroupToVOBuilder voBuilder = new GlobalGroupToVOBuilder(); return voBuilder.build(globalGroup); } public void backButtonClicked() { navigateToBackPage(); } public void editButtonClicked(GlobalGroupVO entity) { paramsMap.put("globalGroupCode", entity.getCode()); String parameters = getParameters(); view.navigate().to().editGlobalGroup(parameters); } public void deleteButtonClicked(GlobalGroupVO globalGroupVO) { String username = view.getSessionContext().getCurrentUser().getUsername(); UserCredential userCredential = modelLayerFactory.getUserCredentialsManager().getUserCredential(username); GlobalGroup globalGroup = userServices.getGroup(globalGroupVO.getCode()); userServices.logicallyRemoveGroupHierarchy(userCredential, globalGroup); cleanInvalidBackPages(); navigateToBackPage(); } void cleanInvalidBackPages() { if (paramsMap.containsKey("globalGroupCode")) { paramsMap.remove("globalGroupCode"); } breadCrumb = breadCrumb.replace(NavigatorConfigurationService.GROUP_ADD_EDIT, ""); breadCrumb = breadCrumb.replace(NavigatorConfigurationService.GROUP_DISPLAY, ""); breadCrumb = breadCrumb.replace("//", "/"); } public UserCredentialVODataProvider getUserCredentialVODataProvider(String groupCode) { UserCredentialToVOBuilder voBuilder = newUserCredentialVOBuilder(); return newUserCredentialVODataProvider(groupCode, voBuilder); } public GlobalGroupVODataProvider getGlobalGroupVODataProvider() { GlobalGroupToVOBuilder voBuilder = newGlobalGroupVOBuilder(); return newGlobalGroupVODataProvider(voBuilder); } public void displayUserCredentialButtonClicked(UserCredentialVO entity, String globalGroupCode) { paramsMap.put("username", entity.getUsername()); paramsMap.put("globalGroupCode", globalGroupCode); String parameters = getParameters(); view.navigate().to().displayUserCredential(parameters); } public void editUserCredentialButtonClicked(UserCredentialVO entity, String globalGroupCode) { paramsMap.put("username", entity.getUsername()); paramsMap.put("globalGroupCode", globalGroupCode); String parameters = getParameters(); view.navigate().to().editUserCredential(parameters); } public void deleteUserCredentialButtonClicked(UserCredentialVO userCredentialVO, String globalGroupCode) { userServices.removeUserFromGlobalGroup(userCredentialVO.getUsername(), globalGroupCode); view.refreshTable(); } public void addUserCredentialButtonClicked(String globalGroupCode, String username) { List<String> newGlobalGroups = new ArrayList<>(); UserCredential userCredential = userServices.getUserCredential(username); List<String> globalGroups = userCredential.getGlobalGroups(); newGlobalGroups.addAll(globalGroups); newGlobalGroups.add(globalGroupCode); userCredential = userCredential.withGlobalGroups(newGlobalGroups); userServices.addUpdateUserCredential(userCredential); view.refreshTable(); } public void addSubGroupClicked(GlobalGroupVO entity) { paramsMap.put("parentGlobalGroupCode", entity.getCode()); paramsMap.remove("globalGroupCode"); String parameters = ParamUtils.addParams(breadCrumb + "/" + NavigatorConfigurationService.GROUP_DISPLAY, paramsMap); view.navigate().to().addGlobalGroup(parameters); } public void setParamsMap(Map<String, String> paramsMap) { this.paramsMap = paramsMap; } public void setBreadCrumb(String breadCrumb) { this.breadCrumb = breadCrumb; } private String getParameters() { Map<String, Object> newParamsMap = new HashMap<>(); newParamsMap.putAll(paramsMap); return ParamUtils.addParams(breadCrumb + "/" + NavigatorConfigurationService.GROUP_DISPLAY, newParamsMap); } private void navigateToBackPage() { String viewNames[] = breadCrumb.split("/"); String backPage = viewNames[viewNames.length - 1]; breadCrumb = breadCrumb.replace(backPage, ""); if (breadCrumb.endsWith("/")) { breadCrumb = breadCrumb.substring(0, breadCrumb.length() - 1); } if (paramsMap.containsKey("parentGlobalGroupCode")) { paramsMap.put("globalGroupCode", paramsMap.get("parentGlobalGroupCode")); paramsMap.remove("parentGlobalGroupCode"); } Map<String, Object> newParamsMap = new HashMap<>(); newParamsMap.putAll(paramsMap); String parameters = ParamUtils.addParams(breadCrumb, newParamsMap); parameters = correctSlashs(parameters); backPage = correctUrl(backPage, parameters); view.navigate().to().url(backPage + parameters); } private String correctUrl(String backPage, String parameters) { if (!backPage.endsWith("/") && !parameters.startsWith("/")) { backPage += "/"; } return backPage; } private String correctSlashs(String parameters) { while (parameters.contains("//")) { parameters = parameters.replace("//", "/"); } return parameters; } UserCredentialVODataProvider newUserCredentialVODataProvider(String groupCode, UserCredentialToVOBuilder voBuilder) { return new UserCredentialVODataProvider(voBuilder, modelLayerFactory, groupCode); } UserCredentialToVOBuilder newUserCredentialVOBuilder() { return new UserCredentialToVOBuilder(); } GlobalGroupVODataProvider newGlobalGroupVODataProvider(GlobalGroupToVOBuilder voBuilder) { return new GlobalGroupVODataProvider(voBuilder, modelLayerFactory, true); } GlobalGroupToVOBuilder newGlobalGroupVOBuilder() { return new GlobalGroupToVOBuilder(); } public void displaySubGroupCliked(GlobalGroupVO entity) { String parameters = getParameters(entity); view.navigate().to().displayGlobalGroup(parameters); } public void editSubGroupButtonClicked(GlobalGroupVO entity) { String parameters = getParameters(entity); view.navigate().to().editGlobalGroup(parameters); } public void deleteSubGroupButtonClicked(GlobalGroupVO entity) { UserServices userServices = modelLayerFactory.newUserServices(); String username = view.getSessionContext().getCurrentUser().getUsername(); UserCredential userCredential = modelLayerFactory.getUserCredentialsManager().getUserCredential(username); GlobalGroup globalGroup = userServices.getGroup(entity.getCode()); userServices.logicallyRemoveGroupHierarchy(userCredential, globalGroup); //TODO refresh table view.refreshTable(); } private String getParameters(GlobalGroupVO entity) { Map<String, Object> params = new HashMap<>(); params.putAll(paramsMap); if (entity.getParent() != null) { params.put("parentGlobalGroupCode", entity.getParent()); } else if (params.containsKey("parentGlobalGroupCode")) { params.remove("parentGlobalGroupCode"); } params.put("globalGroupCode", entity.getCode()); return ParamUtils.addParams(breadCrumb + "/" + NavigatorConfigurationService.GROUP_DISPLAY, params); } @Override protected boolean hasPageAccess(String params, User user) { return userServices.has(user).globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_GROUPS); } }