EMMA Coverage Report (generated Wed Jun 22 19:47:49 EDT 2011)
[all classes][org.jclouds.ec2.config]

COVERAGE SUMMARY FOR SOURCE FILE [EC2RestClientModule.java]

nameclass, %method, %block, %line, %
EC2RestClientModule.java33%  (1/3)22%  (2/9)23%  (34/147)11%  (3/28)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class EC2RestClientModule$RegionIdToZoneId0%   (0/1)0%   (0/2)0%   (0/53)0%   (0/9)
EC2RestClientModule$RegionIdToZoneId (EC2Client, Map): void 0%   (0/1)0%   (0/10)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/43)0%   (0/5)
     
class EC2RestClientModule$RegionIdsToURI0%   (0/1)0%   (0/2)0%   (0/45)0%   (0/11)
EC2RestClientModule$RegionIdsToURI (EC2Client, Injector): void 0%   (0/1)0%   (0/10)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/35)0%   (0/7)
     
class EC2RestClientModule100% (1/1)40%  (2/5)69%  (34/49)38%  (3/8)
bindRegionsToProvider (): void 0%   (0/1)0%   (0/4)0%   (0/2)
bindZonesToProvider (): void 0%   (0/1)0%   (0/4)0%   (0/2)
create (): EC2RestClientModule 0%   (0/1)0%   (0/7)0%   (0/1)
<static initializer> 100% (1/1)100% (28/28)100% (1/1)
EC2RestClientModule (Class, Class, Map): void 100% (1/1)100% (6/6)100% (2/2)

1/**
2 *
3 * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
4 *
5 * ====================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ====================================================================
18 */
19package org.jclouds.ec2.config;
20 
21import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
22 
23import java.net.URI;
24import java.util.Map;
25import java.util.Set;
26import java.util.Map.Entry;
27 
28import javax.inject.Inject;
29import javax.inject.Singleton;
30 
31import org.jclouds.aws.config.WithZonesFormSigningRestClientModule;
32import org.jclouds.ec2.EC2AsyncClient;
33import org.jclouds.ec2.EC2Client;
34import org.jclouds.ec2.domain.AvailabilityZoneInfo;
35import org.jclouds.ec2.services.AMIAsyncClient;
36import org.jclouds.ec2.services.AMIClient;
37import org.jclouds.ec2.services.AvailabilityZoneAndRegionAsyncClient;
38import org.jclouds.ec2.services.AvailabilityZoneAndRegionClient;
39import org.jclouds.ec2.services.ElasticBlockStoreAsyncClient;
40import org.jclouds.ec2.services.ElasticBlockStoreClient;
41import org.jclouds.ec2.services.ElasticIPAddressAsyncClient;
42import org.jclouds.ec2.services.ElasticIPAddressClient;
43import org.jclouds.ec2.services.InstanceAsyncClient;
44import org.jclouds.ec2.services.InstanceClient;
45import org.jclouds.ec2.services.KeyPairAsyncClient;
46import org.jclouds.ec2.services.KeyPairClient;
47import org.jclouds.ec2.services.SecurityGroupAsyncClient;
48import org.jclouds.ec2.services.SecurityGroupClient;
49import org.jclouds.ec2.services.WindowsAsyncClient;
50import org.jclouds.ec2.services.WindowsClient;
51import org.jclouds.http.RequiresHttp;
52import org.jclouds.location.Region;
53import org.jclouds.location.Zone;
54import org.jclouds.rest.ConfiguresRestClient;
55 
56import com.google.common.base.Predicates;
57import com.google.common.base.Splitter;
58import com.google.common.collect.ImmutableMap;
59import com.google.common.collect.ImmutableSet;
60import com.google.common.collect.Maps;
61import com.google.common.collect.ImmutableMap.Builder;
62import com.google.inject.ConfigurationException;
63import com.google.inject.Injector;
64import com.google.inject.Key;
65import com.google.inject.name.Names;
66 
67/**
68 * Configures the EC2 connection.
69 * 
70 * @author Adrian Cole
71 */
72@RequiresHttp
73@ConfiguresRestClient
74public class EC2RestClientModule<S extends EC2Client, A extends EC2AsyncClient> extends
75         WithZonesFormSigningRestClientModule<S, A> {
76 
77   public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
78            .put(AMIClient.class, AMIAsyncClient.class)//
79            .put(ElasticIPAddressClient.class, ElasticIPAddressAsyncClient.class)//
80            .put(InstanceClient.class, InstanceAsyncClient.class)//
81            .put(KeyPairClient.class, KeyPairAsyncClient.class)//
82            .put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)//
83            .put(WindowsClient.class, WindowsAsyncClient.class)//
84            .put(AvailabilityZoneAndRegionClient.class, AvailabilityZoneAndRegionAsyncClient.class)//
85            .put(ElasticBlockStoreClient.class, ElasticBlockStoreAsyncClient.class)//
86            .build();
87 
88   public static EC2RestClientModule<EC2Client, EC2AsyncClient> create() {
89      return new EC2RestClientModule<EC2Client, EC2AsyncClient>(EC2Client.class, EC2AsyncClient.class, DELEGATE_MAP);
90   }
91 
92   public EC2RestClientModule(Class<S> sync, Class<A> async, Map<Class<?>, Class<?>> delegateMap) {
93      super(sync, async, delegateMap);
94   }
95 
96   @Override
97   protected void bindRegionsToProvider() {
98      bindRegionsToProvider(RegionIdsToURI.class);
99   }
100 
101   @Override
102   protected void bindZonesToProvider() {
103      bindZonesToProvider(RegionIdToZoneId.class);
104   }
105 
106   @Singleton
107   public static class RegionIdsToURI implements javax.inject.Provider<Map<String, URI>> {
108      private final AvailabilityZoneAndRegionClient client;
109      private final Injector injector;
110 
111      @Inject
112      public RegionIdsToURI(EC2Client client, Injector injector) {
113         this.client = client.getAvailabilityZoneAndRegionServices();
114         this.injector = injector;
115      }
116 
117      @Singleton
118      @Region
119      @Override
120      public Map<String, URI> get() {
121         try {
122            String regionString = injector.getInstance(Key.get(String.class, Names.named(PROPERTY_REGIONS)));
123            Set<String> regions = ImmutableSet.copyOf(Splitter.on(',').split(regionString));
124            if (regions.size() > 0)
125               return Maps.filterKeys(client.describeRegions(), Predicates.in(regions));
126         } catch (ConfigurationException e) {
127            // this happens if regions property isn't set
128            // services not run by AWS may not have regions, so this is ok.
129         }
130         return client.describeRegions();
131 
132      }
133   }
134 
135   @Singleton
136   public static class RegionIdToZoneId implements javax.inject.Provider<Map<String, String>> {
137      private final AvailabilityZoneAndRegionClient client;
138      private final Map<String, URI> regions;
139 
140      @Inject
141      public RegionIdToZoneId(EC2Client client, @Region Map<String, URI> regions) {
142         this.client = client.getAvailabilityZoneAndRegionServices();
143         this.regions = regions;
144      }
145 
146      @Singleton
147      @Zone
148      @Override
149      public Map<String, String> get() {
150         Builder<String, String> map = ImmutableMap.<String, String> builder();
151         for (Entry<String, URI> region : regions.entrySet()) {
152            for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region.getKey())) {
153               map.put(zoneInfo.getZone(), region.getKey());
154            }
155         }
156         return map.build();
157      }
158 
159   }
160 
161}

[all classes][org.jclouds.ec2.config]
EMMA 2.0.5312 (C) Vladimir Roubtsov