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  }