1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.location.config;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22 import static com.google.inject.name.Names.named;
23 import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
24 import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
25 import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONE;
26
27 import java.util.Map;
28 import java.util.Set;
29
30 import javax.inject.Inject;
31 import javax.inject.Singleton;
32
33 import org.jclouds.location.Iso3166;
34
35 import com.google.common.base.Splitter;
36 import com.google.common.collect.ImmutableMap;
37 import com.google.common.collect.ImmutableSet;
38 import com.google.common.collect.ImmutableMap.Builder;
39 import com.google.inject.ConfigurationException;
40 import com.google.inject.Injector;
41 import com.google.inject.Key;
42
43
44
45
46
47
48
49
50 @Singleton
51 public class ProvideIso3166CodesByLocationIdViaProperties implements javax.inject.Provider<Map<String, Set<String>>> {
52
53 private final Injector injector;
54
55 @Inject
56 ProvideIso3166CodesByLocationIdViaProperties(Injector injector) {
57 this.injector = checkNotNull(injector, "injector");
58 }
59
60 @Singleton
61 @Iso3166
62 @Override
63 public Map<String, Set<String>> get() {
64 Builder<String, Set<String>> codes = ImmutableMap.<String, Set<String>> builder();
65 for (String key : ImmutableSet.of(PROPERTY_REGION, PROPERTY_ZONE))
66 try {
67 String regionString = injector.getInstance(Key.get(String.class, named(key + "s")));
68 for (String region : Splitter.on(',').split(regionString)) {
69 try {
70 codes.put(region, ImmutableSet.copyOf(Splitter.on(',')
71 .split(
72 injector.getInstance(Key.get(String.class, named(key + "." + region + "."
73 + ISO3166_CODES))))));
74 } catch (ConfigurationException e) {
75
76
77 }
78 }
79 } catch (ConfigurationException e) {
80
81
82 }
83 return codes.build();
84 }
85 }