package com.constellio.app.ui.pages.management.schemas.display.group; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; import com.constellio.app.entities.schemasDisplay.SchemaTypeDisplayConfig; import com.constellio.app.ui.pages.base.SingleSchemaBasePresenter; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.Language; import com.constellio.model.entities.records.wrappers.User; public class ListMetadataGroupSchemaTypePresenter extends SingleSchemaBasePresenter<ListMetadataGroupSchemaTypeView> { public ListMetadataGroupSchemaTypePresenter(ListMetadataGroupSchemaTypeView view) { super(view); } private String schemaTypeCode; public void setSchemaTypeCode(String schemaTypeCode) { this.schemaTypeCode = schemaTypeCode; } public List<String> getMetadataGroupList() { SchemaTypeDisplayConfig typeConfig = schemasDisplayManager().getType(collection, schemaTypeCode); return new ArrayList<>(typeConfig.getMetadataGroup().keySet()); } public String getGroupLabel(String code, String language) { String label = ""; SchemaTypeDisplayConfig schemaConfig = schemasDisplayManager().getType(collection, schemaTypeCode); Map<String, Map<Language, String>> group = schemaConfig.getMetadataGroup(); if (group.containsKey(code) && group.get(code).containsKey(Language.withCode(language))) { label = group.get(code).get(Language.withCode(language)); } return label; } @Override protected boolean hasPageAccess(String params, User user) { return user.has(CorePermissions.MANAGE_METADATASCHEMAS).globally(); } public void addGroupMetadata(String code, Map<String, String> group) { SchemaTypeDisplayConfig typeConfig = schemasDisplayManager().getType(collection, schemaTypeCode); Map<String, Map<Language, String>> groups = typeConfig.getMetadataGroup(); Map<String, Map<Language, String>> newGroups = new HashMap<>(); newGroups.putAll(groups); Map<Language, String> labels = new HashMap<>(); for (Entry<String, String> entry : group.entrySet()) { labels.put(Language.withCode(entry.getKey()), entry.getValue()); } if (!groups.keySet().contains(code)) { newGroups.put(code, labels); typeConfig = typeConfig.withMetadataGroup(newGroups); schemasDisplayManager().saveType(typeConfig); view.refreshTable(); } else { view.displayAddError(); } } public boolean isValidCodeAndLabels(String code, Map<String, String> group) { if (StringUtils.isBlank(code)) { view.invalidCodeOrLabels(); return false; } for (Entry<String, String> entry : group.entrySet()) { if (StringUtils.isBlank(entry.getKey()) || StringUtils.isBlank(entry.getValue())) { view.invalidCodeOrLabels(); return false; } } return true; } public void deleteGroupMetadata(String group) { SchemaTypeDisplayConfig typeConfig = schemasDisplayManager().getType(collection, schemaTypeCode); Map<String, Map<Language, String>> groups = typeConfig.getMetadataGroup(); Map<String, Map<Language, String>> newGroups = new HashMap<>(); newGroups.putAll(groups); if (newGroups.size() > 1) { newGroups.remove(group); typeConfig = typeConfig.withMetadataGroup(newGroups); schemasDisplayManager().saveType(typeConfig); view.refreshTable(); } else { view.displayDeleteError(); } } public List<String> getCollectionLanguages() { return collectionsManager().getCollectionLanguages(collection); } public void backButtonClicked() { view.navigate().to().listSchemaTypes(); } }