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 com.constellio.model.services.schemas.builders.CommonMetadataBuilder.REMOVED_AUTHORIZATIONS; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; 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; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.schemas.builders.CommonMetadataBuilder; public class AllRemovedAuthsCalculator implements MetadataValueCalculator<List<String>> { SpecialDependency<HierarchyDependencyValue> inheritedRemovedAuthorizationsParam = SpecialDependencies.HIERARCHY; LocalDependency<List<String>> removedAuthorizationsParam = LocalDependency.toAStringList(REMOVED_AUTHORIZATIONS); LocalDependency<Boolean> isDetachedParams = LocalDependency.toABoolean(DETACHED_AUTHORIZATIONS); @Override public List<String> calculate(CalculatorParameters parameters) { HierarchyDependencyValue hierarchyDependencyValue = parameters.get(inheritedRemovedAuthorizationsParam); List<String> removedLocally = parameters.get(removedAuthorizationsParam); boolean isDetached = Boolean.TRUE == parameters.get(isDetachedParams); Set<String> calculatedAuthorizations = new HashSet<>(); calculatedAuthorizations.addAll(removedLocally); if (!isDetached) { calculatedAuthorizations.addAll(hierarchyDependencyValue.getRemovedAuthorizationIds()); } return new ArrayList<>(calculatedAuthorizations); } @Override public List<String> getDefaultValue() { return Collections.emptyList(); } @Override public MetadataValueType getReturnType() { return STRING; } @Override public boolean isMultiValue() { return true; } @Override public List<? extends Dependency> getDependencies() { return Arrays.asList(inheritedRemovedAuthorizationsParam, removedAuthorizationsParam, isDetachedParams); } }