package com.constellio.app.modules.rm.model.calculators.document; import static java.util.Arrays.asList; import java.util.List; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.CopyRetentionRuleInRule; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.model.entities.calculators.CalculatorParameters; import com.constellio.model.entities.calculators.MetadataValueCalculator; import com.constellio.model.entities.calculators.dependencies.ConfigDependency; import com.constellio.model.entities.calculators.dependencies.Dependency; import com.constellio.model.entities.calculators.dependencies.LocalDependency; import com.constellio.model.entities.calculators.dependencies.ReferenceDependency; import com.constellio.model.entities.schemas.MetadataValueType; public class DocumentMainCopyRuleCalculator2 implements MetadataValueCalculator<CopyRetentionRule> { LocalDependency<String> enteredCopyRuleParam = LocalDependency.toAString(Folder.MAIN_COPY_RULE_ID_ENTERED); ConfigDependency<Boolean> documentRetentionRulesEnabledParam = RMConfigs.DOCUMENT_RETENTION_RULES.dependency(); ReferenceDependency<CopyRetentionRule> folderMainCopyRuleParam = ReferenceDependency .toAStructure(Document.FOLDER, Folder.MAIN_COPY_RULE); LocalDependency<List<CopyRetentionRuleInRule>> applicableCopyRulesParam = LocalDependency .toAStructure(Document.APPLICABLE_COPY_RULES) .whichIsMultivalue(); @Override public CopyRetentionRule calculate(CalculatorParameters parameters) { CalculatorInput input = new CalculatorInput(parameters); if (input.documentRetentionRulesEnabled && !input.applicableCopyRules.isEmpty()) { if (input.applicableCopyRules.size() == 1) { return input.applicableCopyRules.get(0).getCopyRetentionRule(); } else { if (input.enteredCopyRule == null) { return null; } else { for (CopyRetentionRuleInRule inRule : input.applicableCopyRules) { if (input.enteredCopyRule.equals(inRule.getCopyRetentionRule().getId())) { return inRule.getCopyRetentionRule(); } } return null; } } } else { return input.folderMainCopyRule; } } @Override public CopyRetentionRule getDefaultValue() { return null; } @Override public MetadataValueType getReturnType() { return MetadataValueType.STRUCTURE; } @Override public boolean isMultiValue() { return false; } @Override public List<? extends Dependency> getDependencies() { return asList(enteredCopyRuleParam, folderMainCopyRuleParam, documentRetentionRulesEnabledParam, applicableCopyRulesParam); } private class CalculatorInput { String enteredCopyRule; boolean documentRetentionRulesEnabled; CopyRetentionRule folderMainCopyRule; List<CopyRetentionRuleInRule> applicableCopyRules; public CalculatorInput(CalculatorParameters parameters) { enteredCopyRule = parameters.get(enteredCopyRuleParam); documentRetentionRulesEnabled = parameters.get(documentRetentionRulesEnabledParam); folderMainCopyRule = parameters.get(folderMainCopyRuleParam); applicableCopyRules = parameters.get(applicableCopyRulesParam); } } }