package com.constellio.app.modules.rm.ui.components.retentionRule; import static com.constellio.app.modules.rm.wrappers.RetentionRule.COPY_RETENTION_RULES; import static com.constellio.app.modules.rm.wrappers.RetentionRule.DOCUMENT_COPY_RETENTION_RULES; import static com.constellio.app.modules.rm.wrappers.RetentionRule.DOCUMENT_TYPES_DETAILS; import static com.constellio.app.modules.rm.wrappers.RetentionRule.PRINCIPAL_DEFAULT_DOCUMENT_COPY_RETENTION_RULE; import static com.constellio.app.modules.rm.wrappers.RetentionRule.SECONDARY_DEFAULT_DOCUMENT_COPY_RETENTION_RULE; import java.util.List; import com.constellio.app.modules.rm.ui.components.RMMetadataDisplayFactory; import com.constellio.app.modules.rm.ui.entities.RetentionRuleVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.MetadataValueVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.VariableRetentionPeriodVO; import com.vaadin.ui.Component; public class RetentionRuleDisplayFactory extends RMMetadataDisplayFactory { private final RetentionRuleDisplayPresenter presenter; private final List<VariableRetentionPeriodVO> openPeriodsDDVList; public RetentionRuleDisplayFactory(RetentionRuleDisplayPresenter presenter) { this.presenter = presenter; this.openPeriodsDDVList = presenter.getOpenActivePeriodsDDVList(); } @Override public Component build(RecordVO recordVO, MetadataValueVO metadataValueVO) { Component component; MetadataVO metadataVO = metadataValueVO.getMetadata(); String metadataCode = MetadataVO.getCodeWithoutPrefix(metadataVO.getCode()); RetentionRuleVO retentionRuleVO = (RetentionRuleVO) recordVO; if (COPY_RETENTION_RULES.equals(metadataCode)) { component = new FolderCopyRetentionRuleTable(retentionRuleVO, false, presenter); component.setVisible(presenter.shouldDisplayFolderRetentionRules()); } else if (DOCUMENT_COPY_RETENTION_RULES.equals(metadataCode)) { component = new DocumentCopyRetentionRuleTable(retentionRuleVO, false, presenter); component.setVisible(presenter.shouldDisplayDocumentRetentionRules()); } else if (PRINCIPAL_DEFAULT_DOCUMENT_COPY_RETENTION_RULE.equals(metadataCode)) { component = new DocumentDefaultCopyRetentionRuleTable(retentionRuleVO, false, presenter); component.setVisible(presenter.shouldDisplayDefaultDocumentRetentionRules()); } else if (SECONDARY_DEFAULT_DOCUMENT_COPY_RETENTION_RULE.equals(metadataCode)) { component = null; } else if (DOCUMENT_TYPES_DETAILS.equals(metadataCode)) { component = new RetentionRuleDocumentTypeDisplay(retentionRuleVO); component.setVisible(presenter.shouldDisplayDocumentTypeDetails()); } else { component = super.build(recordVO, metadataValueVO); } return component; } public interface RetentionRuleDisplayPresenter extends RetentionRuleTablePresenter { List<VariableRetentionPeriodVO> getOpenActivePeriodsDDVList(); boolean shouldDisplayFolderRetentionRules(); boolean shouldDisplayDocumentRetentionRules(); boolean shouldDisplayDefaultDocumentRetentionRules(); boolean shouldDisplayDocumentTypeDetails(); } }