// $HeadURL$ // $Id$ // // Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College. // // Screensaver is an open-source project developed by the ICCB-L and NSRB labs // at Harvard Medical School. This software is distributed under the terms of // the GNU General Public License. package edu.harvard.med.screensaver.db.datafetcher; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import edu.harvard.med.screensaver.db.Criterion; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.db.hqlbuilder.HqlBuilder; import edu.harvard.med.screensaver.model.Entity; import edu.harvard.med.screensaver.model.meta.PropertyPath; /** * @param AT aggregate type * @param AK aggregate key * @param BT base type: the type being aggregated into an object of type AT * @param BK base key * @deprecated use {@link SetBasedDataFetcher} */ @Deprecated public abstract class AggregateDataFetcher<AT extends Entity<AK>,AK extends Serializable,BT extends Entity<BK>,BK extends Serializable> extends EntityDataFetcher<AT,AK> { /** * DataFetcher that is used to fetch the underlying, non-aggregated entity data. */ private EntityDataFetcher<BT,BK> _baseDataFetcher; abstract protected SortedSet<AT> aggregateData(List<BT> nonAggregatedData); public AggregateDataFetcher(Class<AT> entityClass, GenericEntityDAO dao, EntityDataFetcher<BT,BK> dataFetcher) { super(entityClass, dao); _baseDataFetcher = dataFetcher; } @Override public void addDomainRestrictions(HqlBuilder hql) { throw new UnsupportedOperationException("use setRelationshipsToFetch() on base data fetcher"); } @Override public void setPropertiesToFetch(List<PropertyPath<AT>> properties) { throw new UnsupportedOperationException("AggregateDataFetcher expects data to be fetched by base data fetcher"); } public List<AT> fetchAllData() { List<BT> nonAggregatedData = _baseDataFetcher.fetchAllData(); return new ArrayList<AT>(aggregateData(nonAggregatedData)); } @Override public void setFilteringCriteria(Map<PropertyPath<AT>,List<? extends Criterion<?>>> criteria) { throw new UnsupportedOperationException("AggregateDataFetcher can only be used to fetch all data at once, and filtering should be done in memory"); } public void setOrderBy(List<PropertyPath<AT>> orderByProperties) { throw new UnsupportedOperationException("AggregateDataFetcher can only be used to fetch all data at once, and ordering should be done in memory"); } public Map<AK,AT> fetchData(Set<AK> keys) { throw new UnsupportedOperationException("AggregateDataFetcher can only be used to fetch all data at once"); } public List<AK> findAllKeys() { throw new UnsupportedOperationException("AggregateDataFetcher can only be used to fetch all data at once"); } }