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 providers = new HashMap(); public void register(Class dataClass, Class resourceClass, DataLoadProvider provider) { providers.put(new MultiClassKey(dataClass, resourceClass), provider); } @SuppressWarnings("unchecked") public DataLoadProvider get(Class dataClass, Class resourceClass) { DataLoadProvider result; synchronized (GET_KEY) { GET_KEY.set(dataClass, resourceClass); result = providers.get(GET_KEY); } if (result == null) { result = EmptyDataLoadProvider.get(); } return result; } }