package com.constellio.app.modules.rm.extensions.app; import static java.util.Arrays.asList; import java.util.List; import com.constellio.app.api.extensions.BatchProcessingExtension; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.enums.CopyType; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningService; import com.constellio.app.modules.rm.ui.components.folder.fields.FolderCopyRuleFieldImpl; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.data.frameworks.extensions.ExtensionBooleanResult; import com.constellio.data.utils.ImpossibleRuntimeException; import com.constellio.model.entities.records.wrappers.User; import com.vaadin.ui.Field; public class RMBatchProcessingExtension extends BatchProcessingExtension { RMConfigs configs; AppLayerFactory appLayerFactory; String collection; DecommissioningService decommissioningService; RMSchemasRecordsServices rm; public RMBatchProcessingExtension(String collection, AppLayerFactory appLayerFactory) { this.appLayerFactory = appLayerFactory; this.collection = collection; this.configs = new RMConfigs(appLayerFactory.getModelLayerFactory().getSystemConfigurationsManager()); this.decommissioningService = new DecommissioningService(collection, appLayerFactory); this.rm = new RMSchemasRecordsServices(collection, appLayerFactory); } final List<String> hiddenFolderMetadatasInReport = asList(Folder.CATEGORY_ENTERED, Folder.ADMINISTRATIVE_UNIT_ENTERED, Folder.UNIFORM_SUBDIVISION_ENTERED, Folder.RETENTION_RULE_ENTERED, Folder.COPY_STATUS_ENTERED, Folder.MAIN_COPY_RULE_ID_ENTERED, Folder.APPLICABLE_COPY_RULES, Folder.ACTIVE_RETENTION_CODE, Folder.ACTIVE_RETENTION_TYPE, Folder.SEMIACTIVE_RETENTION_CODE, Folder.SEMIACTIVE_RETENTION_TYPE, Folder.INACTIVE_DISPOSAL_TYPE, Folder.RETENTION_RULE_ADMINISTRATIVE_UNITS, Folder.COPY_RULES_EXPECTED_DEPOSIT_DATES, Folder.COPY_RULES_EXPECTED_TRANSFER_DATES, Folder.COPY_RULES_EXPECTED_DESTRUCTION_DATES, Folder.DECOMMISSIONING_DATE, Folder.FOLDER_TYPE); final List<String> hiddenDocumentMetadatasInReport = asList(Document.ALERT_USERS_WHEN_AVAILABLE, Document.APPLICABLE_COPY_RULES, "calendarYear", Document.ACTUAL_DEPOSIT_DATE_ENTERED, Document.ACTUAL_DESTRUCTION_DATE_ENTERED, Document.ACTUAL_TRANSFER_DATE_ENTERED, Document.INHERITED_FOLDER_RETENTION_RULE, Document.MAIN_COPY_RULE_ID_ENTERED); final List<String> folderUnmodifiableMetadatas = asList(Folder.UNIFORM_SUBDIVISION_ENTERED); final List<String> folderDecommissioningDates = asList(Folder.ACTUAL_DEPOSIT_DATE, Folder.ACTUAL_DESTRUCTION_DATE, Folder.ACTUAL_TRANSFER_DATE); @Override public ExtensionBooleanResult isMetadataDisplayedWhenModified(IsMetadataDisplayedWhenModifiedParams params) { if (params.isSchemaType(Folder.SCHEMA_TYPE)) { return ExtensionBooleanResult.falseIf(hiddenFolderMetadatasInReport.contains(params.getMetadata().getLocalCode())); } if (params.isSchemaType(Document.SCHEMA_TYPE)) { return ExtensionBooleanResult.falseIf(hiddenDocumentMetadatasInReport.contains(params.getMetadata().getLocalCode())); } return ExtensionBooleanResult.NOT_APPLICABLE; } @Override public ExtensionBooleanResult isMetadataModifiable(IsMetadataModifiableParams params) { User user = params.getUser(); if (params.isSchemaType(Folder.SCHEMA_TYPE)) { Folder folder = rm.getFolder(params.getRecordId()); if (folderUnmodifiableMetadatas.contains(params.getMetadata().getLocalCode())) { return ExtensionBooleanResult.FALSE; } if (folderDecommissioningDates.contains(params.getMetadata().getLocalCode())) { return ExtensionBooleanResult.trueIf(user.has(RMPermissionsTo.MODIFY_FOLDER_DECOMMISSIONING_DATES).on(folder)); } } if (params.isSchemaType(Document.SCHEMA_TYPE)) { } return ExtensionBooleanResult.NOT_APPLICABLE; } @Override public void addCustomLabel(AddCustomLabelsParams params) { if (params.isSchemaType(Folder.SCHEMA_TYPE)) { params.setCustomPrefixLabelWithKey(Folder.ADMINISTRATIVE_UNIT_ENTERED, "batchProceesing.only.root.folders"); params.setCustomPrefixLabelWithKey(Folder.CATEGORY_ENTERED, "batchProceesing.only.root.folders"); params.setCustomPrefixLabelWithKey(Folder.RETENTION_RULE_ENTERED, "batchProceesing.only.root.folders"); params.setCustomPrefixLabelWithKey(Folder.MAIN_COPY_RULE_ID_ENTERED, "batchProceesing.only.not.calculated"); if (!configs.isCopyRuleTypeAlwaysModifiable()) { params.setCustomPrefixLabelWithKey(Folder.COPY_STATUS_ENTERED, "batchProceesing.only.not.calculated"); } } } @Override public Field buildMetadataField(MetadataVO metadataVO, RecordVO recordVO) { String metadataLocalCode = metadataVO.getLocalCode(); if (metadataLocalCode.equals(Folder.TYPE) || metadataLocalCode.equals(Document.TYPE) || metadataLocalCode .equals(ContainerRecord.TYPE)) { return null; } if (metadataLocalCode.equals(Folder.MAIN_COPY_RULE_ID_ENTERED)) { CopyRetentionRule rule = getSelectedRule(recordVO); if (rule != null && isMainCopy(recordVO)) { return new FolderCopyRuleFieldImpl(asList(rule)); } } throw new ImpossibleRuntimeException("No specific field for metadata " + metadataLocalCode); } private boolean isMainCopy(RecordVO recordVO) { CopyType copyType = recordVO.get(Folder.COPY_STATUS); return copyType != null && copyType.equals(CopyType.PRINCIPAL); } private CopyRetentionRule getSelectedRule(RecordVO recordVO) { return recordVO.get(Folder.RETENTION_RULE_ENTERED); } @Override public boolean hasMetadataSpecificAssociatedField(MetadataVO metadataVO) { String metadataLocalCode = metadataVO.getLocalCode(); return metadataLocalCode.equals(Folder.TYPE) || metadataLocalCode.equals(Document.TYPE) || metadataLocalCode.equals(ContainerRecord.TYPE) || metadataLocalCode.equals(Folder.MAIN_COPY_RULE_ID_ENTERED); } }