You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ab...@apache.org on 2013/08/29 20:31:49 UTC

[07/14] JCLOUDS-166, JCLOUDS-167 - Removing async from vcloud and Terremark APIs/providers

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
deleted file mode 100644
index 8c012f8..0000000
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.trmk.vcloud_0_8.config;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.getLast;
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Maps.transformValues;
-import static com.google.common.collect.Maps.uniqueIndex;
-import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
-import static org.jclouds.rest.config.BinderUtils.bindSyncToAsyncHttpApi;
-import static org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants.PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED;
-import static org.jclouds.util.Predicates2.retry;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.SortedMap;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.domain.Location;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.location.suppliers.ImplicitLocationSupplier;
-import org.jclouds.location.suppliers.LocationsSupplier;
-import org.jclouds.rest.AuthorizationException;
-import org.jclouds.rest.annotations.ApiVersion;
-import org.jclouds.rest.config.RestClientModule;
-import org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
-import org.jclouds.trmk.vcloud_0_8.VCloudToken;
-import org.jclouds.trmk.vcloud_0_8.compute.functions.FindLocationForResource;
-import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
-import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
-import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
-import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
-import org.jclouds.trmk.vcloud_0_8.domain.VCloudSession;
-import org.jclouds.trmk.vcloud_0_8.domain.VDC;
-import org.jclouds.trmk.vcloud_0_8.endpoints.Keys;
-import org.jclouds.trmk.vcloud_0_8.endpoints.Org;
-import org.jclouds.trmk.vcloud_0_8.endpoints.OrgList;
-import org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin;
-import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInCatalog;
-import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg;
-import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogsInOrg;
-import org.jclouds.trmk.vcloud_0_8.functions.AllVDCsInOrg;
-import org.jclouds.trmk.vcloud_0_8.functions.OrgsForLocations;
-import org.jclouds.trmk.vcloud_0_8.functions.OrgsForNames;
-import org.jclouds.trmk.vcloud_0_8.functions.VAppTemplatesForCatalogItems;
-import org.jclouds.trmk.vcloud_0_8.handlers.ParseTerremarkVCloudErrorFromHttpResponse;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudLoginAsyncClient;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudLoginClient;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudVersionsAsyncClient;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudVersionsClient;
-import org.jclouds.trmk.vcloud_0_8.location.DefaultVDC;
-import org.jclouds.trmk.vcloud_0_8.location.OrgAndVDCToLocationSupplier;
-import org.jclouds.trmk.vcloud_0_8.predicates.TaskSuccess;
-import org.jclouds.util.Strings2;
-
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
-import com.google.common.collect.Maps;
-import com.google.inject.Injector;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-import com.google.inject.TypeLiteral;
-
-public class TerremarkVCloudRestClientModule<S, A> extends RestClientModule<S, A> {
-
-   public TerremarkVCloudRestClientModule() {
-   }
-
-   public TerremarkVCloudRestClientModule(Map<Class<?>, Class<?>> delegateMap) {
-      super(delegateMap);
-   }
-
-   @Override
-   protected void configure() {
-      super.configure();
-      bind(new TypeLiteral<Function<Iterable<? extends CatalogItem>, Iterable<? extends VAppTemplate>>>() {
-      }).to(new TypeLiteral<VAppTemplatesForCatalogItems>() {
-      });
-      installDefaultVCloudEndpointsModule();
-      bind(new TypeLiteral<Function<ReferenceType, Location>>() {
-      }).to(new TypeLiteral<FindLocationForResource>() {
-      });
-      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends Catalog>>>() {
-      }).to(new TypeLiteral<AllCatalogsInOrg>() {
-      });
-      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends VDC>>>() {
-      }).to(new TypeLiteral<AllVDCsInOrg>() {
-      });
-      bind(new TypeLiteral<Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>>>() {
-      }).to(new TypeLiteral<OrgsForNames>() {
-      });
-      bind(
-            new TypeLiteral<Function<Iterable<? extends Location>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>>>() {
-            }).to(new TypeLiteral<OrgsForLocations>() {
-      });
-      bind(new TypeLiteral<Function<Catalog, Iterable<? extends CatalogItem>>>() {
-      }).to(new TypeLiteral<AllCatalogItemsInCatalog>() {
-      });
-      bind(new TypeLiteral<Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends CatalogItem>>>() {
-      }).to(new TypeLiteral<AllCatalogItemsInOrg>() {
-      });
-      bindSyncToAsyncHttpApi(binder(), TerremarkVCloudVersionsClient.class, TerremarkVCloudVersionsAsyncClient.class);
-      bindSyncToAsyncHttpApi(binder(), TerremarkVCloudLoginClient.class, TerremarkVCloudLoginAsyncClient.class);
-   }
-
-   @Provides
-   @Singleton
-   @org.jclouds.trmk.vcloud_0_8.endpoints.VDC
-   protected Supplier<Map<String, String>> provideVDCtoORG(
-         Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgNameToOrgSupplier) {
-      return Suppliers.compose(
-            new Function<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>, Map<String, String>>() {
-
-               @Override
-               public Map<String, String> apply(Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> arg0) {
-                  Builder<String, String> returnVal = ImmutableMap.builder();
-                  for (Entry<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> orgr : arg0.entrySet()) {
-                     for (String vdc : orgr.getValue().getVDCs().keySet()) {
-                        returnVal.put(vdc, orgr.getKey());
-                     }
-                  }
-                  return returnVal.build();
-               }
-            }, orgNameToOrgSupplier);
-
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> provideOrgMapCache(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         OrgMapSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Provides
-   @Singleton
-   @OrgList
-   protected Supplier<URI> provideOrgListURI(Supplier<VCloudSession> sessionSupplier) {
-      return Suppliers.compose(new Function<VCloudSession, URI>() {
-
-         @Override
-         public URI apply(VCloudSession arg0) {
-            return URI.create(getLast(arg0.getOrgs().values()).getHref().toASCIIString().replaceAll("org/.*", "org"));
-         }
-
-         @Override
-         public String toString() {
-            return "orgListURI()";
-         }
-
-      }, sessionSupplier);
-   }
-
-   @Singleton
-   public static class OrgMapSupplier implements
-         Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> {
-      protected final Supplier<VCloudSession> sessionSupplier;
-      protected final Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> organizationsForNames;
-
-      @Inject
-      protected OrgMapSupplier(Supplier<VCloudSession> sessionSupplier,
-            Function<Iterable<String>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> organizationsForNames) {
-         this.sessionSupplier = sessionSupplier;
-         this.organizationsForNames = organizationsForNames;
-      }
-
-      @Override
-      public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org> get() {
-         return uniqueIndex(organizationsForNames.apply(sessionSupplier.get().getOrgs().keySet()), name);
-      }
-   }
-
-   protected void installDefaultVCloudEndpointsModule() {
-      install(new DefaultVCloudReferencesModule());
-   }
-
-   @Singleton
-   public static class OrgCatalogSupplier implements
-         Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> {
-      protected final Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier;
-      protected final Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> allCatalogsInOrg;
-
-      @Inject
-      protected OrgCatalogSupplier(
-            Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
-            Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> allCatalogsInOrg) {
-         this.orgSupplier = orgSupplier;
-         this.allCatalogsInOrg = allCatalogsInOrg;
-      }
-
-      @Override
-      public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> get() {
-         return transformValues(
-               transformValues(orgSupplier.get(), allCatalogsInOrg),
-               new Function<Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>() {
-
-                  @Override
-                  public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> apply(
-                        Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> from) {
-                     return uniqueIndex(from, name);
-                  }
-
-               });
-      }
-   }
-
-   @VCloudToken
-   @Provides
-   String provideVCloudToken(Supplier<VCloudSession> cache) {
-      return checkNotNull(cache.get().getVCloudToken(), "No token present in session");
-   }
-
-   @Provides
-   @org.jclouds.trmk.vcloud_0_8.endpoints.Org
-   @Singleton
-   protected Supplier<Map<String, ReferenceType>> provideVDCtoORG(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
-         AtomicReference<AuthorizationException> authException, OrgNameToOrgSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> provideURIToVDC(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         URItoVDC supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Singleton
-   public static class URItoVDC implements Supplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> {
-      private final Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> orgVDCMap;
-
-      @Inject
-      URItoVDC(Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> orgVDCMap) {
-         this.orgVDCMap = orgVDCMap;
-      }
-
-      @Override
-      public Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> get() {
-         return uniqueIndex(
-               concat(transform(
-                     orgVDCMap.get().values(),
-                     new Function<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>() {
-
-                        @Override
-                        public Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(
-                              Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> from) {
-                           return from.values();
-                        }
-
-                     })), new Function<org.jclouds.trmk.vcloud_0_8.domain.VDC, URI>() {
-
-                  @Override
-                  public URI apply(org.jclouds.trmk.vcloud_0_8.domain.VDC from) {
-                     return from.getHref();
-                  }
-
-               });
-      }
-
-   }
-
-   static final Function<ReferenceType, String> name = new Function<ReferenceType, String>() {
-
-      @Override
-      public String apply(ReferenceType from) {
-         return from.getName();
-      }
-
-   };
-
-
-   @Provides
-   @Singleton
-   @VCloudLogin
-   protected Supplier<URI> provideAuthenticationURI(final TerremarkVCloudVersionsClient versionService,
-            @ApiVersion final String version) {
-      return new Supplier<URI>() {
-
-         @Override
-         public URI get() {
-            SortedMap<String, URI> versions = versionService.getSupportedVersions();
-            checkState(versions.size() > 0, "No versions present");
-            checkState(versions.containsKey(version), "version " + version + " not present in: " + versions);
-            return versions.get(version);
-         }
-
-         public String toString() {
-            return "login()";
-         }
-      };
-   }
-
-
-   @Singleton
-   private static class OrgNameToOrgSupplier implements Supplier<Map<String, ReferenceType>> {
-      private final Supplier<VCloudSession> sessionSupplier;
-
-      @Inject
-      OrgNameToOrgSupplier(Supplier<VCloudSession> sessionSupplier) {
-         this.sessionSupplier = sessionSupplier;
-      }
-
-      @Override
-      public Map<String, ReferenceType> get() {
-         return sessionSupplier.get().getOrgs();
-      }
-
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<org.jclouds.trmk.vcloud_0_8.domain.Org> provideOrg(
-         final Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
-         @org.jclouds.trmk.vcloud_0_8.endpoints.Org Supplier<ReferenceType> defaultOrg) {
-      return Suppliers.compose(new Function<ReferenceType, org.jclouds.trmk.vcloud_0_8.domain.Org>() {
-
-         @Override
-         public org.jclouds.trmk.vcloud_0_8.domain.Org apply(ReferenceType input) {
-            return orgSupplier.get().get(input.getName());
-
-         }
-      }, defaultOrg);
-   }
-
-   @Provides
-   @Singleton
-   protected Predicate<URI> successTester(Injector injector,
-         @Named(PROPERTY_VCLOUD_TIMEOUT_TASK_COMPLETED) long completed) {
-      return retry(injector.getInstance(TaskSuccess.class), completed);
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> provideOrgCatalogItemMapSupplierCache(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         OrgCatalogSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> provideOrgVDCSupplierCache(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         OrgVDCSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Singleton
-   public static class OrgVDCSupplier implements
-         Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> {
-      protected final Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier;
-      private final Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> allVDCsInOrg;
-
-      @Inject
-      protected OrgVDCSupplier(
-            Supplier<Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Org>> orgSupplier,
-            Function<org.jclouds.trmk.vcloud_0_8.domain.Org, Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> allVDCsInOrg) {
-         this.orgSupplier = orgSupplier;
-         this.allVDCsInOrg = allVDCsInOrg;
-      }
-
-      @Override
-      public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> get() {
-         return transformValues(
-               transformValues(orgSupplier.get(), allVDCsInOrg),
-               new Function<Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>() {
-
-                  @Override
-                  public Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(
-                        Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> from) {
-                     return uniqueIndex(from, name);
-                  }
-
-               });
-      }
-   }
-
-   @Singleton
-   public static class OrgCatalogItemSupplier implements
-         Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>> {
-      protected final Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> catalogSupplier;
-      protected final Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog;
-
-      @Inject
-      protected OrgCatalogItemSupplier(
-            Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> catalogSupplier,
-            Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Iterable<? extends CatalogItem>> allCatalogItemsInCatalog) {
-         this.catalogSupplier = catalogSupplier;
-         this.allCatalogItemsInCatalog = allCatalogItemsInCatalog;
-      }
-
-      @Override
-      public Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> get() {
-         return transformValues(
-               catalogSupplier.get(),
-               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>>>() {
-
-                  @Override
-                  public Map<String, Map<String, ? extends CatalogItem>> apply(
-                        Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog> from) {
-                     return transformValues(
-                           from,
-                           new Function<org.jclouds.trmk.vcloud_0_8.domain.Catalog, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>() {
-
-                              @Override
-                              public Map<String, ? extends CatalogItem> apply(
-                                    org.jclouds.trmk.vcloud_0_8.domain.Catalog from) {
-                                 return uniqueIndex(allCatalogItemsInCatalog.apply(from), name);
-                              }
-                           });
-
-                  }
-               });
-      }
-   }
-
-   @Provides
-   @Singleton
-   protected Supplier<Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>>> provideOrgCatalogItemSupplierCache(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         OrgCatalogItemSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   /**
-    * 
-    * @return a listing of all orgs that the current user has access to.
-    */
-   @Provides
-   @Org
-   Map<String, ReferenceType> listOrgs(Supplier<VCloudSession> sessionSupplier) {
-      return sessionSupplier.get().getOrgs();
-   }
-
-
-   @Provides
-   @Singleton
-   protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
-            AtomicReference<AuthorizationException> authException, final TerremarkVCloudLoginClient login) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException,
-               new Supplier<VCloudSession>() {
-
-                  @Override
-                  public VCloudSession get() {
-                     return login.login();
-                  }
-                  
-                  @Override
-                  public String toString() {
-                     return Objects.toStringHelper(login).add("method", "login").toString();
-                  }
-               }, seconds, TimeUnit.SECONDS);
-   }
-
-   @Singleton
-   @Provides
-   @Named("CreateInternetService")
-   String provideCreateInternetService() throws IOException {
-      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateInternetService.xml"));
-   }
-
-   @Singleton
-   @Provides
-   @Named("CreateNodeService")
-   String provideCreateNodeService() throws IOException {
-      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateNodeService.xml"));
-   }
-
-   @Override
-   protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseTerremarkVCloudErrorFromHttpResponse.class);
-   }
-
-   @Singleton
-   public static class OrgNameToKeysListSupplier implements Supplier<Map<String, ReferenceType>> {
-      protected final Supplier<VCloudSession> sessionSupplier;
-      private final TerremarkVCloudClient client;
-
-      @Inject
-      protected OrgNameToKeysListSupplier(Supplier<VCloudSession> sessionSupplier, TerremarkVCloudClient client) {
-         this.sessionSupplier = sessionSupplier;
-         this.client = client;
-      }
-
-      @Override
-      public Map<String, ReferenceType> get() {
-         return Maps.transformValues(sessionSupplier.get().getOrgs(), new Function<ReferenceType, ReferenceType>() {
-
-            @Override
-            public ReferenceType apply(ReferenceType from) {
-               return client.findOrgNamed(from.getName()).getKeys();
-            }
-
-         });
-      }
-   }
-
-   @Provides
-   @Singleton
-   @Keys
-   protected Supplier<Map<String, ReferenceType>> provideOrgToKeysListCache(
-         @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException,
-         OrgNameToKeysListSupplier supplier) {
-      return MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.create(authException, supplier, seconds,
-               TimeUnit.SECONDS);
-   }
-
-   @Singleton
-   @Provides
-   @Named("CreateKey")
-   String provideCreateKey() throws IOException {
-      return Strings2.toStringAndClose(getClass().getResourceAsStream("/CreateKey.xml"));
-   }
-
-   @Override
-   protected void installLocations() {
-      super.installLocations();
-      bind(ImplicitLocationSupplier.class).to(DefaultVDC.class).in(Scopes.SINGLETON);
-      bind(LocationsSupplier.class).to(OrgAndVDCToLocationSupplier.class).in(Scopes.SINGLETON);
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogItemsInCatalog.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogItemsInCatalog.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogItemsInCatalog.java
index 05f9839..dc3b7c2 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogItemsInCatalog.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogItemsInCatalog.java
@@ -17,16 +17,14 @@
 package org.jclouds.trmk.vcloud_0_8.functions;
 
 import static com.google.common.collect.Iterables.filter;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType;
 import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
 import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
@@ -34,8 +32,6 @@ import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -45,27 +41,24 @@ public class AllCatalogItemsInCatalog implements Function<Catalog, Iterable<? ex
    @Resource
    public Logger logger = Logger.NULL;
 
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   AllCatalogItemsInCatalog(TerremarkVCloudAsyncClient aclient,
-            @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   AllCatalogItemsInCatalog(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends CatalogItem> apply(Catalog from) {
-      return transformParallel(filter(from.values(), new Predicate<ReferenceType>() {
+      return transform(filter(from.values(), new Predicate<ReferenceType>() {
          public boolean apply(ReferenceType input) {
             return input.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML);
          }
-      }), new Function<ReferenceType, ListenableFuture<? extends CatalogItem>>() {
-         public ListenableFuture<? extends CatalogItem> apply(ReferenceType from) {
+      }), new Function<ReferenceType, CatalogItem>() {
+         public CatalogItem apply(ReferenceType from) {
             return aclient.getCatalogItem(from.getHref());
          }
-      }, userExecutor, null, logger, "catalogItems in " + from.getHref());
+      });
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogsInOrg.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogsInOrg.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogsInOrg.java
index d30dfe9..011fae8 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogsInOrg.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllCatalogsInOrg.java
@@ -16,23 +16,19 @@
  */
 package org.jclouds.trmk.vcloud_0_8.functions;
 
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
 import org.jclouds.trmk.vcloud_0_8.domain.Org;
 import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
 
 import com.google.common.base.Function;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -42,22 +38,20 @@ public class AllCatalogsInOrg implements Function<Org, Iterable<? extends Catalo
    @Resource
    public Logger logger = Logger.NULL;
 
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   AllCatalogsInOrg(TerremarkVCloudAsyncClient aclient, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   AllCatalogsInOrg(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends Catalog> apply(final Org org) {
-      return transformParallel(org.getCatalogs().values(),
-            new Function<ReferenceType, ListenableFuture<? extends Catalog>>() {
-               public ListenableFuture<? extends Catalog> apply(ReferenceType from) {
-                  return aclient.getCatalog(from.getHref());
-               }
-            }, userExecutor, null, logger, "catalogs in " + org.getName());
+      return transform(org.getCatalogs().values(),
+              new Function<ReferenceType, Catalog>() {
+                 public Catalog apply(ReferenceType from) {
+                    return aclient.getCatalog(from.getHref());
+                 }
+              });
    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllVDCsInOrg.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllVDCsInOrg.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllVDCsInOrg.java
index 39cd22b..9f8b775 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllVDCsInOrg.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/AllVDCsInOrg.java
@@ -16,22 +16,18 @@
  */
 package org.jclouds.trmk.vcloud_0_8.functions;
 
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Org;
 import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
 
 import com.google.common.base.Function;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -41,23 +37,21 @@ public class AllVDCsInOrg implements Function<Org, Iterable<? extends org.jcloud
    @Resource
    public Logger logger = Logger.NULL;
 
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   AllVDCsInOrg(TerremarkVCloudAsyncClient aclient, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   AllVDCsInOrg(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(final Org org) {
-      return transformParallel(org.getVDCs().values(),
-            new Function<ReferenceType, ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>() {
-               public ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.VDC> apply(ReferenceType from) {
-                  return aclient.getVDC(from.getHref());
-               }
-            }, userExecutor, null, logger, "vdcs in org " + org.getName());
+      return transform(org.getVDCs().values(),
+              new Function<ReferenceType, org.jclouds.trmk.vcloud_0_8.domain.VDC>() {
+                 public org.jclouds.trmk.vcloud_0_8.domain.VDC apply(ReferenceType from) {
+                    return aclient.getVDC(from.getHref());
+                 }
+              });
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForLocations.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForLocations.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForLocations.java
index 745f5f5..ec0df6d 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForLocations.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForLocations.java
@@ -18,27 +18,22 @@ package org.jclouds.trmk.vcloud_0_8.functions;
 
 import static com.google.common.collect.Iterables.filter;
 import static com.google.common.collect.Iterables.transform;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
 
 import java.net.URI;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationScope;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Org;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -47,13 +42,11 @@ import com.google.common.util.concurrent.ListeningExecutorService;
 public class OrgsForLocations implements Function<Iterable<? extends Location>, Iterable<? extends Org>> {
    @Resource
    public Logger logger = Logger.NULL;
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   OrgsForLocations(TerremarkVCloudAsyncClient aclient, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   OrgsForLocations(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    /**
@@ -62,7 +55,7 @@ public class OrgsForLocations implements Function<Iterable<? extends Location>,
     */
    @Override
    public Iterable<? extends Org> apply(Iterable<? extends Location> from) {
-      return transformParallel(Sets.newLinkedHashSet(transform(filter(from, new Predicate<Location>() {
+      return transform(Sets.newLinkedHashSet(transform(filter(from, new Predicate<Location>() {
          public boolean apply(Location input) {
             return input.getScope() == LocationScope.ZONE;
          }
@@ -70,10 +63,10 @@ public class OrgsForLocations implements Function<Iterable<? extends Location>,
          public URI apply(Location from) {
             return URI.create(from.getParent().getId());
          }
-      })), new Function<URI, ListenableFuture<? extends Org>>() {
-         public ListenableFuture<? extends Org> apply(URI from) {
+      })), new Function<URI, Org>() {
+         public Org apply(URI from) {
             return aclient.getOrg(from);
          }
-      }, userExecutor, null, logger, "organizations for uris");
+      });
    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForNames.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForNames.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForNames.java
index 41eedaa..5823bb8 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForNames.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/OrgsForNames.java
@@ -16,21 +16,17 @@
  */
 package org.jclouds.trmk.vcloud_0_8.functions;
 
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Org;
 
 import com.google.common.base.Function;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -39,22 +35,20 @@ import com.google.common.util.concurrent.ListeningExecutorService;
 public class OrgsForNames implements Function<Iterable<String>, Iterable<? extends Org>> {
    @Resource
    public Logger logger = Logger.NULL;
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   OrgsForNames(TerremarkVCloudAsyncClient aclient, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   OrgsForNames(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends Org> apply(Iterable<String> from) {
-      return transformParallel(from, new Function<String, ListenableFuture<? extends Org>>() {
-         public ListenableFuture<? extends Org> apply(String from) {
+      return transform(from, new Function<String, Org>() {
+         public Org apply(String from) {
             return aclient.findOrgNamed(from);
          }
-      }, userExecutor, null, logger, "organizations for names");
+      });
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForCatalogItems.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForCatalogItems.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForCatalogItems.java
index 3360b8f..bd407fb 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForCatalogItems.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForCatalogItems.java
@@ -17,25 +17,22 @@
 package org.jclouds.trmk.vcloud_0_8.functions;
 
 import static com.google.common.collect.Iterables.filter;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType;
 import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
 import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -46,27 +43,24 @@ public class VAppTemplatesForCatalogItems implements
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    public Logger logger = Logger.NULL;
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   VAppTemplatesForCatalogItems(TerremarkVCloudAsyncClient aclient,
-         @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   VAppTemplatesForCatalogItems(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends VAppTemplate> apply(Iterable<? extends CatalogItem> from) {
-      return transformParallel(filter(from, new Predicate<CatalogItem>() {
+      return transform(filter(from, new Predicate<CatalogItem>() {
          public boolean apply(CatalogItem input) {
             return input.getEntity().getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML);
          }
-      }), new Function<CatalogItem, ListenableFuture<? extends VAppTemplate>>() {
-         public ListenableFuture<? extends VAppTemplate> apply(CatalogItem from) {
+      }), new Function<CatalogItem, VAppTemplate>() {
+         public VAppTemplate apply(CatalogItem from) {
             return aclient.getVAppTemplate(from.getEntity().getHref());
          }
-      }, userExecutor, null, logger, "vappTemplates in");
+      });
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForResourceEntities.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForResourceEntities.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForResourceEntities.java
index c62f8ab..6a5055c 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForResourceEntities.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/functions/VAppTemplatesForResourceEntities.java
@@ -18,25 +18,22 @@ package org.jclouds.trmk.vcloud_0_8.functions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Iterables.filter;
-import static org.jclouds.concurrent.FutureIterables.transformParallel;
+import static com.google.common.collect.Iterables.transform;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType;
 import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
 import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * @author Adrian Cole
@@ -47,27 +44,24 @@ public class VAppTemplatesForResourceEntities implements
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    public Logger logger = Logger.NULL;
-   private final TerremarkVCloudAsyncClient aclient;
-   private final ListeningExecutorService userExecutor;
+   private final TerremarkVCloudApi aclient;
 
    @Inject
-   VAppTemplatesForResourceEntities(TerremarkVCloudAsyncClient aclient,
-            @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   VAppTemplatesForResourceEntities(TerremarkVCloudApi aclient) {
       this.aclient = aclient;
-      this.userExecutor = userExecutor;
    }
 
    @Override
    public Iterable<? extends VAppTemplate> apply(Iterable<? extends ReferenceType> from) {
-      return transformParallel(filter(checkNotNull(from, "named resources"), new Predicate<ReferenceType>() {
+      return transform(filter(checkNotNull(from, "named resources"), new Predicate<ReferenceType>() {
          public boolean apply(ReferenceType input) {
             return input.getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML);
          }
-      }), new Function<ReferenceType, ListenableFuture<? extends VAppTemplate>>() {
-         public ListenableFuture<? extends VAppTemplate> apply(ReferenceType from) {
+      }), new Function<ReferenceType, VAppTemplate>() {
+         public VAppTemplate apply(ReferenceType from) {
             return aclient.getVAppTemplate(from.getHref());
          }
-      }, userExecutor, null, logger, "vappTemplates in");
+      });
    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudApiMetadata.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudApiMetadata.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudApiMetadata.java
index aa3c2b0..3c2464b 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudApiMetadata.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudApiMetadata.java
@@ -31,21 +31,22 @@ import java.util.Properties;
 
 import org.jclouds.apis.ApiMetadata;
 import org.jclouds.compute.ComputeServiceContext;
-import org.jclouds.rest.internal.BaseRestApiMetadata;
+import org.jclouds.rest.internal.BaseHttpApiMetadata;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 
 /**
  * Implementation of {@link ApiMetadata} for Terremark's VCloud api.
 
  * @author Adrian Cole
  */
-public abstract class TerremarkVCloudApiMetadata extends BaseRestApiMetadata {
+public abstract class TerremarkVCloudApiMetadata extends BaseHttpApiMetadata<TerremarkVCloudApi> {
 
    protected TerremarkVCloudApiMetadata(Builder<?> builder) {
       super(builder);
    }
 
    public static Properties defaultProperties() {
-      Properties properties = BaseRestApiMetadata.defaultProperties();
+      Properties properties = BaseHttpApiMetadata.defaultProperties();
       properties.setProperty(PROPERTY_VCLOUD_VERSION_SCHEMA, "0.8");
       properties.setProperty(PROPERTY_SESSION_INTERVAL, 8 * 60 + "");
       properties.setProperty(PROPERTY_VCLOUD_XML_SCHEMA, "http://vcloud.safesecureweb.com/ns/vcloud.xsd");
@@ -61,10 +62,9 @@ public abstract class TerremarkVCloudApiMetadata extends BaseRestApiMetadata {
       return properties;
    }
 
-   public abstract static class Builder<B extends Builder<B>> extends BaseRestApiMetadata.Builder<B> {
+   public abstract static class Builder<B extends Builder<B>> extends BaseHttpApiMetadata.Builder<TerremarkVCloudApi, B> {
 
-      protected Builder(Class<?> syncClient, Class<?> asyncClient) {
-         super(syncClient, asyncClient);
+      protected Builder() {
          identityName("Email")
          .credentialName("Password")
          .version("0.8")

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApi.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApi.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApi.java
new file mode 100644
index 0000000..e862727
--- /dev/null
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApi.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.trmk.vcloud_0_8.internal;
+
+import java.io.Closeable;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+
+import org.jclouds.http.filters.BasicAuthentication;
+import org.jclouds.rest.annotations.Endpoint;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType;
+import org.jclouds.trmk.vcloud_0_8.domain.VCloudSession;
+import org.jclouds.trmk.vcloud_0_8.functions.ParseLoginResponseFromHeaders;
+
+@Endpoint(org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin.class)
+@RequestFilters(BasicAuthentication.class)
+public interface TerremarkVCloudLoginApi extends Closeable {
+
+   @POST
+   @ResponseParser(ParseLoginResponseFromHeaders.class)
+   @Consumes(TerremarkVCloudMediaType.ORGLIST_XML)
+   VCloudSession login();
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClient.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClient.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClient.java
deleted file mode 100644
index f21bb7f..0000000
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClient.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.trmk.vcloud_0_8.internal;
-
-import java.io.Closeable;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-
-import org.jclouds.http.filters.BasicAuthentication;
-import org.jclouds.rest.annotations.Endpoint;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType;
-import org.jclouds.trmk.vcloud_0_8.domain.VCloudSession;
-import org.jclouds.trmk.vcloud_0_8.functions.ParseLoginResponseFromHeaders;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Establishes a context with a VCloud endpoint.
- * <p/>
- * 
- * @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
- * @author Adrian Cole
- */
-@Endpoint(org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin.class)
-@RequestFilters(BasicAuthentication.class)
-public interface TerremarkVCloudLoginAsyncClient extends Closeable {
-
-   /**
-    * This request returns a token to use in subsequent requests. After ten minutes of inactivity,
-    * the token expires and you have to request a new token with this call.
-    */
-   @POST
-   @ResponseParser(ParseLoginResponseFromHeaders.class)
-   @Consumes(TerremarkVCloudMediaType.ORGLIST_XML)
-   ListenableFuture<VCloudSession> login();
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginClient.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginClient.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginClient.java
deleted file mode 100644
index 9596956..0000000
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginClient.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.trmk.vcloud_0_8.internal;
-
-import java.io.Closeable;
-
-import org.jclouds.trmk.vcloud_0_8.domain.VCloudSession;
-
-public interface TerremarkVCloudLoginClient extends Closeable {
-
-   VCloudSession login();
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsApi.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsApi.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsApi.java
new file mode 100644
index 0000000..979d948
--- /dev/null
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsApi.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.trmk.vcloud_0_8.internal;
+
+import java.io.Closeable;
+import java.net.URI;
+import java.util.SortedMap;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.trmk.vcloud_0_8.xml.SupportedVersionsHandler;
+
+public interface TerremarkVCloudVersionsApi extends Closeable {
+
+   @GET
+   @XMLResponseParser(SupportedVersionsHandler.class)
+   @Path("/versions")
+   SortedMap<String, URI> getSupportedVersions();
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsAsyncClient.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsAsyncClient.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsAsyncClient.java
deleted file mode 100644
index dfe8e8c..0000000
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsAsyncClient.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.trmk.vcloud_0_8.internal;
-
-import java.io.Closeable;
-import java.net.URI;
-import java.util.SortedMap;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.trmk.vcloud_0_8.xml.SupportedVersionsHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Establishes a context with a VCloud endpoint.
- * <p/>
- * 
- * @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
- * @author Adrian Cole
- */
-public interface TerremarkVCloudVersionsAsyncClient extends Closeable {
-
-   /**
-    * Retrieve information for supported versions
-    */
-   @GET
-   @XMLResponseParser(SupportedVersionsHandler.class)
-   @Path("/versions")
-   ListenableFuture<SortedMap<String, URI>> getSupportedVersions();
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsClient.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsClient.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsClient.java
deleted file mode 100644
index 0e386b4..0000000
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudVersionsClient.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.trmk.vcloud_0_8.internal;
-
-import java.io.Closeable;
-import java.net.URI;
-import java.util.SortedMap;
-public interface TerremarkVCloudVersionsClient extends Closeable {
-
-   SortedMap<String, URI> getSupportedVersions();
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/predicates/TaskSuccess.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/predicates/TaskSuccess.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/predicates/TaskSuccess.java
index a8767f1..62b88d7 100644
--- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/predicates/TaskSuccess.java
+++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/predicates/TaskSuccess.java
@@ -22,7 +22,7 @@ import javax.annotation.Resource;
 import javax.inject.Singleton;
 
 import org.jclouds.logging.Logger;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Task;
 import org.jclouds.trmk.vcloud_0_8.domain.TaskStatus;
 
@@ -38,13 +38,13 @@ import com.google.inject.Inject;
 @Singleton
 public class TaskSuccess implements Predicate<URI> {
 
-   private final TerremarkVCloudClient client;
+   private final TerremarkVCloudApi client;
 
    @Resource
    protected Logger logger = Logger.NULL;
 
    @Inject
-   public TaskSuccess(TerremarkVCloudClient client) {
+   public TaskSuccess(TerremarkVCloudApi client) {
       this.client = client;
    }