package com.constellio.app.ui.pages.management.schemas.schema; import static com.constellio.app.ui.i18n.i18n.$; import static com.constellio.model.entities.schemas.Schemas.CREATED_BY; import static com.constellio.model.entities.schemas.Schemas.CREATED_ON; import static com.constellio.model.entities.schemas.Schemas.IDENTIFIER; import static com.constellio.model.entities.schemas.Schemas.LEGACY_ID; import static com.constellio.model.entities.schemas.Schemas.MODIFIED_BY; import static com.constellio.model.entities.schemas.Schemas.MODIFIED_ON; import java.util.LinkedHashMap; import java.util.Map; import com.constellio.app.services.metadata.MetadataDeletionException; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_CalculatedMetadataSource; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_CopiedMetadataReference; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_CopiedMetadataSource; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_ExtractedMetadataSource; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_FacetMetadata; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_InheritedMetadata; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_PopulatedMetadata; import com.constellio.app.services.metadata.MetadataDeletionException.MetadataDeletionException_SystemMetadata; import com.constellio.app.services.metadata.MetadataDeletionService; import com.constellio.app.ui.application.NavigatorConfigurationService; import com.constellio.app.ui.entities.FormMetadataSchemaVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.framework.builders.MetadataSchemaToFormVOBuilder; import com.constellio.app.ui.framework.builders.MetadataToVOBuilder; import com.constellio.app.ui.framework.data.MetadataVODataProvider; import com.constellio.app.ui.pages.base.SingleSchemaBasePresenter; 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.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.services.schemas.MetadataSchemasManager; public class AddEditSchemaMetadataPresenter extends SingleSchemaBasePresenter<AddEditSchemaMetadataView> { private transient MetadataDeletionService metadataDeletionService; public AddEditSchemaMetadataPresenter(AddEditSchemaMetadataView view) { super(view); } @Override protected boolean hasPageAccess(String params, User user) { return user.has(CorePermissions.MANAGE_METADATASCHEMAS).globally(); } private Map<String, String> parameters; public void setParameters(Map<String, String> params) { this.parameters = params; } public Map<String, MetadataVODataProvider> getDataProviders() { Map<String, MetadataVODataProvider> dataProviders = new LinkedHashMap<>(); String schemaCode = getSchemaCode(); MetadataVODataProvider custom = new MetadataVODataProvider(new MetadataToVOBuilder(), modelLayerFactory, collection, schemaCode) { @Override protected boolean isAccepted(Metadata metadata) { return metadata.getLocalCode().startsWith("USR") && metadata.isEnabled() && (!metadata.isSystemReserved() || metadata.isSameLocalCodeThanAny(IDENTIFIER, CREATED_BY, MODIFIED_BY, CREATED_ON, MODIFIED_ON)); } }; MetadataVODataProvider system = new MetadataVODataProvider(new MetadataToVOBuilder(), modelLayerFactory, collection, schemaCode) { @Override protected boolean isAccepted(Metadata metadata) { return !metadata.getLocalCode().startsWith("USR") && metadata.isEnabled() && (!metadata.isSystemReserved() || metadata.isSameLocalCodeThanAny(IDENTIFIER, CREATED_BY, MODIFIED_BY, CREATED_ON, MODIFIED_ON, LEGACY_ID)); } }; MetadataVODataProvider disabled = new MetadataVODataProvider(new MetadataToVOBuilder(), modelLayerFactory, collection, schemaCode) { @Override protected boolean isAccepted(Metadata metadata) { return !metadata.isEnabled() && (!metadata.isSystemReserved() || metadata .isSameLocalCodeThanAny(IDENTIFIER, CREATED_BY, MODIFIED_BY, CREATED_ON, MODIFIED_ON)); } }; dataProviders.put($("AddEditSchemaMetadataView.tabs.custom", custom.size()), custom); dataProviders.put($("AddEditSchemaMetadataView.tabs.system", system.size()), system); dataProviders.put($("AddEditSchemaMetadataView.tabs.disabled", disabled.size()), disabled); return dataProviders; } public FormMetadataSchemaVO getSchemaVO() { String schemaCode = getSchemaCode(); FormMetadataSchemaVO schemaVO = null; if (schemaCode != null) { MetadataSchemasManager manager = modelLayerFactory.getMetadataSchemasManager(); MetadataSchema schema = manager.getSchemaTypes(collection).getSchema(schemaCode); schemaVO = new MetadataSchemaToFormVOBuilder().build(schema, view.getSessionContext()); } return schemaVO; } public void addButtonClicked() { parameters.put("schemaCode", getSchemaCode()); parameters.put("metadataCode", ""); String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_METADATA, parameters); view.navigate().to().addMetadata(params); } public void editButtonClicked(MetadataVO metadataVO) { parameters.put("schemaCode", getSchemaCode()); parameters.put("metadataCode", metadataVO.getCode()); String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_METADATA, parameters); view.navigate().to().editMetadata(params); } public void backButtonClicked() { String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_SCHEMA, parameters); view.navigate().to().listSchema(params); } public void deleteButtonClicked(MetadataVO entity) { try { metadataDeletionService().deleteMetadata(entity.getCode()); String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_METADATA, parameters); view.navigate().to().listSchemaMetadata(params); } catch (MetadataDeletionException e) { view.showErrorMessage(getAppropriateMessage(e)); } } private String getAppropriateMessage(MetadataDeletionException e) { if (e instanceof MetadataDeletionException_SystemMetadata) { return $("MetadataDeletionException_SystemMetadata"); } else if (e instanceof MetadataDeletionException_PopulatedMetadata) { return $("MetadataDeletionException_PopulatedMetadata"); } else if (e instanceof MetadataDeletionException_CopiedMetadataSource) { return $("MetadataDeletionException_CopiedMetadataSource"); } else if (e instanceof MetadataDeletionException_CopiedMetadataReference) { return $("MetadataDeletionException_CopiedMetadataReference"); } else if (e instanceof MetadataDeletionException_CalculatedMetadataSource) { return $("MetadataDeletionException_CalculatedMetadataSource"); } else if (e instanceof MetadataDeletionException_ExtractedMetadataSource) { return $("MetadataDeletionException_ExtractedMetadataSource"); } else if (e instanceof MetadataDeletionException_InheritedMetadata) { return $("MetadataDeletionException_InheritedMetadata"); } else if (e instanceof MetadataDeletionException_FacetMetadata) { return $("MetadataDeletionException_FacetMetadata"); } return null; } private MetadataDeletionService metadataDeletionService() { if (metadataDeletionService == null) { this.metadataDeletionService = new MetadataDeletionService(appLayerFactory, collection); } return metadataDeletionService; } public boolean isMetadataDeletable(MetadataVO entity) { return metadataDeletionService().isMetadataDeletable(entity.getCode()); } }