aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech/glide/provider/DataLoadProviderFactory.java
blob: 019b397eade049c2c377e598211468411166069e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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) {
        GET_KEY.set(dataClass, resourceClass);
        DataLoadProvider<T, Z> result = providers.get(GET_KEY);
        if (result == null) {
            result = EmptyDataLoadProvider.get();
        }
        return result;
    }
}