package com.constellio.app.modules.rm.model.calculators.document; import static com.constellio.data.utils.LangUtils.areNullableEqual; import static java.util.Arrays.asList; import java.util.List; import org.joda.time.LocalDate; 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.LocalDependency; import com.constellio.model.entities.calculators.dependencies.ReferenceDependency; import com.constellio.model.entities.schemas.MetadataValueType; public class DocumentIsSameInactiveFateAsFolderCalculator implements MetadataValueCalculator<Boolean> { LocalDependency<LocalDate> documentExpectedDepositDateParam = LocalDependency.toADate( Document.FOLDER_EXPECTED_DEPOSIT_DATE); ReferenceDependency<LocalDate> folderExpectedDepositDateParam = ReferenceDependency.toADate( Document.FOLDER, Folder.EXPECTED_DEPOSIT_DATE); LocalDependency<LocalDate> documentExpectedDestructionDateParam = LocalDependency.toADate( Document.FOLDER_EXPECTED_DESTRUCTION_DATE); ReferenceDependency<LocalDate> folderExpectedDestructionDateParam = ReferenceDependency.toADate( Document.FOLDER, Folder.EXPECTED_DESTRUCTION_DATE); @Override public Boolean calculate(CalculatorParameters parameters) { CalculatorInput input = new CalculatorInput(parameters); return input.isSameExpectedDepositDate() && input.isSameExpectedDestructionDate(); } @Override public Boolean getDefaultValue() { return false; } @Override public MetadataValueType getReturnType() { return MetadataValueType.BOOLEAN; } @Override public boolean isMultiValue() { return false; } @Override public List<? extends Dependency> getDependencies() { return asList(documentExpectedDepositDateParam, folderExpectedDepositDateParam, documentExpectedDestructionDateParam, folderExpectedDestructionDateParam); } private class CalculatorInput { LocalDate documentExpectedDepositDate; LocalDate folderExpectedDepositDate; LocalDate documentExpectedDestructionDate; LocalDate folderExpectedDestructionDate; private CalculatorInput(CalculatorParameters parameters) { documentExpectedDepositDate = parameters.get(documentExpectedDepositDateParam); folderExpectedDepositDate = parameters.get(folderExpectedDepositDateParam); documentExpectedDestructionDate = parameters.get(documentExpectedDestructionDateParam); folderExpectedDestructionDate = parameters.get(folderExpectedDestructionDateParam); } boolean isSameExpectedDepositDate() { return areNullableEqual(documentExpectedDepositDate, folderExpectedDepositDate); } boolean isSameExpectedDestructionDate() { return areNullableEqual(documentExpectedDestructionDate, folderExpectedDestructionDate); } } }