package com.constellio.model.services.schemas.calculators;
import static com.constellio.model.entities.schemas.MetadataValueType.REFERENCE;
import static java.util.Arrays.asList;
import java.util.ArrayList;
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.DynamicDependencyValues;
import com.constellio.model.entities.calculators.MetadataValueCalculator;
import com.constellio.model.entities.calculators.dependencies.Dependency;
import com.constellio.model.entities.calculators.dependencies.DynamicLocalDependency;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataValueType;
public class AllReferencesCalculator implements MetadataValueCalculator<List<String>> {
DynamicLocalDependency dependency = new DynamicLocalDependency() {
@Override
public boolean isDependentOf(Metadata metadata) {
return metadata.getType() == REFERENCE;
}
};
@Override
public List<String> calculate(CalculatorParameters parameters) {
DynamicDependencyValues values = parameters.get(dependency);
Set<String> returnedValues = new HashSet<>();
for (Metadata metadata : values.getAvailableMetadatas()) {
Object o = values.getValue(metadata);
if (o != null) {
if (metadata.isMultivalue()) {
returnedValues.addAll((List) o);
} else {
returnedValues.add((String) o);
}
}
}
return new ArrayList<>(returnedValues);
}
@Override
public List<String> getDefaultValue() {
return new ArrayList<>();
}
@Override
public MetadataValueType getReturnType() {
return MetadataValueType.STRING;
}
@Override
public boolean isMultiValue() {
return true;
}
@Override
public List<? extends Dependency> getDependencies() {
return asList(dependency);
}
}