aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/enumerations/CacheDistance.java
blob: 45295929eeb5108e2b4134115fde8e6e9fd9c4cb (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
package cgeo.geocaching.enumerations;

import cgeo.geocaching.R;
import cgeo.geocaching.cgeoapplication;

import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public enum CacheDistance {
    NEAR("Near", 0, 3, R.string.cache_distance_near),
    REGULAR("Regular", 3, 5, R.string.cache_distance_regular),
    FAR("Far", 5, 10, R.string.cache_distance_far);

	public final String id;
    public final int minDistance;
    public final int maxDistance;
    private final int stringId;

    CacheDistance(String id, int minDistance, int maxDistance, int stringId) {
        this.id = id;
        this.minDistance = minDistance;
        this.maxDistance = maxDistance;
        this.stringId = stringId;
    }

    final private static Map<String, CacheDistance> FIND_BY_ID;
    static {
        final HashMap<String, CacheDistance> mapping = new HashMap<String, CacheDistance>();
        for (CacheDistance cd : values()) {
            mapping.put(cd.id.toLowerCase(Locale.US), cd);
        }
        FIND_BY_ID = Collections.unmodifiableMap(mapping);
    }

    public static CacheDistance getById(final String id) {
        final CacheDistance result = CacheDistance.FIND_BY_ID.get(id);
        if (result != null) {
            return result;
        }
        final CacheDistance resultNormalized = CacheDistance.FIND_BY_ID.get(id.toLowerCase(Locale.US).trim());
        if (resultNormalized != null) {
            return resultNormalized;
        }
        return FAR; //put default if needed
    }

    public final String getL10n() {
        return cgeoapplication.getInstance().getBaseContext().getResources().getString(stringId);
    }
}