package com.constellio.app.modules.rm.model.calculators.decommissioningList; import static java.util.Arrays.asList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.wrappers.DecommissioningList; 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.Dependency; import com.constellio.model.entities.calculators.dependencies.ReferenceDependency; import com.constellio.model.entities.schemas.MetadataValueType; public class DecomListUniformCopyRuleCalculator2 implements MetadataValueCalculator<CopyRetentionRule> { ReferenceDependency<List<CopyRetentionRule>> copyRulesParam = ReferenceDependency.toAStructure(DecommissioningList.FOLDERS, Folder.MAIN_COPY_RULE).whichIsMultivalue(); ReferenceDependency<List<CopyRetentionRule>> documentsCopyRulesParam = ReferenceDependency .toAStructure(DecommissioningList.DOCUMENTS, Document.MAIN_COPY_RULE).whichIsMultivalue(); @Override public CopyRetentionRule calculate(CalculatorParameters parameters) { List<CopyRetentionRule> copyRules = parameters.get(copyRulesParam); List<CopyRetentionRule> documentsCopyRules = parameters.get(documentsCopyRulesParam); Set<CopyRetentionRule> copyRulesWithoutDuplicates = new HashSet<>(copyRules); copyRulesWithoutDuplicates.addAll(documentsCopyRules); return copyRulesWithoutDuplicates.size() == 1 ? copyRulesWithoutDuplicates.iterator().next() : null; } @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(copyRulesParam, documentsCopyRulesParam); } }