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

COVERAGE SUMMARY FOR SOURCE FILE [TerremarkVCloudRestClientModule.java]

nameclass, %method, %block, %line, %
TerremarkVCloudRestClientModule.java0%   (0/35)0%   (0/79)0%   (0/749)0%   (0/116)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TerremarkVCloudRestClientModule0%   (0/1)0%   (0/26)0%   (0/335)0%   (0/47)
<static initializer> 0%   (0/1)0%   (0/5)0%   (0/1)
TerremarkVCloudRestClientModule (Class, Class): void 0%   (0/1)0%   (0/5)0%   (0/2)
TerremarkVCloudRestClientModule (Class, Class, Map): void 0%   (0/1)0%   (0/6)0%   (0/2)
bindErrorHandlers (): void 0%   (0/1)0%   (0/25)0%   (0/4)
configure (): void 0%   (0/1)0%   (0/111)0%   (0/12)
installDefaultVCloudEndpointsModule (): void 0%   (0/1)0%   (0/6)0%   (0/2)
listOrgs (Supplier): Map 0%   (0/1)0%   (0/5)0%   (0/1)
provideAuthenticationURI (TerremarkVCloudVersionsAsyncClient, String): URI 0%   (0/1)0%   (0/36)0%   (0/4)
provideCreateInternetService (): String 0%   (0/1)0%   (0/6)0%   (0/1)
provideCreateKey (): String 0%   (0/1)0%   (0/6)0%   (0/1)
provideCreateNodeService (): String 0%   (0/1)0%   (0/6)0%   (0/1)
provideOrg (Supplier, ReferenceType): Org 0%   (0/1)0%   (0/8)0%   (0/1)
provideOrgCatalogItemMapSupplierCache (long, AtomicReference, TerremarkVCloud... 0%   (0/1)0%   (0/7)0%   (0/1)
provideOrgCatalogItemSupplierCache (long, AtomicReference, TerremarkVCloudRes... 0%   (0/1)0%   (0/7)0%   (0/1)
provideOrgListURI (Supplier): URI 0%   (0/1)0%   (0/16)0%   (0/2)
provideOrgMapCache (long, AtomicReference, TerremarkVCloudRestClientModule$Or... 0%   (0/1)0%   (0/7)0%   (0/1)
provideOrgToKeysListCache (long, AtomicReference, TerremarkVCloudRestClientMo... 0%   (0/1)0%   (0/7)0%   (0/1)
provideOrgVDCSupplierCache (long, AtomicReference, TerremarkVCloudRestClientM... 0%   (0/1)0%   (0/7)0%   (0/1)
provideURIToVDC (long, AtomicReference, TerremarkVCloudRestClientModule$URIto... 0%   (0/1)0%   (0/7)0%   (0/1)
provideVCloudLogin (AsyncClientFactory): TerremarkVCloudLoginAsyncClient 0%   (0/1)0%   (0/5)0%   (0/1)
provideVCloudToken (Supplier): String 0%   (0/1)0%   (0/8)0%   (0/1)
provideVCloudTokenCache (long, AtomicReference, TerremarkVCloudLoginAsyncClie... 0%   (0/1)0%   (0/11)0%   (0/1)
provideVCloudVersions (AsyncClientFactory): TerremarkVCloudVersionsAsyncClient 0%   (0/1)0%   (0/5)0%   (0/1)
provideVDCtoORG (Supplier): Supplier 0%   (0/1)0%   (0/7)0%   (0/1)
provideVDCtoORG (long, AtomicReference, TerremarkVCloudRestClientModule$OrgNa... 0%   (0/1)0%   (0/7)0%   (0/1)
successTester (Injector, long): Predicate 0%   (0/1)0%   (0/9)0%   (0/1)
     
class TerremarkVCloudRestClientModule$10%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$1 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$100%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$10 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$110%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$11 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$120%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$12 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$130%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$13 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$140%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$14 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$150%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$15 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$160%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$16 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$170%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$17 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$180%   (0/1)0%   (0/2)0%   (0/44)0%   (0/6)
TerremarkVCloudRestClientModule$18 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Map 0%   (0/1)0%   (0/38)0%   (0/5)
     
class TerremarkVCloudRestClientModule$190%   (0/1)0%   (0/2)0%   (0/6)0%   (0/2)
TerremarkVCloudRestClientModule$19 (): void 0%   (0/1)0%   (0/3)0%   (0/1)
apply (ReferenceType): String 0%   (0/1)0%   (0/3)0%   (0/1)
     
class TerremarkVCloudRestClientModule$20%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$2 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$200%   (0/1)0%   (0/3)0%   (0/38)0%   (0/6)
<static initializer> 0%   (0/1)0%   (0/8)0%   (0/1)
TerremarkVCloudRestClientModule$20 (TerremarkVCloudRestClientModule, Terremar... 0%   (0/1)0%   (0/9)0%   (0/1)
get (): VCloudSession 0%   (0/1)0%   (0/21)0%   (0/5)
     
class TerremarkVCloudRestClientModule$30%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$3 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$40%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$4 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$50%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$5 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$60%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$6 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$70%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$7 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$80%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$8 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$90%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
TerremarkVCloudRestClientModule$9 (TerremarkVCloudRestClientModule): void 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgCatalogItemSupplier0%   (0/1)0%   (0/2)0%   (0/19)0%   (0/5)
TerremarkVCloudRestClientModule$OrgCatalogItemSupplier (Supplier, Function): ... 0%   (0/1)0%   (0/9)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/10)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgCatalogItemSupplier$10%   (0/1)0%   (0/2)0%   (0/13)0%   (0/2)
TerremarkVCloudRestClientModule$OrgCatalogItemSupplier$1 (TerremarkVCloudRest... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Map 0%   (0/1)0%   (0/7)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgCatalogItemSupplier$1$10%   (0/1)0%   (0/2)0%   (0/16)0%   (0/2)
TerremarkVCloudRestClientModule$OrgCatalogItemSupplier$1$1 (TerremarkVCloudRe... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Catalog): Map 0%   (0/1)0%   (0/10)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgCatalogSupplier0%   (0/1)0%   (0/2)0%   (0/22)0%   (0/5)
TerremarkVCloudRestClientModule$OrgCatalogSupplier (Supplier, Function): void 0%   (0/1)0%   (0/9)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgCatalogSupplier$10%   (0/1)0%   (0/2)0%   (0/10)0%   (0/2)
TerremarkVCloudRestClientModule$OrgCatalogSupplier$1 (TerremarkVCloudRestClie... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Iterable): Map 0%   (0/1)0%   (0/4)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgMapSupplier0%   (0/1)0%   (0/2)0%   (0/22)0%   (0/5)
TerremarkVCloudRestClientModule$OrgMapSupplier (Supplier, Function): void 0%   (0/1)0%   (0/9)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgNameToKeysListSupplier0%   (0/1)0%   (0/3)0%   (0/23)0%   (0/6)
TerremarkVCloudRestClientModule$OrgNameToKeysListSupplier (Supplier, Terremar... 0%   (0/1)0%   (0/9)0%   (0/4)
access$000 (TerremarkVCloudRestClientModule$OrgNameToKeysListSupplier): Terre... 0%   (0/1)0%   (0/3)0%   (0/1)
get (): Map 0%   (0/1)0%   (0/11)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgNameToKeysListSupplier$10%   (0/1)0%   (0/2)0%   (0/14)0%   (0/2)
TerremarkVCloudRestClientModule$OrgNameToKeysListSupplier$1 (TerremarkVCloudR... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (ReferenceType): ReferenceType 0%   (0/1)0%   (0/8)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgNameToOrgSupplier0%   (0/1)0%   (0/2)0%   (0/12)0%   (0/4)
TerremarkVCloudRestClientModule$OrgNameToOrgSupplier (Supplier): void 0%   (0/1)0%   (0/6)0%   (0/3)
get (): Map 0%   (0/1)0%   (0/6)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgVDCSupplier0%   (0/1)0%   (0/2)0%   (0/22)0%   (0/5)
TerremarkVCloudRestClientModule$OrgVDCSupplier (Supplier, Function): void 0%   (0/1)0%   (0/9)0%   (0/4)
get (): Map 0%   (0/1)0%   (0/13)0%   (0/1)
     
class TerremarkVCloudRestClientModule$OrgVDCSupplier$10%   (0/1)0%   (0/2)0%   (0/10)0%   (0/2)
TerremarkVCloudRestClientModule$OrgVDCSupplier$1 (TerremarkVCloudRestClientMo... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Iterable): Map 0%   (0/1)0%   (0/4)0%   (0/1)
     
class TerremarkVCloudRestClientModule$URItoVDC0%   (0/1)0%   (0/2)0%   (0/23)0%   (0/4)
TerremarkVCloudRestClientModule$URItoVDC (Supplier): void 0%   (0/1)0%   (0/6)0%   (0/3)
get (): Map 0%   (0/1)0%   (0/17)0%   (0/1)
     
class TerremarkVCloudRestClientModule$URItoVDC$10%   (0/1)0%   (0/2)0%   (0/9)0%   (0/2)
TerremarkVCloudRestClientModule$URItoVDC$1 (TerremarkVCloudRestClientModule$U... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (Map): Iterable 0%   (0/1)0%   (0/3)0%   (0/1)
     
class TerremarkVCloudRestClientModule$URItoVDC$20%   (0/1)0%   (0/2)0%   (0/9)0%   (0/2)
TerremarkVCloudRestClientModule$URItoVDC$2 (TerremarkVCloudRestClientModule$U... 0%   (0/1)0%   (0/6)0%   (0/1)
apply (VDC): URI 0%   (0/1)0%   (0/3)0%   (0/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.trmk.vcloud_0_8.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.trmk.vcloud_0_8.reference.VCloudConstants.PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED;
32 
33import java.io.IOException;
34import java.net.URI;
35import java.util.Map;
36import java.util.Map.Entry;
37import java.util.SortedMap;
38import java.util.concurrent.ExecutionException;
39import java.util.concurrent.TimeUnit;
40import java.util.concurrent.TimeoutException;
41import java.util.concurrent.atomic.AtomicReference;
42 
43import javax.inject.Inject;
44import javax.inject.Named;
45import javax.inject.Singleton;
46 
47import org.jclouds.domain.Location;
48import org.jclouds.http.HttpErrorHandler;
49import org.jclouds.http.annotation.ClientError;
50import org.jclouds.http.annotation.Redirection;
51import org.jclouds.http.annotation.ServerError;
52import org.jclouds.predicates.RetryablePredicate;
53import org.jclouds.rest.AsyncClientFactory;
54import org.jclouds.rest.AuthorizationException;
55import org.jclouds.rest.config.RestClientModule;
56import org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
57import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
58import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
59import org.jclouds.trmk.vcloud_0_8.VCloudToken;
60import org.jclouds.trmk.vcloud_0_8.compute.functions.FindLocationForResource;
61import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
62import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
63import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
64import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
65import org.jclouds.trmk.vcloud_0_8.domain.VCloudSession;
66import org.jclouds.trmk.vcloud_0_8.domain.VDC;
67import org.jclouds.trmk.vcloud_0_8.endpoints.Keys;
68import org.jclouds.trmk.vcloud_0_8.endpoints.Org;
69import org.jclouds.trmk.vcloud_0_8.endpoints.OrgList;
70import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog;
71import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg;
72import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogsInOrg;
73import org.jclouds.trmk.vcloud_0_8.functions.AllVDCsInOrg;
74import org.jclouds.trmk.vcloud_0_8.functions.OrgsForLocations;
75import org.jclouds.trmk.vcloud_0_8.functions.OrgsForNames;
76import org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems;
77import org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse;
78import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudLoginAsyncClient;
79import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudVersionsAsyncClient;
80import org.jclouds.trmk.vcloud_0_8.predicates.TaskSuccess;
81import org.jclouds.util.Strings2;
82 
83import com.google.common.base.Function;
84import com.google.common.base.Predicate;
85import com.google.common.base.Supplier;
86import com.google.common.base.Suppliers;
87import com.google.common.collect.ImmutableMap;
88import com.google.common.collect.ImmutableMap.Builder;
89import com.google.common.collect.Maps;
90import com.google.inject.Injector;
91import com.google.inject.Provides;
92import com.google.inject.TypeLiteral;
93 
94public class TerremarkVCloudRestClientModule<S extends TerremarkVCloudClient, A extends TerremarkVCloudAsyncClient>
95      extends RestClientModule<S, A> {
96 
97   public TerremarkVCloudRestClientModule(Class<S> syncClientType, Class<A> asyncClientType) {
98      super(syncClientType, asyncClientType);
99   }
100 
101   public TerremarkVCloudRestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
102         Map<Class<?>, Class<?>> delegateMap) {
103      super(syncClientType, asyncClientType, delegateMap);
104   }
105 
106   @Override
107   protected void configure() {
108      super.configure();
109      bind(new TypeLiteral<Function<Iterable<? extends CatalogItem>, Iterable<? extends VAppTemplate>>>() {
110      }).to(new TypeLiteral<VAppTemplatesForCatalogItems>() {
111      });
112      // Ensures we don't retry on authorization failures
113      bind(new TypeLiteral<AtomicReference<AuthorizationException>>() {
114      }).toInstance(new AtomicReference<AuthorizationException>());
115      installDefaultVCloudEndpointsModule();
116      bind(new TypeLiteral<Function<ReferenceType, Location>>() {
117      }).to(new TypeLiteral<FindLocationForResource>() {
118      });
119      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends Catalog>>>() {
120      }).to(new TypeLiteral<AllCatalogsInOrg>() {
121      });
122      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends VDC>>>() {
123      }).to(new TypeLiteral<AllVDCsInOrg>() {
124      });
125      bind(new TypeLiteral<Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>>>() {
126      }).to(new TypeLiteral<OrgsForNames>() {
127      });
128      bind(
129            new TypeLiteral<Function<Iterable<? extends Location>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>>>() {
130            }).to(new TypeLiteral<OrgsForLocations>() {
131      });
132      bind(new TypeLiteral<Function<Catalog, Iterable<? extends CatalogItem>>>() {
133      }).to(new TypeLiteral<AllCatalogItemsInCatalog>() {
134      });
135      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends CatalogItem>>>() {
136      }).to(new TypeLiteral<AllCatalogItemsInOrg>() {
137      });
138   }
139 
140   @Provides
141   @Singleton
142   @org.jclouds.trmk.vcloud_0_8.endpoints.VDC
143   protected Supplier<Map<String, String>> provideVDCtoORG(
144         Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgNameToOrgSuppier) {
145      return Suppliers.compose(
146            new Function<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>, Map<String, String>>() {
147 
148               @Override
149               public Map<String, String> apply(Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> arg0) {
150                  Builder<String, String> returnVal = ImmutableMap.<String, String> builder();
151                  for (Entry<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> orgr : arg0.entrySet()) {
152                     for (String vdc : orgr.getValue().getVDCs().keySet()) {
153                        returnVal.put(vdc, orgr.getKey());
154                     }
155                  }
156                  return returnVal.build();
157               }
158            }, orgNameToOrgSuppier);
159 
160   }
161 
162   @Provides
163   @Singleton
164   protected Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> provideOrgMapCache(
165         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
166         OrgMapSupplier supplier) {
167      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>>(
168            authException, seconds, supplier);
169   }
170 
171   @Provides
172   @Singleton
173   @OrgList
174   URI provideOrgListURI(Supplier<VCloudSession> sessionSupplier) {
175      VCloudSession session = sessionSupplier.get();
176      return URI.create(getLast(session.getOrgs().values()).getHref().toASCIIString().replaceAll("org/.*", "org"));
177   }
178 
179   @Singleton
180   public static class OrgMapSupplier implements
181         Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> {
182      protected final Supplier<VCloudSession> sessionSupplier;
183      protected final Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> organizationsForNames;
184 
185      @Inject
186      protected OrgMapSupplier(Supplier<VCloudSession> sessionSupplier,
187            Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> organizationsForNames) {
188         this.sessionSupplier = sessionSupplier;
189         this.organizationsForNames = organizationsForNames;
190      }
191 
192      @Override
193      public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> get() {
194         return uniqueIndex(organizationsForNames.apply(sessionSupplier.get().getOrgs().keySet()), name);
195      }
196   }
197 
198   protected void installDefaultVCloudEndpointsModule() {
199      install(new DefaultVCloudReferencesModule());
200   }
201 
202   @Singleton
203   public static class OrgCatalogSupplier implements
204         Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> {
205      protected final Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier;
206      protected final Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> allCatalogsInOrg;
207 
208      @Inject
209      protected OrgCatalogSupplier(
210            Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
211            Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> allCatalogsInOrg) {
212         this.orgSupplier = orgSupplier;
213         this.allCatalogsInOrg = allCatalogsInOrg;
214      }
215 
216      @Override
217      public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> get() {
218         return transformValues(
219               transformValues(orgSupplier.get(), allCatalogsInOrg),
220               new Function<Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>() {
221 
222                  @Override
223                  public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> apply(
224                        Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> from) {
225                     return uniqueIndex(from, name);
226                  }
227 
228               });
229      }
230   }
231 
232   @VCloudToken
233   @Provides
234   String provideVCloudToken(Supplier<VCloudSession> cache) {
235      return checkNotNull(cache.get().getVCloudToken(), "No token present in session");
236   }
237 
238   @Provides
239   @org.jclouds.trmk.vcloud_0_8.endpoints.Org
240   @Singleton
241   protected Supplier<Map<String, ReferenceType>> provideVDCtoORG(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
242         AtomicReference<AuthorizationException> authException, OrgNameToOrgSupplier supplier) {
243      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, ReferenceType>>(
244            authException, seconds, supplier);
245   }
246 
247   @Provides
248   @Singleton
249   protected Supplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> provideURIToVDC(
250         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
251         URItoVDC supplier) {
252      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>(
253            authException, seconds, supplier);
254   }
255 
256   @Singleton
257   public static class URItoVDC implements Supplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> {
258      private final Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> orgVDCMap;
259 
260      @Inject
261      URItoVDC(Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> orgVDCMap) {
262         this.orgVDCMap = orgVDCMap;
263      }
264 
265      @Override
266      public Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> get() {
267         return uniqueIndex(
268               concat(transform(
269                     orgVDCMap.get().values(),
270                     new Function<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>() {
271 
272                        @Override
273                        public Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(
274                              Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> from) {
275                           return from.values();
276                        }
277 
278                     })), new Function<org.jclouds.trmk.vcloud_0_8.domain.VDC, URI>() {
279 
280                  @Override
281                  public URI apply(org.jclouds.trmk.vcloud_0_8.domain.VDC from) {
282                     return from.getHref();
283                  }
284 
285               });
286      }
287 
288   }
289 
290   final static Function<ReferenceType, String> name = new Function<ReferenceType, String>() {
291 
292      @Override
293      public String apply(ReferenceType from) {
294         return from.getName();
295      }
296 
297   };
298 
299   @Provides
300   @Singleton
301   @org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin
302   protected URI provideAuthenticationURI(TerremarkVCloudVersionsAsyncClient versionService,
303         @Named(PROPERTY_API_VERSION) String version) throws InterruptedException, ExecutionException, TimeoutException {
304      SortedMap<String, URI> versions = versionService.getSupportedVersions().get(180, TimeUnit.SECONDS);
305      checkState(versions.size() > 0, "No versions present");
306      checkState(versions.containsKey(version), "version " + version + " not present in: " + versions);
307      return versions.get(version);
308   }
309 
310   @Singleton
311   private static class OrgNameToOrgSupplier implements Supplier<Map<String, ReferenceType>> {
312      private final Supplier<VCloudSession> sessionSupplier;
313 
314      @SuppressWarnings("unused")
315      @Inject
316      OrgNameToOrgSupplier(Supplier<VCloudSession> sessionSupplier) {
317         this.sessionSupplier = sessionSupplier;
318      }
319 
320      @Override
321      public Map<String, ReferenceType> get() {
322         return sessionSupplier.get().getOrgs();
323      }
324 
325   }
326 
327   @Provides
328   @Singleton
329   protected TerremarkVCloudVersionsAsyncClient provideVCloudVersions(AsyncClientFactory factory) {
330      return factory.create(TerremarkVCloudVersionsAsyncClient.class);
331   }
332 
333   @Provides
334   @Singleton
335   protected org.jclouds.trmk.vcloud_0_8.domain.Org provideOrg(
336         Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
337         @org.jclouds.trmk.vcloud_0_8.endpoints.Org ReferenceType defaultOrg) {
338      return orgSupplier.get().get(defaultOrg.getName());
339   }
340 
341   @Provides
342   @Singleton
343   protected Predicate<URI> successTester(Injector injector,
344         @Named(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED) long completed) {
345      return new RetryablePredicate<URI>(injector.getInstance(TaskSuccess.class), completed);
346   }
347 
348   @Provides
349   @Singleton
350   protected Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> provideOrgCatalogItemMapSupplierCache(
351         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
352         OrgCatalogSupplier supplier) {
353      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>>(
354            authException, seconds, supplier);
355   }
356 
357   @Provides
358   @Singleton
359   protected Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> provideOrgVDCSupplierCache(
360         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
361         OrgVDCSupplier supplier) {
362      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>>(
363            authException, seconds, supplier);
364   }
365 
366   @Singleton
367   public static class OrgVDCSupplier implements
368         Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> {
369      protected final Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier;
370      private final Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> allVDCsInOrg;
371 
372      @Inject
373      protected OrgVDCSupplier(
374            Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
375            Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> allVDCsInOrg) {
376         this.orgSupplier = orgSupplier;
377         this.allVDCsInOrg = allVDCsInOrg;
378      }
379 
380      @Override
381      public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> get() {
382         return transformValues(
383               transformValues(orgSupplier.get(), allVDCsInOrg),
384               new Function<Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>() {
385 
386                  @Override
387                  public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(
388                        Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> from) {
389                     return uniqueIndex(from, name);
390                  }
391 
392               });
393      }
394   }
395 
396   @Singleton
397   public static class OrgCatalogItemSupplier implements
398         Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>> {
399      protected final Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> catalogSupplier;
400      protected final Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog;
401 
402      @Inject
403      protected OrgCatalogItemSupplier(
404            Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> catalogSupplier,
405            Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog) {
406         this.catalogSupplier = catalogSupplier;
407         this.allCatalogItemsInCatalog = allCatalogItemsInCatalog;
408      }
409 
410      @Override
411      public Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> get() {
412         return transformValues(
413               catalogSupplier.get(),
414               new Function<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>() {
415 
416                  @Override
417                  public Map<String, Map<String, ? extends CatalogItem>> apply(
418                        Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> from) {
419                     return transformValues(
420                           from,
421                           new Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>() {
422 
423                              @Override
424                              public Map<String, ? extends CatalogItem> apply(
425                                    org.jclouds.trmk.vcloud_0_8.domain.Catalog from) {
426                                 return uniqueIndex(allCatalogItemsInCatalog.apply(from), name);
427                              }
428                           });
429 
430                  }
431               });
432      }
433   }
434 
435   @Provides
436   @Singleton
437   protected Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>> provideOrgCatalogItemSupplierCache(
438         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
439         OrgCatalogItemSupplier supplier) {
440      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>>(
441            authException, seconds, supplier);
442   }
443 
444   /**
445    * 
446    * @return a listing of all orgs that the current user has access to.
447    */
448   @Provides
449   @Org
450   Map<String, ReferenceType> listOrgs(Supplier<VCloudSession> sessionSupplier) {
451      return sessionSupplier.get().getOrgs();
452   }
453 
454   @Provides
455   @Singleton
456   protected TerremarkVCloudLoginAsyncClient provideVCloudLogin(AsyncClientFactory factory) {
457      return factory.create(TerremarkVCloudLoginAsyncClient.class);
458   }
459 
460   @Provides
461   @Singleton
462   protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
463         AtomicReference<AuthorizationException> authException, final TerremarkVCloudLoginAsyncClient login) {
464      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<VCloudSession>(authException, seconds,
465            new Supplier<VCloudSession>() {
466 
467               @Override
468               public VCloudSession get() {
469                  try {
470                     return login.login().get(10, TimeUnit.SECONDS);
471                  } catch (Exception e) {
472                     propagate(e);
473                     assert false : e;
474                     return null;
475                  }
476               }
477 
478            });
479   }
480 
481   @Singleton
482   @Provides
483   @Named("CreateInternetService")
484   String provideCreateInternetService() throws IOException {
485      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateInternetService.xml"));
486   }
487 
488   @Singleton
489   @Provides
490   @Named("CreateNodeService")
491   String provideCreateNodeService() throws IOException {
492      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateNodeService.xml"));
493   }
494 
495   @Override
496   protected void bindErrorHandlers() {
497      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
498      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
499      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
500   }
501 
502   @Singleton
503   public static class OrgNameToKeysListSupplier implements Supplier<Map<String, ReferenceType>> {
504      protected final Supplier<VCloudSession> sessionSupplier;
505      private final TerremarkVCloudClient client;
506 
507      @Inject
508      protected OrgNameToKeysListSupplier(Supplier<VCloudSession> sessionSupplier, TerremarkVCloudClient client) {
509         this.sessionSupplier = sessionSupplier;
510         this.client = client;
511      }
512 
513      @Override
514      public Map<String, ReferenceType> get() {
515         return Maps.transformValues(sessionSupplier.get().getOrgs(), new Function<ReferenceType, ReferenceType>() {
516 
517            @Override
518            public ReferenceType apply(ReferenceType from) {
519               return client.findOrgNamed(from.getName()).getKeys();
520            }
521 
522         });
523      }
524   }
525 
526   @Provides
527   @Singleton
528   @Keys
529   protected Supplier<Map<String, ReferenceType>> provideOrgToKeysListCache(
530         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
531         OrgNameToKeysListSupplier supplier) {
532      return new MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, ReferenceType>>(
533            authException, seconds, supplier);
534   }
535 
536   @Singleton
537   @Provides
538   @Named("CreateKey")
539   String provideCreateKey() throws IOException {
540      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateKey.xml"));
541   }
542}

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