1package com.bumptech.glide.provider; 2 3import com.bumptech.glide.DataLoadProvider; 4 5import java.util.HashMap; 6import java.util.Map; 7 8public class DataLoadProviderFactory { 9 private static final MultiClassKey GET_KEY = new MultiClassKey(); 10 11 private static class MultiClassKey { 12 private Class dataClass; 13 private Class resourceClass; 14 15 public MultiClassKey() { } 16 17 public MultiClassKey(Class dataClass, Class resourceClass) { 18 this.dataClass = dataClass; 19 this.resourceClass = resourceClass; 20 } 21 22 @Override 23 public String toString() { 24 return "MultiClassKey{" + 25 "dataClass=" + dataClass + 26 ", resourceClass=" + resourceClass + 27 '}'; 28 } 29 30 @Override 31 public boolean equals(Object o) { 32 if (this == o) { 33 return true; 34 } 35 if (o == null || getClass() != o.getClass()) { 36 return false; 37 } 38 39 MultiClassKey that = (MultiClassKey) o; 40 41 if (!dataClass.equals(that.dataClass)) { 42 return false; 43 } 44 if (!resourceClass.equals(that.resourceClass)) { 45 return false; 46 } 47 48 return true; 49 } 50 51 @Override 52 public int hashCode() { 53 int result = dataClass.hashCode(); 54 result = 31 * result + resourceClass.hashCode(); 55 return result; 56 } 57 58 public void set(Class dataClass, Class resourceClass) { 59 this.dataClass = dataClass; 60 this.resourceClass = resourceClass; 61 } 62 } 63 64 private final Map<MultiClassKey, DataLoadProvider> providers = new HashMap<MultiClassKey, DataLoadProvider>(); 65 66 public <T, Z> void register(Class<T> dataClass, Class<Z> resourceClass, DataLoadProvider provider) { 67 providers.put(new MultiClassKey(dataClass, resourceClass), provider); 68 } 69 70 @SuppressWarnings("unchecked") 71 public <T, Z> DataLoadProvider<T, Z> get(Class<T> dataClass, Class<Z> resourceClass) { 72 DataLoadProvider<T, Z> result; 73 synchronized (GET_KEY) { 74 GET_KEY.set(dataClass, resourceClass); 75 result = providers.get(GET_KEY); 76 } 77 if (result == null) { 78 result = EmptyDataLoadProvider.get(); 79 } 80 return result; 81 } 82} 83