195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddpackage com.bumptech.glide.provider; 295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddimport com.bumptech.glide.DataLoadProvider; 495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddimport java.util.HashMap; 695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddimport java.util.Map; 795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Juddpublic class DataLoadProviderFactory { 995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private static final MultiClassKey GET_KEY = new MultiClassKey(); 1095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 1195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private static class MultiClassKey { 1295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private Class dataClass; 1395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private Class resourceClass; 1495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 1595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public MultiClassKey() { } 1695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 1795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public MultiClassKey(Class dataClass, Class resourceClass) { 1895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd this.dataClass = dataClass; 1995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd this.resourceClass = resourceClass; 2095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 2195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 2295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd @Override 2395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public String toString() { 2495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return "MultiClassKey{" + 2595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd "dataClass=" + dataClass + 2695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd ", resourceClass=" + resourceClass + 2795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd '}'; 2895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 2995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 3095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd @Override 3195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public boolean equals(Object o) { 3295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd if (this == o) { 3395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return true; 3495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 3595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd if (o == null || getClass() != o.getClass()) { 3695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return false; 3795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 3895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 3995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd MultiClassKey that = (MultiClassKey) o; 4095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 4195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd if (!dataClass.equals(that.dataClass)) { 4295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return false; 4395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 4495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd if (!resourceClass.equals(that.resourceClass)) { 4595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return false; 4695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 4795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 4895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return true; 4995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 5095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 5195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd @Override 5295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public int hashCode() { 5395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd int result = dataClass.hashCode(); 5495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd result = 31 * result + resourceClass.hashCode(); 5595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return result; 5695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 5795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 5895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public void set(Class dataClass, Class resourceClass) { 5995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd this.dataClass = dataClass; 6095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd this.resourceClass = resourceClass; 6195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 6295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 6395800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 6495800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd private final Map<MultiClassKey, DataLoadProvider> providers = new HashMap<MultiClassKey, DataLoadProvider>(); 6595800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 6695800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public <T, Z> void register(Class<T> dataClass, Class<Z> resourceClass, DataLoadProvider provider) { 6795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd providers.put(new MultiClassKey(dataClass, resourceClass), provider); 6895800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 6995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd 7095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd @SuppressWarnings("unchecked") 7195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd public <T, Z> DataLoadProvider<T, Z> get(Class<T> dataClass, Class<Z> resourceClass) { 722f7d83a1581be77878112d11046e3efd642e8e16Alan Newberger DataLoadProvider<T, Z> result; 732f7d83a1581be77878112d11046e3efd642e8e16Alan Newberger synchronized (GET_KEY) { 742f7d83a1581be77878112d11046e3efd642e8e16Alan Newberger GET_KEY.set(dataClass, resourceClass); 752f7d83a1581be77878112d11046e3efd642e8e16Alan Newberger result = providers.get(GET_KEY); 762f7d83a1581be77878112d11046e3efd642e8e16Alan Newberger } 7795800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd if (result == null) { 78d3bd0a915d197e08dc7d2c7cf97fb0ee77049f51Sam Judd result = EmptyDataLoadProvider.get(); 7995800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 8095800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd return result; 8195800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd } 8295800ddedeb8ed0390310ff80a68d3d0eeef00baSam Judd} 83