package com.constellio.model.services.schemas.calculators; import static com.constellio.model.entities.schemas.MetadataValueType.STRING; import static com.constellio.model.services.schemas.builders.CommonMetadataBuilder.DETACHED_AUTHORIZATIONS; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; 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.HierarchyDependencyValue; import com.constellio.model.entities.calculators.dependencies.LocalDependency; 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 AttachedAncestorsCalculator implements MetadataValueCalculator<List<String>> { SpecialDependency<HierarchyDependencyValue> taxonomiesParam = SpecialDependencies.HIERARCHY; LocalDependency<Boolean> isDetachedAuthsParams = LocalDependency.toABoolean(DETACHED_AUTHORIZATIONS); @Override public List<String> calculate(CalculatorParameters parameters) { HierarchyDependencyValue hierarchyDependencyValue = parameters.get(taxonomiesParam); boolean isDetachedAuths = Boolean.TRUE == parameters.get(isDetachedAuthsParams); boolean hasSecurity = parameters.getSchemaType().hasSecurity(); List<String> ancestors = new ArrayList<>(); if (hasSecurity) { if (hierarchyDependencyValue != null && !isDetachedAuths) { ancestors.addAll(hierarchyDependencyValue.getAttachedAncestors()); } ancestors.add(parameters.getId()); } return ancestors; } @Override public List<String> getDefaultValue() { return new ArrayList<>(); } @Override public MetadataValueType getReturnType() { return STRING; } @Override public boolean isMultiValue() { return true; } @Override public List<? extends Dependency> getDependencies() { return asList(taxonomiesParam, isDetachedAuthsParams); } }