package org.molgenis.data.aggregation; import org.molgenis.data.AbstractRepositoryDecorator; import org.molgenis.data.Entity; import org.molgenis.data.Repository; import org.molgenis.data.settings.AppSettings; import static java.util.Objects.requireNonNull; /** * Repository decorator that anonymizes aggregate query results based on application anonymization settings. */ public class AggregateAnonymizerRepositoryDecorator<E extends Entity> extends AbstractRepositoryDecorator<E> { private final Repository<E> decoratedRepo; private final AggregateAnonymizer aggregateAnonymizer; private final AppSettings appSettings; public AggregateAnonymizerRepositoryDecorator(Repository<E> decoratedRepo, AggregateAnonymizer aggregateAnonymizer, AppSettings appSettings) { this.decoratedRepo = requireNonNull(decoratedRepo); this.appSettings = requireNonNull(appSettings); this.aggregateAnonymizer = requireNonNull(aggregateAnonymizer); } @Override protected Repository<E> delegate() { return decoratedRepo; } @Override public AggregateResult aggregate(AggregateQuery aggregateQuery) { AggregateResult result = decoratedRepo.aggregate(aggregateQuery); Integer threshold = appSettings.getAggregateThreshold(); if (threshold != null && threshold > 0) { result = aggregateAnonymizer.anonymize(result, threshold); } return result; } }