package com.constellio.app.modules.rm.model.calculators.decommissioningList; import java.util.Arrays; import java.util.List; import org.joda.time.LocalDate; import com.constellio.app.modules.rm.model.enums.DecomListStatus; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.modules.rm.wrappers.structures.DecomListValidation; 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 class DecomListStatusCalculator2 implements MetadataValueCalculator<DecomListStatus> { LocalDependency<LocalDate> processingDate = LocalDependency.toADate(DecommissioningList.PROCESSING_DATE); LocalDependency<LocalDate> approvalDate = LocalDependency.toADate(DecommissioningList.APPROVAL_DATE); LocalDependency<List<DecomListValidation>> validations = LocalDependency.toAStructure(DecommissioningList.VALIDATIONS) .whichIsMultivalue(); LocalDependency<LocalDate> approvalRequestDate = LocalDependency.toADate(DecommissioningList.APPROVAL_REQUEST_DATE); @Override public DecomListStatus calculate(CalculatorParameters parameters) { if (parameters.get(processingDate) != null) { return DecomListStatus.PROCESSED; } if (parameters.get(approvalDate) != null) { return DecomListStatus.APPROVED; } List<DecomListValidation> validations = parameters.get(this.validations); boolean validationCompleted = isValidated(validations); boolean validationRequested = !(validations.isEmpty() || validationCompleted); if (validationRequested) { return DecomListStatus.IN_VALIDATION; } if (parameters.get(approvalRequestDate) != null) { return DecomListStatus.IN_APPROVAL; } if (validationCompleted) { return DecomListStatus.VALIDATED; } return DecomListStatus.GENERATED; } @Override public DecomListStatus getDefaultValue() { return DecomListStatus.GENERATED; } @Override public MetadataValueType getReturnType() { return MetadataValueType.ENUM; } @Override public boolean isMultiValue() { return false; } @Override public List<? extends Dependency> getDependencies() { return Arrays.asList(processingDate, approvalDate, validations, approvalRequestDate); } private boolean isValidated(List<DecomListValidation> validations) { if (validations.isEmpty()) { return false; } for (DecomListValidation validation : validations) { if (!validation.isValidated()) { return false; } } return true; } }