package com.constellio.app.modules.tasks.model.calculators;
import static java.util.Arrays.asList;
import java.util.List;
import com.constellio.app.modules.tasks.model.wrappers.Task;
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.calculators.dependencies.SpecialDependencies;
import com.constellio.model.entities.calculators.dependencies.SpecialDependency;
import com.constellio.model.entities.schemas.MetadataValueType;
public class WorkflowTaskSortCalculator implements MetadataValueCalculator<Double> {
SpecialDependency<String> identifierParam = SpecialDependencies.IDENTIFIER;
ReferenceDependency<List<Double>> childrenIndexesParam = ReferenceDependency
.toANumber(Task.NEXT_TASKS, Task.WORKFLOW_TASK_SORT).whichIsMultivalue();
@Override
public Double calculate(CalculatorParameters parameters) {
String identifier = parameters.get(identifierParam);
List<Double> childrenIndexes = parameters.get(childrenIndexesParam);
double max = 0;
if (childrenIndexes != null) {
for (Double value : childrenIndexes) {
if (value != null && max < value) {
max = value;
}
}
}
return max == 0 ? (double) identifier.hashCode() * 1000 : (max + 1);
}
@Override
public Double getDefaultValue() {
return 0.0;
}
@Override
public MetadataValueType getReturnType() {
return MetadataValueType.NUMBER;
}
@Override
public boolean isMultiValue() {
return false;
}
@Override
public List<? extends Dependency> getDependencies() {
return asList(identifierParam, childrenIndexesParam);
}
}