package com.constellio.app.modules.rm.model.calculators.folder; import static java.util.Arrays.asList; import java.util.List; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.RetentionPeriod; 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.LocalDependency; import com.constellio.model.entities.schemas.MetadataValueType; public abstract class FolderRetentionPeriodCodeCalculator implements MetadataValueCalculator<String> { LocalDependency<CopyRetentionRule> mainCopyRuleParam = LocalDependency.toAStructure(Folder.MAIN_COPY_RULE); @Override public String calculate(CalculatorParameters parameters) { CopyRetentionRule mainCopyRule = parameters.get(mainCopyRuleParam); if (mainCopyRule == null) { return null; } else { RetentionPeriod period = getRetentionPeriod(mainCopyRule); if (period == null || !period.isVariablePeriod()) { return null; } else { return period.getVariablePeriodCode(); } } } protected abstract RetentionPeriod getRetentionPeriod(CopyRetentionRule copyRetentionRule); @Override public String getDefaultValue() { return null; } @Override public MetadataValueType getReturnType() { return MetadataValueType.STRING; } @Override public boolean isMultiValue() { return false; } @Override public List<? extends Dependency> getDependencies() { return asList(mainCopyRuleParam); } public static class FolderActiveRetentionPeriodCodeCalculator extends FolderRetentionPeriodCodeCalculator implements MetadataValueCalculator<String> { @Override protected RetentionPeriod getRetentionPeriod(CopyRetentionRule copyRetentionRule) { return copyRetentionRule.getActiveRetentionPeriod(); } } public static class FolderSemiActiveRetentionPeriodCodeCalculator extends FolderRetentionPeriodCodeCalculator implements MetadataValueCalculator<String> { @Override protected RetentionPeriod getRetentionPeriod(CopyRetentionRule copyRetentionRule) { return copyRetentionRule.getSemiActiveRetentionPeriod(); } } }