EMMA Coverage Report (generated Mon Oct 17 05:41:20 EDT 2011)
[all classes][org.jclouds.vcloud.config]

COVERAGE SUMMARY FOR SOURCE FILE [VCloudRestClientModule.java]

nameclass, %method, %block, %line, %
VCloudRestClientModule.java73%  (24/33)50%  (34/68)54%  (382/712)55%  (56/102)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class VCloudRestClientModule$10%   (0/1)0%   (0/3)0%   (0/38)0%   (0/6)
<static initializer> 0%   (0/1)0%   (0/8)0%   (0/1)
VCloudRestClientModule$1 (VCloudRestClientModule, VCloudLoginAsyncClient): void 0%   (0/1)0%   (0/9)0%   (0/1)
get (): VCloudSession 0%   (0/1)0%   (0/21)0%   (0/5)
     
class VCloudRestClientModule$190%   (0/1)0%   (0/2)0%   (0/44)0%   (0/6)
VCloudRestClientModule$19 (VCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Map 0%   (0/1)0%   (0/38)0%   (0/5)
     
class VCloudRestClientModule$OrgCatalogItemSupplier$10%   (0/1)0%   (0/2)0%   (0/13)0%   (0/2)
VCloudRestClientModule$OrgCatalogItemSupplier$1 (VCloudRestClientModule$OrgCa... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Map 0%   (0/1)0%   (0/7)0%   (0/1)
     
class VCloudRestClientModule$OrgCatalogItemSupplier$1$10%   (0/1)0%   (0/2)0%   (0/18)0%   (0/2)
VCloudRestClientModule$OrgCatalogItemSupplier$1$1 (VCloudRestClientModule$Org... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Catalog): Map 0%   (0/1)0%   (0/12)0%   (0/1)
     
class VCloudRestClientModule$OrgCatalogSupplier$10%   (0/1)0%   (0/2)0%   (0/10)0%   (0/2)
VCloudRestClientModule$OrgCatalogSupplier$1 (VCloudRestClientModule$OrgCatalo... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Iterable): Map 0%   (0/1)0%   (0/4)0%   (0/1)
     
class VCloudRestClientModule$OrgVDCSupplier$10%   (0/1)0%   (0/2)0%   (0/10)0%   (0/2)
VCloudRestClientModule$OrgVDCSupplier$1 (VCloudRestClientModule$OrgVDCSupplie... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Iterable): Map 0%   (0/1)0%   (0/4)0%   (0/1)
     
class VCloudRestClientModule$URItoVDC0%   (0/1)0%   (0/2)0%   (0/23)0%   (0/4)
VCloudRestClientModule$URItoVDC (Supplier): void 0%   (0/1)0%   (0/6)0%   (0/3)
get (): Map 0%   (0/1)0%   (0/17)0%   (0/1)
     
class VCloudRestClientModule$URItoVDC$10%   (0/1)0%   (0/2)0%   (0/9)0%   (0/2)
VCloudRestClientModule$URItoVDC$1 (VCloudRestClientModule$URItoVDC): void 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Iterable 0%   (0/1)0%   (0/3)0%   (0/1)
     
class VCloudRestClientModule$URItoVDC$20%   (0/1)0%   (0/2)0%   (0/9)0%   (0/2)
VCloudRestClientModule$URItoVDC$2 (VCloudRestClientModule$URItoVDC): void 0%   (0/1)0%   (0/6)0%   (0/1)
apply (VDC): URI 0%   (0/1)0%   (0/3)0%   (0/1)
     
class VCloudRestClientModule$OrgCatalogSupplier100% (1/1)50%  (1/2)41%  (9/22)80%  (4/5)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
VCloudRestClientModule$OrgCatalogSupplier (Supplier, Function): void 100% (1/1)100% (9/9)100% (4/4)
     
class VCloudRestClientModule$OrgMapSupplier100% (1/1)50%  (1/2)41%  (9/22)80%  (4/5)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
VCloudRestClientModule$OrgMapSupplier (Supplier, Function): void 100% (1/1)100% (9/9)100% (4/4)
     
class VCloudRestClientModule$OrgVDCSupplier100% (1/1)50%  (1/2)41%  (9/22)80%  (4/5)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
VCloudRestClientModule$OrgVDCSupplier (Supplier, Function): void 100% (1/1)100% (9/9)100% (4/4)
     
class VCloudRestClientModule$OrgCatalogItemSupplier100% (1/1)50%  (1/2)47%  (9/19)80%  (4/5)
get (): Map 0%   (0/1)0%   (0/10)0%   (0/1)
VCloudRestClientModule$OrgCatalogItemSupplier (Supplier, Function): void 100% (1/1)100% (9/9)100% (4/4)
     
class VCloudRestClientModule$20100% (1/1)50%  (1/2)50%  (3/6)50%  (1/2)
apply (ReferenceType): String 0%   (0/1)0%   (0/3)0%   (0/1)
VCloudRestClientModule$20 (): void 100% (1/1)100% (3/3)100% (1/1)
     
class VCloudRestClientModule100% (1/1)50%  (10/20)69%  (229/333)67%  (28/42)
installDefaultVCloudEndpointsModule (): void 0%   (0/1)0%   (0/6)0%   (0/2)
provideAuthenticationURI (VCloudVersionsAsyncClient, String): URI 0%   (0/1)0%   (0/36)0%   (0/4)
provideOrg (Supplier, ReferenceType): Org 0%   (0/1)0%   (0/8)0%   (0/1)
provideOrgVDCSupplierCache (long, AtomicReference, VCloudRestClientModule$Org... 0%   (0/1)0%   (0/7)0%   (0/1)
provideURIToVDC (long, AtomicReference, VCloudRestClientModule$URItoVDC): Sup... 0%   (0/1)0%   (0/7)0%   (0/1)
provideVCloudToken (Supplier): String 0%   (0/1)0%   (0/8)0%   (0/1)
provideVCloudTokenCache (long, AtomicReference, VCloudLoginAsyncClient): Supp... 0%   (0/1)0%   (0/11)0%   (0/1)
provideVCloudVersions (AsyncClientFactory): VCloudVersionsAsyncClient 0%   (0/1)0%   (0/5)0%   (0/1)
provideVDCtoORG (Supplier): Supplier 0%   (0/1)0%   (0/7)0%   (0/1)
successTester (Injector, long): Predicate 0%   (0/1)0%   (0/9)0%   (0/1)
<static initializer> 100% (1/1)100% (32/32)100% (2/2)
VCloudRestClientModule (): void 100% (1/1)100% (6/6)100% (2/2)
bindErrorHandlers (): void 100% (1/1)100% (25/25)100% (4/4)
configure (): void 100% (1/1)100% (117/117)100% (13/13)
provideOrgCatalogItemMapSupplierCache (long, AtomicReference, VCloudRestClien... 100% (1/1)100% (7/7)100% (1/1)
provideOrgCatalogItemSupplierCache (long, AtomicReference, VCloudRestClientMo... 100% (1/1)100% (7/7)100% (1/1)
provideOrgListURI (Supplier): URI 100% (1/1)100% (16/16)100% (2/2)
provideOrgMapCache (long, AtomicReference, VCloudRestClientModule$OrgMapSuppl... 100% (1/1)100% (7/7)100% (1/1)
provideVCloudLogin (AsyncClientFactory): VCloudLoginAsyncClient 100% (1/1)100% (5/5)100% (1/1)
provideVDCtoORG (long, AtomicReference, VCloudRestClientModule$OrgNameToOrgSu... 100% (1/1)100% (7/7)100% (1/1)
     
class VCloudRestClientModule$10100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$10 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$11100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$11 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$12100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$12 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$13100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$13 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$14100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$14 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$15100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$15 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$16100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$16 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$17100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$17 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$18100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$18 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$2100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$2 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$3100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$3 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$4100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$4 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$5100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$5 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$6100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$6 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$7100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$7 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$8100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$8 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$9100% (1/1)100% (1/1)100% (6/6)100% (1/1)
VCloudRestClientModule$9 (VCloudRestClientModule): void 100% (1/1)100% (6/6)100% (1/1)
     
class VCloudRestClientModule$OrgNameToOrgSupplier100% (1/1)100% (2/2)100% (12/12)100% (4/4)
VCloudRestClientModule$OrgNameToOrgSupplier (Supplier): void 100% (1/1)100% (6/6)100% (3/3)
get (): Map 100% (1/1)100% (6/6)100% (1/1)

1/**
2 * Licensed to jclouds, Inc. (jclouds) under one or more
3 * contributor license agreements.  See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership.  jclouds licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License.  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,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied.  See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19package org.jclouds.vcloud.config;
20 
21import static com.google.common.base.Preconditions.checkNotNull;
22import static com.google.common.base.Preconditions.checkState;
23import static com.google.common.base.Throwables.propagate;
24import static com.google.common.collect.Iterables.concat;
25import static com.google.common.collect.Iterables.getLast;
26import static com.google.common.collect.Iterables.transform;
27import static com.google.common.collect.Maps.transformValues;
28import static com.google.common.collect.Maps.uniqueIndex;
29import static org.jclouds.Constants.PROPERTY_API_VERSION;
30import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
31import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED;
32 
33import java.net.URI;
34import java.util.Map;
35import java.util.Map.Entry;
36import java.util.SortedMap;
37import java.util.concurrent.ExecutionException;
38import java.util.concurrent.TimeUnit;
39import java.util.concurrent.TimeoutException;
40import java.util.concurrent.atomic.AtomicReference;
41 
42import javax.inject.Inject;
43import javax.inject.Named;
44import javax.inject.Singleton;
45 
46import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
47import org.jclouds.domain.Location;
48import org.jclouds.http.HttpErrorHandler;
49import org.jclouds.http.RequiresHttp;
50import org.jclouds.http.annotation.ClientError;
51import org.jclouds.http.annotation.Redirection;
52import org.jclouds.http.annotation.ServerError;
53import org.jclouds.predicates.RetryablePredicate;
54import org.jclouds.rest.AsyncClientFactory;
55import org.jclouds.rest.AuthorizationException;
56import org.jclouds.rest.ConfiguresRestClient;
57import org.jclouds.rest.config.RestClientModule;
58import org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
59import org.jclouds.vcloud.VCloudAsyncClient;
60import org.jclouds.vcloud.VCloudClient;
61import org.jclouds.vcloud.VCloudToken;
62import org.jclouds.vcloud.VCloudVersionsAsyncClient;
63import org.jclouds.vcloud.compute.functions.FindLocationForResource;
64import org.jclouds.vcloud.domain.Catalog;
65import org.jclouds.vcloud.domain.CatalogItem;
66import org.jclouds.vcloud.domain.Org;
67import org.jclouds.vcloud.domain.ReferenceType;
68import org.jclouds.vcloud.domain.VAppTemplate;
69import org.jclouds.vcloud.domain.VCloudSession;
70import org.jclouds.vcloud.domain.VDC;
71import org.jclouds.vcloud.endpoints.OrgList;
72import org.jclouds.vcloud.features.CatalogAsyncClient;
73import org.jclouds.vcloud.features.CatalogClient;
74import org.jclouds.vcloud.features.NetworkAsyncClient;
75import org.jclouds.vcloud.features.NetworkClient;
76import org.jclouds.vcloud.features.OrgAsyncClient;
77import org.jclouds.vcloud.features.OrgClient;
78import org.jclouds.vcloud.features.TaskAsyncClient;
79import org.jclouds.vcloud.features.TaskClient;
80import org.jclouds.vcloud.features.VAppAsyncClient;
81import org.jclouds.vcloud.features.VAppClient;
82import org.jclouds.vcloud.features.VAppTemplateAsyncClient;
83import org.jclouds.vcloud.features.VAppTemplateClient;
84import org.jclouds.vcloud.features.VDCAsyncClient;
85import org.jclouds.vcloud.features.VDCClient;
86import org.jclouds.vcloud.features.VmAsyncClient;
87import org.jclouds.vcloud.features.VmClient;
88import org.jclouds.vcloud.functions.AllCatalogItemsInCatalog;
89import org.jclouds.vcloud.functions.AllCatalogItemsInOrg;
90import org.jclouds.vcloud.functions.AllCatalogsInOrg;
91import org.jclouds.vcloud.functions.AllVDCsInOrg;
92import org.jclouds.vcloud.functions.OrgsForLocations;
93import org.jclouds.vcloud.functions.OrgsForNames;
94import org.jclouds.vcloud.functions.VAppTemplatesForCatalogItems;
95import org.jclouds.vcloud.handlers.ParseVCloudErrorFromHttpResponse;
96import org.jclouds.vcloud.internal.VCloudLoginAsyncClient;
97import org.jclouds.vcloud.predicates.TaskSuccess;
98import org.jclouds.vcloud.xml.ovf.VCloudResourceAllocationSettingDataHandler;
99 
100import com.google.common.base.Function;
101import com.google.common.base.Predicate;
102import static com.google.common.base.Predicates.*;
103import com.google.common.base.Supplier;
104import static com.google.common.base.Suppliers.*;
105import com.google.common.collect.ImmutableMap;
106import com.google.common.collect.ImmutableMap.Builder;
107import static com.google.common.collect.Iterables.*;
108import com.google.inject.Injector;
109import com.google.inject.Provides;
110import com.google.inject.TypeLiteral;
111 
112/**
113 * Configures the VCloud authentication service connection, including logging
114 * and http transport.
115 * 
116 * @author Adrian Cole
117 */
118@RequiresHttp
119@ConfiguresRestClient
120public class VCloudRestClientModule extends RestClientModule<VCloudClient, VCloudAsyncClient> {
121 
122   public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
123            .put(VAppTemplateClient.class, VAppTemplateAsyncClient.class)//
124            .put(VAppClient.class, VAppAsyncClient.class)//
125            .put(VmClient.class, VmAsyncClient.class)//
126            .put(CatalogClient.class, CatalogAsyncClient.class)//
127            .put(TaskClient.class, TaskAsyncClient.class)//
128            .put(VDCClient.class, VDCAsyncClient.class)//
129            .put(NetworkClient.class, NetworkAsyncClient.class)//
130            .put(OrgClient.class, OrgAsyncClient.class)//
131            .build();
132 
133   public VCloudRestClientModule() {
134      super(VCloudClient.class, VCloudAsyncClient.class, DELEGATE_MAP);
135   }
136 
137   @Provides
138   @Singleton
139   protected VCloudLoginAsyncClient provideVCloudLogin(AsyncClientFactory factory) {
140      return factory.create(VCloudLoginAsyncClient.class);
141   }
142 
143   @Provides
144   @Singleton
145   protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
146         AtomicReference<AuthorizationException> authException, final VCloudLoginAsyncClient login) {
147      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<VCloudSession>(authException, seconds,
148            new Supplier<VCloudSession>() {
149 
150               @Override
151               public VCloudSession get() {
152                  try {
153                     return login.login().get(10, TimeUnit.SECONDS);
154                  } catch (Exception e) {
155                     propagate(e);
156                     assert false : e;
157                     return null;
158                  }
159               }
160 
161            });
162   }
163 
164   @Override
165   protected void configure() {
166      super.configure();
167      bind(new TypeLiteral<Function<Iterable<? extends CatalogItem>, Iterable<? extends VAppTemplate>>>() {
168      }).to(new TypeLiteral<VAppTemplatesForCatalogItems>() {
169      });
170      bind(ResourceAllocationSettingDataHandler.class).to(VCloudResourceAllocationSettingDataHandler.class);
171      // Ensures we don't retry on authorization failures
172      bind(new TypeLiteral<AtomicReference<AuthorizationException>>() {
173      }).toInstance(new AtomicReference<AuthorizationException>());
174      installDefaultVCloudEndpointsModule();
175      bind(new TypeLiteral<Function<ReferenceType, Location>>() {
176      }).to(new TypeLiteral<FindLocationForResource>() {
177      });
178      bind(new TypeLiteral<Function<Org, Iterable<? extends Catalog>>>() {
179      }).to(new TypeLiteral<AllCatalogsInOrg>() {
180      });
181      bind(new TypeLiteral<Function<Org, Iterable<? extends VDC>>>() {
182      }).to(new TypeLiteral<AllVDCsInOrg>() {
183      });
184      bind(new TypeLiteral<Function<Iterable<String>, Iterable<? extends Org>>>() {
185      }).to(new TypeLiteral<OrgsForNames>() {
186      });
187      bind(new TypeLiteral<Function<Iterable<? extends Location>, Iterable<? extends Org>>>() {
188      }).to(new TypeLiteral<OrgsForLocations>() {
189      });
190      bind(new TypeLiteral<Function<Catalog, Iterable<? extends CatalogItem>>>() {
191      }).to(new TypeLiteral<AllCatalogItemsInCatalog>() {
192      });
193      bind(new TypeLiteral<Function<Org, Iterable<? extends CatalogItem>>>() {
194      }).to(new TypeLiteral<AllCatalogItemsInOrg>() {
195      });
196   }
197 
198   @Provides
199   @Singleton
200   @org.jclouds.vcloud.endpoints.VDC
201   protected Supplier<Map<String, String>> provideVDCtoORG(Supplier<Map<String, ? extends Org>> orgNameToOrgSuppier) {
202      return compose(new Function<Map<String, ? extends Org>, Map<String, String>>() {
203 
204         @Override
205         public Map<String, String> apply(Map<String, ? extends Org> arg0) {
206            Builder<String, String> returnVal = ImmutableMap.<String, String> builder();
207            for (Entry<String, ? extends Org> orgr : arg0.entrySet()) {
208               for (String vdc : orgr.getValue().getVDCs().keySet()) {
209                  returnVal.put(vdc, orgr.getKey());
210               }
211            }
212            return returnVal.build();
213         }
214      }, orgNameToOrgSuppier);
215 
216   }
217 
218   @Provides
219   @Singleton
220   protected Supplier<Map<String, ? extends Org>> provideOrgMapCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
221         AtomicReference<AuthorizationException> authException, OrgMapSupplier supplier) {
222      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, ? extends Org>>(
223            authException, seconds, supplier);
224   }
225 
226   @Provides
227   @Singleton
228   @OrgList
229   URI provideOrgListURI(Supplier<VCloudSession> sessionSupplier) {
230      VCloudSession session = sessionSupplier.get();
231      return URI.create(getLast(session.getOrgs().values()).getHref().toASCIIString().replaceAll("org/.*", "org"));
232   }
233 
234   @Singleton
235   public static class OrgMapSupplier implements Supplier<Map<String, ? extends Org>> {
236      protected final Supplier<VCloudSession> sessionSupplier;
237      protected final Function<Iterable<String>, Iterable<? extends Org>> organizationsForNames;
238 
239      @Inject
240      protected OrgMapSupplier(Supplier<VCloudSession> sessionSupplier,
241            Function<Iterable<String>, Iterable<? extends Org>> organizationsForNames) {
242         this.sessionSupplier = sessionSupplier;
243         this.organizationsForNames = organizationsForNames;
244      }
245 
246      @Override
247      public Map<String, ? extends Org> get() {
248         return uniqueIndex(organizationsForNames.apply(sessionSupplier.get().getOrgs().keySet()), name);
249      }
250   }
251 
252   protected void installDefaultVCloudEndpointsModule() {
253      install(new DefaultVCloudReferencesModule());
254   }
255 
256   @Singleton
257   public static class OrgCatalogSupplier implements
258         Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>> {
259      protected final Supplier<Map<String, ? extends Org>> orgSupplier;
260      protected final Function<Org, Iterable<? extends org.jclouds.vcloud.domain.Catalog>> allCatalogsInOrg;
261 
262      @Inject
263      protected OrgCatalogSupplier(Supplier<Map<String, ? extends Org>> orgSupplier,
264            Function<Org, Iterable<? extends org.jclouds.vcloud.domain.Catalog>> allCatalogsInOrg) {
265         this.orgSupplier = orgSupplier;
266         this.allCatalogsInOrg = allCatalogsInOrg;
267      }
268 
269      @Override
270      public Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>> get() {
271         return transformValues(
272               transformValues(orgSupplier.get(), allCatalogsInOrg),
273               new Function<Iterable<? extends org.jclouds.vcloud.domain.Catalog>, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>() {
274 
275                  @Override
276                  public Map<String, ? extends org.jclouds.vcloud.domain.Catalog> apply(
277                        Iterable<? extends org.jclouds.vcloud.domain.Catalog> from) {
278                     return uniqueIndex(from, name);
279                  }
280 
281               });
282      }
283   }
284 
285   @VCloudToken
286   @Provides
287   String provideVCloudToken(Supplier<VCloudSession> cache) {
288      return checkNotNull(cache.get().getVCloudToken(), "No token present in session");
289   }
290 
291   @Provides
292   @org.jclouds.vcloud.endpoints.Org
293   @Singleton
294   protected Supplier<Map<String, ReferenceType>> provideVDCtoORG(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
295         AtomicReference<AuthorizationException> authException, OrgNameToOrgSupplier supplier) {
296      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, ReferenceType>>(
297            authException, seconds, supplier);
298   }
299 
300   @Provides
301   @Singleton
302   protected Supplier<Map<URI, ? extends org.jclouds.vcloud.domain.VDC>> provideURIToVDC(
303         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
304         URItoVDC supplier) {
305      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<URI, ? extends org.jclouds.vcloud.domain.VDC>>(
306            authException, seconds, supplier);
307   }
308 
309   @Singleton
310   public static class URItoVDC implements Supplier<Map<URI, ? extends org.jclouds.vcloud.domain.VDC>> {
311      private final Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> orgVDCMap;
312 
313      @Inject
314      URItoVDC(Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> orgVDCMap) {
315         this.orgVDCMap = orgVDCMap;
316      }
317 
318      @Override
319      public Map<URI, ? extends org.jclouds.vcloud.domain.VDC> get() {
320         return uniqueIndex(
321               concat(transform(
322                     orgVDCMap.get().values(),
323                     new Function<Map<String, ? extends org.jclouds.vcloud.domain.VDC>, Iterable<? extends org.jclouds.vcloud.domain.VDC>>() {
324 
325                        @Override
326                        public Iterable<? extends org.jclouds.vcloud.domain.VDC> apply(
327                              Map<String, ? extends org.jclouds.vcloud.domain.VDC> from) {
328                           return from.values();
329                        }
330 
331                     })), new Function<org.jclouds.vcloud.domain.VDC, URI>() {
332 
333                  @Override
334                  public URI apply(org.jclouds.vcloud.domain.VDC from) {
335                     return from.getHref();
336                  }
337 
338               });
339      }
340 
341   }
342 
343   final static Function<ReferenceType, String> name = new Function<ReferenceType, String>() {
344 
345      @Override
346      public String apply(ReferenceType from) {
347         return from.getName();
348      }
349 
350   };
351 
352   @Provides
353   @Singleton
354   @org.jclouds.vcloud.endpoints.VCloudLogin
355   protected URI provideAuthenticationURI(VCloudVersionsAsyncClient versionService,
356         @Named(PROPERTY_API_VERSION) String version) throws InterruptedException, ExecutionException, TimeoutException {
357      SortedMap<String, URI> versions = versionService.getSupportedVersions().get(180, TimeUnit.SECONDS);
358      checkState(versions.size() > 0, "No versions present");
359      checkState(versions.containsKey(version), "version " + version + " not present in: " + versions);
360      return versions.get(version);
361   }
362 
363   @Singleton
364   private static class OrgNameToOrgSupplier implements Supplier<Map<String, ReferenceType>> {
365      private final Supplier<VCloudSession> sessionSupplier;
366 
367      @SuppressWarnings("unused")
368      @Inject
369      OrgNameToOrgSupplier(Supplier<VCloudSession> sessionSupplier) {
370         this.sessionSupplier = sessionSupplier;
371      }
372 
373      @Override
374      public Map<String, ReferenceType> get() {
375         return sessionSupplier.get().getOrgs();
376      }
377 
378   }
379 
380   @Provides
381   @Singleton
382   protected VCloudVersionsAsyncClient provideVCloudVersions(AsyncClientFactory factory) {
383      return factory.create(VCloudVersionsAsyncClient.class);
384   }
385 
386   @Provides
387   @Singleton
388   protected Org provideOrg(Supplier<Map<String, ? extends Org>> orgSupplier,
389         @org.jclouds.vcloud.endpoints.Org ReferenceType defaultOrg) {
390      return orgSupplier.get().get(defaultOrg.getName());
391   }
392 
393   @Provides
394   @Singleton
395   protected Predicate<URI> successTester(Injector injector,
396         @Named(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED) long completed) {
397      return new RetryablePredicate<URI>(injector.getInstance(TaskSuccess.class), completed);
398   }
399 
400   @Provides
401   @Singleton
402   protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>> provideOrgCatalogItemMapSupplierCache(
403         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
404         OrgCatalogSupplier supplier) {
405      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>>(
406            authException, seconds, supplier);
407   }
408   
409   @Provides
410   @Singleton
411   protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache(
412         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
413         OrgVDCSupplier supplier) {
414      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>>(
415            authException, seconds, supplier);
416   }
417 
418   @Singleton
419   public static class OrgVDCSupplier implements
420         Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> {
421      protected final Supplier<Map<String, ? extends Org>> orgSupplier;
422      private final Function<Org, Iterable<? extends org.jclouds.vcloud.domain.VDC>> allVDCsInOrg;
423 
424      @Inject
425      protected OrgVDCSupplier(Supplier<Map<String, ? extends Org>> orgSupplier,
426            Function<Org, Iterable<? extends org.jclouds.vcloud.domain.VDC>> allVDCsInOrg) {
427         this.orgSupplier = orgSupplier;
428         this.allVDCsInOrg = allVDCsInOrg;
429      }
430 
431      @Override
432      public Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>> get() {
433         return transformValues(
434               transformValues(orgSupplier.get(), allVDCsInOrg),
435               new Function<Iterable<? extends org.jclouds.vcloud.domain.VDC>, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>() {
436 
437                  @Override
438                  public Map<String, ? extends org.jclouds.vcloud.domain.VDC> apply(
439                        Iterable<? extends org.jclouds.vcloud.domain.VDC> from) {
440                     return uniqueIndex(from, name);
441                  }
442 
443               });
444      }
445   }
446 
447   @Singleton
448   public static class OrgCatalogItemSupplier implements
449         Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>>> {
450      protected final Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>> catalogSupplier;
451      protected final Function<org.jclouds.vcloud.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog;
452 
453      @Inject
454      protected OrgCatalogItemSupplier(
455            Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>>> catalogSupplier,
456            Function<org.jclouds.vcloud.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog) {
457         this.catalogSupplier = catalogSupplier;
458         this.allCatalogItemsInCatalog = allCatalogItemsInCatalog;
459      }
460 
461      @Override
462      public Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>> get() {
463         return transformValues(
464               catalogSupplier.get(),
465               new Function<Map<String, ? extends org.jclouds.vcloud.domain.Catalog>, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>>() {
466 
467                  @Override
468                  public Map<String, Map<String, ? extends CatalogItem>> apply(
469                        Map<String, ? extends org.jclouds.vcloud.domain.Catalog> from) {
470                     return transformValues(
471                           from,
472                           new Function<org.jclouds.vcloud.domain.Catalog, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>() {
473 
474                              @Override
475                              public Map<String, ? extends CatalogItem> apply(org.jclouds.vcloud.domain.Catalog from) {
476                                 return uniqueIndex(filter(allCatalogItemsInCatalog.apply(from), notNull()), name);
477                              }
478                           });
479 
480                  }
481               });
482      }
483   }
484 
485   @Provides
486   @Singleton
487   protected Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>>> provideOrgCatalogItemSupplierCache(
488         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
489         OrgCatalogItemSupplier supplier) {
490      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>>>(
491            authException, seconds, supplier);
492   }
493 
494   @Override
495   protected void bindErrorHandlers() {
496      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseVCloudErrorFromHttpResponse.class);
497      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseVCloudErrorFromHttpResponse.class);
498      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseVCloudErrorFromHttpResponse.class);
499   }
500}

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