package com.constellio.app.modules.rm.model.calculators; import java.util.Arrays; import java.util.List; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.enums.CopyType; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.RetentionRule; 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.LocalDependency; import com.constellio.model.entities.calculators.dependencies.ReferenceDependency; import com.constellio.model.entities.schemas.MetadataValueType; public class FolderCopyStatusCalculator2 implements MetadataValueCalculator<CopyType> { LocalDependency<CopyType> folderCopyTypeManualParam = LocalDependency.toAnEnum(Folder.COPY_STATUS_ENTERED); LocalDependency<String> folderUnitParam = LocalDependency.toAReference(Folder.ADMINISTRATIVE_UNIT); LocalDependency<List<String>> folderUnitAncestorsParam = LocalDependency.toAReference(Folder.ADMINISTRATIVE_UNIT_ANCESTORS) .whichIsMultivalue(); ReferenceDependency<List<CopyRetentionRule>> ruleCopyRulesParam = ReferenceDependency.toAStructure(Folder.RETENTION_RULE, RetentionRule.COPY_RETENTION_RULES).whichIsMultivalue().whichIsRequired(); ReferenceDependency<List<String>> ruleUnitsParam = ReferenceDependency.toAReference(Folder.RETENTION_RULE, RetentionRule.ADMINISTRATIVE_UNITS).whichIsMultivalue(); ReferenceDependency<Boolean> ruleResponsibleUnitsParam = ReferenceDependency.toABoolean(Folder.RETENTION_RULE, RetentionRule.RESPONSIBLE_ADMINISTRATIVE_UNITS); ReferenceDependency<CopyType> parentCopyTypeParam = ReferenceDependency.toAnEnum(Folder.PARENT_FOLDER, Folder.COPY_STATUS); @Override public CopyType calculate(CalculatorParameters parameters) { CopyType folderCopyTypeManual = parameters.get(folderCopyTypeManualParam); List<String> ruleUnits = parameters.get(ruleUnitsParam); List<String> folderUnitAncestors = parameters.get(folderUnitAncestorsParam); String folderUnit = parameters.get(folderUnitParam); Boolean ruleResponsibleUnits = parameters.get(ruleResponsibleUnitsParam); List<CopyRetentionRule> ruleCopyRules = parameters.get(ruleCopyRulesParam); CopyType parentCopyType = parameters.get(parentCopyTypeParam); if (parentCopyType != null) { return parentCopyType; } boolean hasPrincipalCopyRule = false; for (CopyRetentionRule ruleCopyRule : ruleCopyRules) { if (ruleCopyRule.getCopyType() == CopyType.PRINCIPAL) { hasPrincipalCopyRule = true; } } if (!hasPrincipalCopyRule) { return CopyType.SECONDARY; } if (folderCopyTypeManual != null) { return folderCopyTypeManual; } if (Boolean.TRUE != ruleResponsibleUnits) { for (String ruleUnit : ruleUnits) { if (folderUnitAncestors.contains(ruleUnit) || ruleUnit.equals(folderUnit)) { return CopyType.PRINCIPAL; } } return CopyType.SECONDARY; } return null; } @Override public CopyType getDefaultValue() { return null; } @Override public MetadataValueType getReturnType() { return MetadataValueType.ENUM; } @Override public boolean isMultiValue() { return false; } @Override public List<? extends Dependency> getDependencies() { return Arrays.asList(folderCopyTypeManualParam, folderUnitParam, folderUnitAncestorsParam, ruleUnitsParam, ruleResponsibleUnitsParam, ruleCopyRulesParam, parentCopyTypeParam); } }