package com.constellio.app.ui.pages.management.configs;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.List;
import com.constellio.app.ui.entities.SystemConfigurationGroupVO;
import com.constellio.app.ui.entities.SystemConfigurationVO;
import com.constellio.app.ui.framework.data.SystemConfigurationGroupdataProvider;
import com.constellio.app.ui.pages.base.BasePresenter;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.configs.SystemConfiguration;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.frameworks.validation.ValidationErrors;
import com.constellio.model.services.configs.SystemConfigurationsManager;
public class ConfigManagementPresenter extends BasePresenter<ConfigManagementView> {
private SystemConfigurationGroupdataProvider dataProvider;
public ConfigManagementPresenter(ConfigManagementView view) {
super(view);
this.dataProvider = new SystemConfigurationGroupdataProvider();
view.setDataProvider(dataProvider);
}
void saveButtonClicked() {
ValidationErrors errors = new ValidationErrors();
List<String> groupCodes = dataProvider.getCodesList();
for (String groupCode : groupCodes) {
validateGroup(groupCode, errors);
}
if (errors.getValidationErrors().size() != 0) {
view.showErrorMessage(buildErrorMessage(errors));
} else {
boolean reindexingRequired = false;
for (String groupCode : groupCodes) {
boolean reindexingRequiredForGroup = saveGroup(groupCode);
if (reindexingRequiredForGroup) {
reindexingRequired = true;
}
}
if (reindexingRequired) {
view.showMessage($("ConfigManagementView.reindexationNeeded"));
appLayerFactory.getSystemGlobalConfigsManager().setReindexingRequired(true);
} else {
view.showMessage($("ConfigManagementView.saved"));
}
view.navigate().to().adminModule();
}
}
void validateGroup(String groupCode, ValidationErrors errors) {
SystemConfigurationGroupVO systemConfigurationGroup = dataProvider.getSystemConfigurationGroup(groupCode);
if (!systemConfigurationGroup.isUpdated()) {
return;
}
SystemConfigurationsManager systemConfigurationsManager = modelLayerFactory.getSystemConfigurationsManager();
List<SystemConfiguration> previousConfigs = systemConfigurationsManager.getNonHiddenGroupConfigurationsWithCodeOrderedByName(groupCode);
for (int i = 0; i < previousConfigs.size(); i++) {
SystemConfigurationVO systemConfigurationVO = systemConfigurationGroup.getSystemConfigurationVO(i);
if (systemConfigurationVO.isUpdated()) {
SystemConfiguration systemConfiguration = previousConfigs.get(i);
systemConfigurationsManager.validate(systemConfiguration, systemConfigurationVO.getValue(), errors);
if (errors.getValidationErrors().size() != 0) {
break;
}
}
}
}
public boolean saveGroup(String groupCode) {
boolean reindexingRequired = false;
SystemConfigurationGroupVO systemConfigurationGroup = dataProvider.getSystemConfigurationGroup(groupCode);
if (!systemConfigurationGroup.isUpdated()) {
return false;
}
SystemConfigurationsManager systemConfigurationsManager = modelLayerFactory.getSystemConfigurationsManager();
List<SystemConfiguration> previousConfigs = systemConfigurationsManager.getNonHiddenGroupConfigurationsWithCodeOrderedByName(groupCode);
for (int i = 0; i < previousConfigs.size(); i++) {
SystemConfiguration systemConfiguration = previousConfigs.get(i);
SystemConfigurationVO systemConfigurationVO = systemConfigurationGroup.getSystemConfigurationVO(i);
if (systemConfigurationVO.isUpdated()) {
reindexingRequired = reindexingRequired || systemConfigurationsManager.setValue(systemConfiguration, systemConfigurationVO.getValue());
systemConfigurationVO.afterSetValue();
systemConfigurationGroup.valueSave(i);
}
}
return reindexingRequired;
}
private String buildErrorMessage(ValidationErrors validationErrors) {
return $(validationErrors);
}
public String getLabel(String groupCode, String code) {
return $("SystemConfigurationGroup." + groupCode + "." + code);
}
public String getGroupLabel(String groupCode) {
return $("SystemConfigurationGroup." + groupCode);
}
public void backButtonClick() {
view.navigate().to().adminModule();
}
@Override
protected boolean hasPageAccess(String params, User user) {
return userServices().has(user).globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_CONFIGURATION);
}
}