| package com.bumptech.glide.provider; |
| |
| import com.bumptech.glide.DataLoadProvider; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| public class DataLoadProviderFactory { |
| private static final MultiClassKey GET_KEY = new MultiClassKey(); |
| |
| private static class MultiClassKey { |
| private Class dataClass; |
| private Class resourceClass; |
| |
| public MultiClassKey() { } |
| |
| public MultiClassKey(Class dataClass, Class resourceClass) { |
| this.dataClass = dataClass; |
| this.resourceClass = resourceClass; |
| } |
| |
| @Override |
| public String toString() { |
| return "MultiClassKey{" + |
| "dataClass=" + dataClass + |
| ", resourceClass=" + resourceClass + |
| '}'; |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) { |
| return true; |
| } |
| if (o == null || getClass() != o.getClass()) { |
| return false; |
| } |
| |
| MultiClassKey that = (MultiClassKey) o; |
| |
| if (!dataClass.equals(that.dataClass)) { |
| return false; |
| } |
| if (!resourceClass.equals(that.resourceClass)) { |
| return false; |
| } |
| |
| return true; |
| } |
| |
| @Override |
| public int hashCode() { |
| int result = dataClass.hashCode(); |
| result = 31 * result + resourceClass.hashCode(); |
| return result; |
| } |
| |
| public void set(Class dataClass, Class resourceClass) { |
| this.dataClass = dataClass; |
| this.resourceClass = resourceClass; |
| } |
| } |
| |
| private final Map<MultiClassKey, DataLoadProvider> providers = new HashMap<MultiClassKey, DataLoadProvider>(); |
| |
| public <T, Z> void register(Class<T> dataClass, Class<Z> resourceClass, DataLoadProvider provider) { |
| providers.put(new MultiClassKey(dataClass, resourceClass), provider); |
| } |
| |
| @SuppressWarnings("unchecked") |
| public <T, Z> DataLoadProvider<T, Z> get(Class<T> dataClass, Class<Z> resourceClass) { |
| DataLoadProvider<T, Z> result; |
| synchronized (GET_KEY) { |
| GET_KEY.set(dataClass, resourceClass); |
| result = providers.get(GET_KEY); |
| } |
| if (result == null) { |
| result = EmptyDataLoadProvider.get(); |
| } |
| return result; |
| } |
| } |