package com.constellio.app.ui.pages.management.extractors; import java.util.ArrayList; import java.util.List; import com.constellio.app.ui.entities.MetadataExtractorVO; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder; import com.constellio.app.ui.framework.builders.MetadataToVOBuilder; import com.constellio.app.ui.pages.base.BasePresenter; import com.constellio.app.ui.pages.base.SessionContext; 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.MetadataPopulateConfigs; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.services.schemas.MetadataSchemaTypesAlteration; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.schemas.builders.MetadataBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; public class ListMetadataExtractorsPresenter extends BasePresenter<ListMetadataExtractorsView> { private MetadataToVOBuilder metadataToVOBuilder; private MetadataSchemaToVOBuilder metadataSchemaToVOBuilder; public ListMetadataExtractorsPresenter(ListMetadataExtractorsView view) { super(view); metadataToVOBuilder = new MetadataToVOBuilder(); metadataSchemaToVOBuilder = new MetadataSchemaToVOBuilder(); SessionContext sessionContext = view.getSessionContext(); MetadataSchemaTypes types = types(); List<MetadataExtractorVO> metadataExtractorVOs = getMetadataExtractorVOs(sessionContext, types); view.setMetadataExtractorVOs(metadataExtractorVOs); } List<MetadataExtractorVO> getMetadataExtractorVOs(SessionContext sessionContext, MetadataSchemaTypes types) { List<MetadataExtractorVO> metadataExtractorVOs = new ArrayList<>(); for (Metadata metadata : getPopulatedMetadatas()) { String schemaCode = metadata.getSchemaCode(); MetadataSchema schema = types.getSchema(schemaCode); MetadataSchemaVO schemaVO = metadataSchemaToVOBuilder.build(schema, VIEW_MODE.TABLE, sessionContext); MetadataVO metadataVO = metadataToVOBuilder.build(metadata, schemaVO, sessionContext); MetadataPopulateConfigs metadataPopulateConfigs = metadata.getPopulateConfigs(); metadataExtractorVOs.add(new MetadataExtractorVO(metadataVO, metadataPopulateConfigs)); } return metadataExtractorVOs; } private List<Metadata> getPopulatedMetadatas() { List<Metadata> populatedMetadatas = new ArrayList<>(); for (MetadataSchemaType type : types().getSchemaTypes()) { for (MetadataSchema schema : type.getAllSchemas()) { for (Metadata metadata : schema.getMetadatas()) { if (metadata.getPopulateConfigs().isConfigured()) { if (!metadata.inheritDefaultSchema() || !metadata.getPopulateConfigs().equals(metadata.getInheritance().getPopulateConfigs())) { populatedMetadatas.add(metadata); } } } } } return populatedMetadatas; } @Override protected boolean hasPageAccess(String params, User user) { return user.has(CorePermissions.MANAGE_METADATAEXTRACTOR).globally(); } void addButtonClicked() { view.navigate().to().addMetadataExtractor(); } void editButtonClicked(MetadataExtractorVO metadataExtractorVO) { MetadataVO metadataVO = metadataExtractorVO.getMetadataVO(); view.navigate().to().editMetadataExtractor(metadataVO.getCode()); } public void deleteButtonClicked(MetadataExtractorVO metadataExtractorVO) { MetadataVO metadataVO = metadataExtractorVO.getMetadataVO(); final String metadataCode = metadataVO.getCode(); MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager(); metadataSchemasManager.modify(collection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { MetadataBuilder metadataBuilder = types.getMetadata(metadataCode); metadataBuilder.getPopulateConfigsBuilder().getStyles().clear(); metadataBuilder.getPopulateConfigsBuilder().getProperties().clear(); metadataBuilder.getPopulateConfigsBuilder().getRegexes().clear(); } }); view.removeMetadataExtractorVO(metadataExtractorVO); } public void backButtonClicked() { view.navigate().to().adminModule(); } }