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:46 UTC

[04/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/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudApiMetadata.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudApiMetadata.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudApiMetadata.java
index d117523..58f20d9 100644
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudApiMetadata.java
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudApiMetadata.java
@@ -24,11 +24,10 @@ import java.util.Properties;
 
 import org.jclouds.apis.ApiMetadata;
 import org.jclouds.trmk.ecloud.compute.config.TerremarkECloudComputeServiceContextModule;
-import org.jclouds.trmk.ecloud.config.TerremarkECloudRestClientModule;
+import org.jclouds.trmk.ecloud.config.TerremarkECloudHttpApiModule;
 import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudApiMetadata;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.TypeToken;
 import com.google.inject.Module;
 
 /**
@@ -38,15 +37,7 @@ import com.google.inject.Module;
  */
 public class TerremarkECloudApiMetadata extends TerremarkVCloudApiMetadata {
 
-   /**
-    * @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(TerremarkECloudClient.class)} as
-    *             {@link TerremarkECloudAsyncClient} interface will be removed in jclouds 1.7.
-    */
-   @Deprecated
-   public static final TypeToken<org.jclouds.rest.RestContext<TerremarkECloudClient, TerremarkECloudAsyncClient>> CONTEXT_TOKEN = new TypeToken<org.jclouds.rest.RestContext<TerremarkECloudClient, TerremarkECloudAsyncClient>>() {
-      private static final long serialVersionUID = 1L;
-   };
-   
+
    @Override
    public Builder toBuilder() {
       return new Builder().fromApiMetadata(this);
@@ -69,16 +60,14 @@ public class TerremarkECloudApiMetadata extends TerremarkVCloudApiMetadata {
 
    public static class Builder extends TerremarkVCloudApiMetadata.Builder<Builder> {
 
-      @SuppressWarnings("deprecation")
       protected Builder() {
-         super(TerremarkECloudClient.class, TerremarkECloudAsyncClient.class);
          id("trmk-ecloud")
          .name("Terremark Enterprise Cloud v2.8 API")
          .version("0.8b-ext2.8")
          .defaultEndpoint("https://services.enterprisecloud.terremark.com/api")
          .documentation(URI.create("http://support.theenterprisecloud.com/kb/default.asp?id=533&Lang=1&SID="))
          .defaultProperties(TerremarkECloudApiMetadata.defaultProperties())
-         .defaultModules(ImmutableSet.<Class<? extends Module>>of(TerremarkECloudRestClientModule.class, TerremarkECloudComputeServiceContextModule.class));
+         .defaultModules(ImmutableSet.<Class<? extends Module>>of(TerremarkECloudHttpApiModule.class, TerremarkECloudComputeServiceContextModule.class));
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudAsyncClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudAsyncClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudAsyncClient.java
deleted file mode 100644
index 5aec317..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudAsyncClient.java
+++ /dev/null
@@ -1,289 +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.ecloud;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.INTERNETSERVICESLIST_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.INTERNETSERVICE_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.IPADDRESS_LIST_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.KEYSLIST_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.PUBLICIP_XML;
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.VAPPEXTINFO_XML;
-import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NETWORK_XML;
-import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.ORG_XML;
-
-import java.net.URI;
-import java.util.Set;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.Delegate;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.trmk.ecloud.domain.ECloudOrg;
-import org.jclouds.trmk.ecloud.features.DataCenterOperationsAsyncClient;
-import org.jclouds.trmk.ecloud.features.TagOperationsAsyncClient;
-import org.jclouds.trmk.ecloud.xml.ECloudOrgHandler;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
-import org.jclouds.trmk.vcloud_0_8.binders.BindCreateKeyToXmlPayload;
-import org.jclouds.trmk.vcloud_0_8.binders.OrgNameVDCNameNetworkNameToEndpoint;
-import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
-import org.jclouds.trmk.vcloud_0_8.domain.IpAddress;
-import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
-import org.jclouds.trmk.vcloud_0_8.domain.Network;
-import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
-import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
-import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
-import org.jclouds.trmk.vcloud_0_8.domain.VAppExtendedInfo;
-import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
-import org.jclouds.trmk.vcloud_0_8.functions.OrgNameToEndpoint;
-import org.jclouds.trmk.vcloud_0_8.functions.OrgURIToKeysListEndpoint;
-import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToInternetServicesEndpoint;
-import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToPublicIPsEndpoint;
-import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
-import org.jclouds.trmk.vcloud_0_8.xml.InternetServiceHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.InternetServicesHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.IpAddressesHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.KeyPairByNameHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.KeyPairHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.KeyPairsHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.NetworkExtendedInfoHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.NetworkHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.PublicIpAddressHandler;
-import org.jclouds.trmk.vcloud_0_8.xml.VAppExtendedInfoHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to eCloud resources via their REST API.
- * <p/>
- * 
- * @see <a href=
- *      "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID="
- *      />
- * @author Adrian Cole
- * @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(TerremarkECloudClient.class)} as
- *             {@link TerremarkECloudAsyncClient} interface will be removed in jclouds 1.7.
- */
-@Deprecated
-@RequestFilters(SetVCloudTokenCookie.class)
-public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
-   /**
-    * Provides asynchronous access to Data Center Operations.
-    * 
-    */
-   @Delegate
-   DataCenterOperationsAsyncClient getDataCenterOperationsClient();
-
-   /**
-    * Provides asynchronous access to Tag Operations.
-    * 
-    */
-   @Delegate
-   TagOperationsAsyncClient getTagOperationsClient();
-
-   @Override
-   @GET
-   @XMLResponseParser(ECloudOrgHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(ORG_XML)
-   ListenableFuture<? extends ECloudOrg> getOrg(@EndpointParam URI orgId);
-
-   @Override
-   @GET
-   @XMLResponseParser(ECloudOrgHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(ORG_XML)
-   ListenableFuture<? extends ECloudOrg> findOrgNamed(
-         @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
-
-   /**
-    * @see TerremarkVCloudExpressClient#getAllInternetServices
-    */
-   @GET
-   @Consumes(INTERNETSERVICESLIST_XML)
-   @XMLResponseParser(InternetServicesHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   @Override
-   ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
-         @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
-
-   /**
-    * @see TerremarkVCloudExpressClient#activatePublicIpInVDC
-    */
-   @POST
-   @Consumes(PUBLICIP_XML)
-   @XMLResponseParser(PublicIpAddressHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<PublicIpAddress> activatePublicIpInVDC(
-         @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
-
-   /**
-    * @see TerremarkVCloudExpressClient#addInternetServiceToExistingIp
-    */
-   @POST
-   @Path("/internetServices")
-   @Produces(INTERNETSERVICE_XML)
-   @Consumes(INTERNETSERVICE_XML)
-   @XMLResponseParser(InternetServiceHandler.class)
-   @MapBinder(AddInternetServiceOptions.class)
-   @Override
-   ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI existingIpId,
-         @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
-         @PayloadParam("port") int port, AddInternetServiceOptions... options);
-
-   /**
-    * @see TerremarkVCloudExpressClient#getInternetServicesOnPublicIP
-    */
-   @GET
-   @Path("/internetServices")
-   @Consumes(INTERNETSERVICESLIST_XML)
-   @XMLResponseParser(InternetServicesHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   @Override
-   ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
-
-   /**
-    * @see TerremarkVCloudExpressClient#getInternetService
-    */
-   @GET
-   @Consumes(INTERNETSERVICESLIST_XML)
-   @XMLResponseParser(InternetServiceHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Override
-   ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
-
-   /**
-    * @see TerremarkVCloudExpressClient#findKeyPairInOrgNamed
-    */
-   @GET
-   @XMLResponseParser(KeyPairByNameHandler.class)
-   @Consumes(KEYSLIST_XML)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends KeyPair> findKeyPairInOrg(
-         @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, String keyName);
-
-   /**
-    * @see TerremarkVCloudExpressClient#listKeyPairsInOrg
-    */
-   @GET
-   @Consumes(KEYSLIST_XML)
-   @XMLResponseParser(KeyPairsHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   ListenableFuture<? extends Set<KeyPair>> listKeyPairsInOrg(
-         @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org);
-
-   /**
-    * @see TerremarkECloudClient#listKeyPairs
-    */
-   @GET
-   @Consumes(KEYSLIST_XML)
-   @XMLResponseParser(KeyPairsHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   ListenableFuture<? extends Set<KeyPair>> listKeyPairs(@EndpointParam URI keysList);
-
-   /**
-    * @see TerremarkECloudClient#generateKeyPairInOrg
-    */
-   @POST
-   @Produces(KEYSLIST_XML)
-   @Consumes(KEYSLIST_XML)
-   @XMLResponseParser(KeyPairHandler.class)
-   @MapBinder(BindCreateKeyToXmlPayload.class)
-   ListenableFuture<? extends KeyPair> generateKeyPairInOrg(
-         @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, @PayloadParam("name") String name,
-         @PayloadParam("isDefault") boolean makeDefault);
-
-   /**
-    * @see TerremarkECloudClient#getKeyPair
-    */
-   @GET
-   @XMLResponseParser(KeyPairHandler.class)
-   @Consumes(APPLICATION_XML)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends KeyPair> getKeyPair(@EndpointParam URI keyId);
-
-   /**
-    * @see TerremarkECloudClient#deleteKeyPair
-    */
-   @DELETE
-   @Fallback(VoidOnNotFoundOr404.class)
-   ListenableFuture<Void> deleteKeyPair(@EndpointParam URI keyId);
-
-   /**
-    * @see TerremarkECloudClient#findNetworkInOrgVDCNamed
-    */
-   @Override
-   @GET
-   @Consumes(NETWORK_XML)
-   @XMLResponseParser(NetworkHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameVDCNameNetworkNameToEndpoint.class)
-   ListenableFuture<? extends Network> findNetworkInOrgVDCNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("vdcName") String vdcName, @PayloadParam("resourceName") String networkName);
-
-   /**
-    * @see TerremarkECloudClient#getNetwork
-    */
-   @Override
-   @GET
-   @Consumes(NETWORK_XML)
-   @XMLResponseParser(NetworkHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Network> getNetwork(@EndpointParam URI network);
-
-   /**
-    * @see TerremarkECloudClient#getNetworkExtendedInfo
-    */
-   @GET
-   @XMLResponseParser(NetworkExtendedInfoHandler.class)
-   @Consumes(APPLICATION_XML)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends NetworkExtendedInfo> getNetworkExtendedInfo(@EndpointParam URI network);
-
-   /**
-    * @see TerremarkECloudClient#getIpAddresses
-    */
-   @GET
-   @Consumes(IPADDRESS_LIST_XML)
-   @XMLResponseParser(IpAddressesHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   ListenableFuture<? extends Set<IpAddress>> getIpAddresses(@EndpointParam URI network);
-
-   /**
-    * @see TerremarkVCloudExpressClient#getInternetService
-    */
-   @GET
-   @Consumes(VAPPEXTINFO_XML)
-   @XMLResponseParser(VAppExtendedInfoHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends VAppExtendedInfo> getVAppExtendedInfo(@EndpointParam URI href);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudClient.java
deleted file mode 100644
index 78cd5f9..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/TerremarkECloudClient.java
+++ /dev/null
@@ -1,90 +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.ecloud;
-
-import java.net.URI;
-import java.util.Set;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.Delegate;
-import org.jclouds.trmk.ecloud.domain.ECloudOrg;
-import org.jclouds.trmk.ecloud.features.DataCenterOperationsClient;
-import org.jclouds.trmk.ecloud.features.TagOperationsClient;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
-import org.jclouds.trmk.vcloud_0_8.domain.IpAddress;
-import org.jclouds.trmk.vcloud_0_8.domain.Network;
-import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
-import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
-import org.jclouds.trmk.vcloud_0_8.domain.VAppExtendedInfo;
-
-/**
- * Provides access to VCloud resources via their REST API.
- * <p/>
- * 
- * @see <a href=
- *      "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID="
- *      />
- * @author Adrian Cole
- */
-public interface TerremarkECloudClient extends TerremarkVCloudClient {
-   /**
-    * Provides synchronous access to Data Center Operations.
-    * 
-    */
-   @Delegate
-   DataCenterOperationsClient getDataCenterOperationsClient();
-
-   /**
-    * Provides synchronous access to Data Center Operations.
-    * 
-    */
-   @Delegate
-   TagOperationsClient getTagOperationsClient();
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   ECloudOrg getOrg(URI orgId);
-
-   /**
-    * Allocate a new public IP
-    * 
-    * @param vDCId
-    * @return
-    * @throws org.jclouds.rest.InsufficientResourcesException
-    *            if there's no additional ips available
-    */
-   PublicIpAddress activatePublicIpInVDC(URI vDCId);
-
-   Network findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String vdc, String networkName);
-
-   Network getNetwork(URI network);
-
-   NetworkExtendedInfo getNetworkExtendedInfo(URI network);
-
-   Set<IpAddress> getIpAddresses(URI network);
-
-   /**
-    * Returns extended information for the vApp.
-    * 
-    * @param vApp
-    *           The URI at which the vApp information is available.
-    * @return Extended vApp information like tags, long name, network adapter
-    *         information.
-    */
-   VAppExtendedInfo getVAppExtendedInfo(URI href);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudHttpApiModule.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudHttpApiModule.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudHttpApiModule.java
new file mode 100644
index 0000000..78b98ce
--- /dev/null
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudHttpApiModule.java
@@ -0,0 +1,100 @@
+/*
+ * 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.ecloud.config;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.trmk.ecloud.TerremarkECloudApi;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
+import org.jclouds.trmk.vcloud_0_8.config.DefaultVCloudReferencesModule;
+import org.jclouds.trmk.vcloud_0_8.config.TerremarkVCloudHttpApiModule;
+import org.jclouds.trmk.vcloud_0_8.domain.Network;
+import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
+import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
+
+import com.google.common.base.Predicate;
+import com.google.inject.Injector;
+import com.google.inject.Provides;
+
+/**
+ * Configures the VCloud authentication service connection, including logging
+ * and http transport.
+ * 
+ * @author Adrian Cole
+ */
+@ConfiguresRestClient
+public class TerremarkECloudHttpApiModule extends
+        TerremarkVCloudHttpApiModule<TerremarkECloudApi> {
+
+   @Provides
+   @Singleton
+   protected TerremarkVCloudApi provideTerremarkApi(TerremarkECloudApi in) {
+      return in;
+   }
+
+   @Singleton
+   public static class IsDMZNetwork implements Predicate<ReferenceType> {
+      private final TerremarkECloudApi client;
+
+      @Inject
+      public IsDMZNetwork(TerremarkECloudApi client) {
+         this.client = client;
+      }
+
+      @Override
+      public boolean apply(ReferenceType arg0) {
+         // TODO FIXME XXX: In Terremark Enterprise environment with multiple
+         // VDC's
+         // this does not
+         // work well.
+         // Each VDC will have different network subnets. So we cannot assume the
+         // default VDC's
+         // networks will
+         // work with non-default VDC's. So make PROPERTY_VCLOUD_DEFAULT_NETWORK
+         // optional. If
+         // this property
+         // is not set, they are expected to add NetworkConfig to the options
+         // when
+         // launching a
+         // server.
+         Network orgNetwork = client.getNetwork(arg0.getHref());
+         NetworkExtendedInfo terremarkNetwork = client.getNetworkExtendedInfo(checkNotNull(
+               checkNotNull(orgNetwork, "network at: " + arg0).getNetworkExtension(), "network extension for: " + arg0)
+               .getHref());
+         return checkNotNull(terremarkNetwork, "terremark network extension at: " + orgNetwork.getNetworkExtension())
+               .getNetworkType() == NetworkExtendedInfo.Type.DMZ;
+      }
+   }
+
+   @Override
+   protected void installDefaultVCloudEndpointsModule() {
+      install(new DefaultVCloudReferencesModule() {
+
+         @Override
+         protected Predicate<ReferenceType> provideDefaultNetworkSelector(Injector i) {
+            return i.getInstance(IsDMZNetwork.class);
+         }
+
+      });
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
deleted file mode 100644
index 8355256..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/config/TerremarkECloudRestClientModule.java
+++ /dev/null
@@ -1,124 +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.ecloud.config;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.trmk.ecloud.TerremarkECloudAsyncClient;
-import org.jclouds.trmk.ecloud.TerremarkECloudClient;
-import org.jclouds.trmk.ecloud.features.DataCenterOperationsAsyncClient;
-import org.jclouds.trmk.ecloud.features.DataCenterOperationsClient;
-import org.jclouds.trmk.ecloud.features.TagOperationsAsyncClient;
-import org.jclouds.trmk.ecloud.features.TagOperationsClient;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
-import org.jclouds.trmk.vcloud_0_8.config.DefaultVCloudReferencesModule;
-import org.jclouds.trmk.vcloud_0_8.config.TerremarkVCloudRestClientModule;
-import org.jclouds.trmk.vcloud_0_8.domain.Network;
-import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
-import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Injector;
-import com.google.inject.Provides;
-
-/**
- * Configures the VCloud authentication service connection, including logging
- * and http transport.
- * 
- * @author Adrian Cole
- */
-@ConfiguresRestClient
-public class TerremarkECloudRestClientModule extends
-      TerremarkVCloudRestClientModule<TerremarkECloudClient, TerremarkECloudAsyncClient> {
-
-   public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
-         .put(DataCenterOperationsClient.class, DataCenterOperationsAsyncClient.class)//
-         .put(TagOperationsClient.class, TagOperationsAsyncClient.class)//
-         .build();
-
-   public TerremarkECloudRestClientModule() {
-      super(DELEGATE_MAP);
-   }
-
-   @Provides
-   @Singleton
-   protected TerremarkVCloudAsyncClient provideTerremarkAsyncClient(TerremarkECloudAsyncClient in) {
-      return in;
-   }
-
-   @Provides
-   @Singleton
-   protected TerremarkVCloudClient provideTerremarkClient(TerremarkECloudClient in) {
-      return in;
-   }
-
-   @Singleton
-   public static class IsDMZNetwork implements Predicate<ReferenceType> {
-      private final TerremarkECloudClient client;
-
-      @Inject
-      public IsDMZNetwork(TerremarkECloudClient client) {
-         this.client = client;
-      }
-
-      @Override
-      public boolean apply(ReferenceType arg0) {
-         // TODO FIXME XXX: In Terremark Enterprise environment with multiple
-         // VDC's
-         // this does not
-         // work well.
-         // Each VDC will have different network subnets. So we cannot assume the
-         // default VDC's
-         // networks will
-         // work with non-default VDC's. So make PROPERTY_VCLOUD_DEFAULT_NETWORK
-         // optional. If
-         // this property
-         // is not set, they are expected to add NetworkConfig to the options
-         // when
-         // launching a
-         // server.
-         Network orgNetwork = client.getNetwork(arg0.getHref());
-         NetworkExtendedInfo terremarkNetwork = client.getNetworkExtendedInfo(checkNotNull(
-               checkNotNull(orgNetwork, "network at: " + arg0).getNetworkExtension(), "network extension for: " + arg0)
-               .getHref());
-         return checkNotNull(terremarkNetwork, "terremark network extension at: " + orgNetwork.getNetworkExtension())
-               .getNetworkType() == NetworkExtendedInfo.Type.DMZ;
-      }
-   }
-
-   @Override
-   protected void installDefaultVCloudEndpointsModule() {
-      install(new DefaultVCloudReferencesModule() {
-
-         @Override
-         protected Predicate<ReferenceType> provideDefaultNetworkSelector(Injector i) {
-            return i.getInstance(IsDMZNetwork.class);
-         }
-
-      });
-
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsApi.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsApi.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsApi.java
new file mode 100644
index 0000000..ba31d97
--- /dev/null
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsApi.java
@@ -0,0 +1,75 @@
+/*
+ * 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.ecloud.features;
+
+import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.DATACENTERSLIST_XML;
+
+import java.net.URI;
+import java.util.Set;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.trmk.ecloud.functions.OrgURIToDataCentersListEndpoint;
+import org.jclouds.trmk.vcloud_0_8.domain.DataCenter;
+import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
+import org.jclouds.trmk.vcloud_0_8.xml.DataCentersHandler;
+
+/**
+ * Data Center Operations access to DataCenterOperations functionality in vCloud
+ * <p/>
+ * There are times where knowing a data center is necessary to complete certain
+ * operations (i.e. uploading a catalog item). The data centers for an
+ * organization are those data centers that contain at least one of the
+ * organization's environments.
+ * 
+ * @author Adrian Cole
+ */
+@RequestFilters(SetVCloudTokenCookie.class)
+public interface DataCenterOperationsApi {
+
+   /**
+    * This call will get the list of data centers that contain at least one of
+    * the organization's environments.
+    * 
+    * 
+    * @return data centers
+    */
+   @GET
+   @Consumes(DATACENTERSLIST_XML)
+   @XMLResponseParser(DataCentersHandler.class)
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<DataCenter> listDataCentersInOrg(@Nullable @EndpointParam(parser = OrgURIToDataCentersListEndpoint.class) URI org);
+
+   /**
+    * This call will get the list of data centers by list id.
+    * 
+    * @return data centers
+    */
+   @GET
+   @Consumes(DATACENTERSLIST_XML)
+   @XMLResponseParser(DataCentersHandler.class)
+   @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+   Set<DataCenter> listDataCenters(@EndpointParam URI dataCenters);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsAsyncClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsAsyncClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsAsyncClient.java
deleted file mode 100644
index 2271307..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsAsyncClient.java
+++ /dev/null
@@ -1,71 +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.ecloud.features;
-
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.DATACENTERSLIST_XML;
-
-import java.net.URI;
-import java.util.Set;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.trmk.ecloud.functions.OrgURIToDataCentersListEndpoint;
-import org.jclouds.trmk.vcloud_0_8.domain.DataCenter;
-import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
-import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
-import org.jclouds.trmk.vcloud_0_8.xml.DataCentersHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * 
- * @see <a href=
- *      "http://support.theenterprisecloud.com/kb/default.asp?id=960&Lang=1&SID="
- *      />
- * @see DataCenterOperationsClient
- * 
- * @author Adrian Cole
- */
-@RequestFilters(SetVCloudTokenCookie.class)
-public interface DataCenterOperationsAsyncClient {
-
-   /**
-    * @see DataCenterOperationsClient#listDataCentersInOrg
-    */
-   @GET
-   @Consumes(DATACENTERSLIST_XML)
-   @XMLResponseParser(DataCentersHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   ListenableFuture<? extends Set<KeyPair>> listDataCentersInOrg(
-         @Nullable @EndpointParam(parser = OrgURIToDataCentersListEndpoint.class) URI org);
-
-   /**
-    * @see DataCenterOperationsClient#listDataCenters
-    */
-   @GET
-   @Consumes(DATACENTERSLIST_XML)
-   @XMLResponseParser(DataCentersHandler.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   ListenableFuture<? extends Set<DataCenter>> listDataCenters(@EndpointParam URI dataCenters);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsClient.java
deleted file mode 100644
index 6728cd3..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/DataCenterOperationsClient.java
+++ /dev/null
@@ -1,52 +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.ecloud.features;
-
-import java.net.URI;
-import java.util.Set;
-import org.jclouds.trmk.vcloud_0_8.domain.DataCenter;
-
-/**
- * Data Center Operations access to DataCenterOperations functionality in vCloud
- * <p/>
- * There are times where knowing a data center is necessary to complete certain
- * operations (i.e. uploading a catalog item). The data centers for an
- * organization are those data centers that contain at least one of the
- * organization's environments.
- * 
- * @see DataCenterOperationsAsyncClient
- * @author Adrian Cole
- */
-public interface DataCenterOperationsClient {
-
-   /**
-    * This call will get the list of data centers that contain at least one of
-    * the organization's environments.
-    * 
-    * 
-    * @return data centers
-    */
-   Set<DataCenter> listDataCentersInOrg(URI orgId);
-
-   /**
-    * This call will get the list of data centers by list id.
-    * 
-    * @return data centers
-    */
-   Set<DataCenter> listDataCenters(URI dataCentersList);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsApi.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsApi.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsApi.java
new file mode 100644
index 0000000..f024ba3
--- /dev/null
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsApi.java
@@ -0,0 +1,68 @@
+/*
+ * 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.ecloud.features;
+
+import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.TAGSLISTLIST_XML;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.trmk.ecloud.functions.OrgURIToTagsListEndpoint;
+import org.jclouds.trmk.ecloud.xml.TagNameToUsageCountHandler;
+import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
+
+/**
+ * Tag Based Operations
+ * <p/>
+ * 
+ * @author Adrian Cole
+ */
+@RequestFilters(SetVCloudTokenCookie.class)
+public interface TagOperationsApi {
+
+   /**
+    * This call returns the list of all tags belonging to the organization.
+    * 
+    * @return tags
+    */
+   @GET
+   @Consumes(TAGSLISTLIST_XML)
+   @XMLResponseParser(TagNameToUsageCountHandler.class)
+   @Fallback(Fallbacks.EmptyMapOnNotFoundOr404.class)
+   Map<String, Integer> getTagNameToUsageCountInOrg(@Nullable @EndpointParam(parser = OrgURIToTagsListEndpoint.class) URI org);
+
+   /**
+    * This call returns the list of all tags by list id.
+    * 
+    * @return tags
+    */
+   @GET
+   @Consumes(TAGSLISTLIST_XML)
+   @XMLResponseParser(TagNameToUsageCountHandler.class)
+   @Fallback(Fallbacks.EmptyMapOnNotFoundOr404.class)
+   Map<String, Integer> getTagNameToUsageCount(@EndpointParam URI tagList);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsAsyncClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsAsyncClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsAsyncClient.java
deleted file mode 100644
index 875baae..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsAsyncClient.java
+++ /dev/null
@@ -1,69 +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.ecloud.features;
-
-import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.TAGSLISTLIST_XML;
-
-import java.net.URI;
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.EmptyMapOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.trmk.ecloud.functions.OrgURIToTagsListEndpoint;
-import org.jclouds.trmk.ecloud.xml.TagNameToUsageCountHandler;
-import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * 
- * @see <a href=
- *      "http://support.theenterprisecloud.com/kb/default.asp?id=954&Lang=1&SID="
- *      />
- * @see TagOperationsClient
- * 
- * @author Adrian Cole
- */
-@RequestFilters(SetVCloudTokenCookie.class)
-public interface TagOperationsAsyncClient {
-
-   /**
-    * @see TagOperationsClient#getTagNameToUsageCountInOrg
-    */
-   @GET
-   @Consumes(TAGSLISTLIST_XML)
-   @XMLResponseParser(TagNameToUsageCountHandler.class)
-   @Fallback(EmptyMapOnNotFoundOr404.class)
-   ListenableFuture<? extends Map<String, Integer>> getTagNameToUsageCountInOrg(
-         @Nullable @EndpointParam(parser = OrgURIToTagsListEndpoint.class) URI org);
-
-   /**
-    * @see TagOperationsClient#getTagNameToUsageCount
-    */
-   @GET
-   @Consumes(TAGSLISTLIST_XML)
-   @XMLResponseParser(TagNameToUsageCountHandler.class)
-   @Fallback(EmptyMapOnNotFoundOr404.class)
-   ListenableFuture<? extends Map<String, Integer>> getTagNameToUsageCount(@EndpointParam URI tagList);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsClient.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsClient.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsClient.java
deleted file mode 100644
index 7e1cbad..0000000
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/features/TagOperationsClient.java
+++ /dev/null
@@ -1,44 +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.ecloud.features;
-
-import java.net.URI;
-import java.util.Map;
-/**
- * Tag Based Operations
- * <p/>
- * 
- * @see TagOperationsAsyncClient
- * @author Adrian Cole
- */
-public interface TagOperationsClient {
-
-   /**
-    * This call returns the list of all tags belonging to the organization.
-    * 
-    * @return tags
-    */
-   Map<String, Integer> getTagNameToUsageCountInOrg(URI orgId);
-
-   /**
-    * This call returns the list of all tags by list id.
-    * 
-    * @return tags
-    */
-   Map<String, Integer> getTagNameToUsageCount(URI tagsList);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/suppliers/TerremarkECloudInternetServiceAndPublicIpAddressSupplier.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/suppliers/TerremarkECloudInternetServiceAndPublicIpAddressSupplier.java b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/suppliers/TerremarkECloudInternetServiceAndPublicIpAddressSupplier.java
index 0866aa2..7316464fa 100644
--- a/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/suppliers/TerremarkECloudInternetServiceAndPublicIpAddressSupplier.java
+++ b/providers/trmk-ecloud/src/main/java/org/jclouds/trmk/ecloud/suppliers/TerremarkECloudInternetServiceAndPublicIpAddressSupplier.java
@@ -30,7 +30,7 @@ import javax.inject.Singleton;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.logging.Logger;
 import org.jclouds.rest.InsufficientResourcesException;
-import org.jclouds.trmk.ecloud.TerremarkECloudClient;
+import org.jclouds.trmk.ecloud.TerremarkECloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
 import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
 import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
@@ -50,10 +50,10 @@ public class TerremarkECloudInternetServiceAndPublicIpAddressSupplier implements
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
    public Logger logger = Logger.NULL;
-   protected final TerremarkECloudClient client;
+   protected final TerremarkECloudApi client;
 
    @Inject
-   public TerremarkECloudInternetServiceAndPublicIpAddressSupplier(TerremarkECloudClient client) {
+   public TerremarkECloudInternetServiceAndPublicIpAddressSupplier(TerremarkECloudApi client) {
       this.client = client;
    }
 

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiLiveTest.java b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiLiveTest.java
new file mode 100644
index 0000000..77258c6
--- /dev/null
+++ b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiLiveTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.ecloud;
+
+import java.util.Properties;
+
+import org.jclouds.trmk.vcloud_0_8.internal.BaseTerremarkApiLiveTest;
+import org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants;
+import org.testng.annotations.Test;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "live", enabled = true, singleThreaded = true)
+public class BaseTerremarkECloudApiLiveTest extends BaseTerremarkApiLiveTest {
+   @Override
+   protected Properties setupProperties() {
+      Properties props = super.setupProperties();
+      props.setProperty(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC,
+            ".* - " + System.getProperty("test.trmk-ecloud.datacenter", "MIA"));
+      return props;
+   }
+
+   protected TerremarkECloudApi api() {
+      return TerremarkECloudApi.class.cast(api);
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiTest.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiTest.java b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiTest.java
new file mode 100644
index 0000000..33d8cfc
--- /dev/null
+++ b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudApiTest.java
@@ -0,0 +1,268 @@
+/*
+ * 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.ecloud;
+
+import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.rest.AuthorizationException;
+import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.rest.internal.BaseAsyncClientTest;
+import org.jclouds.trmk.ecloud.config.TerremarkECloudHttpApiModule;
+import org.jclouds.trmk.ecloud.domain.internal.ECloudOrgImpl;
+import org.jclouds.trmk.vcloud_0_8.domain.Org;
+import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
+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.domain.internal.CatalogImpl;
+import org.jclouds.trmk.vcloud_0_8.domain.internal.CatalogItemImpl;
+import org.jclouds.trmk.vcloud_0_8.domain.internal.ReferenceTypeImpl;
+import org.jclouds.trmk.vcloud_0_8.domain.internal.VDCImpl;
+import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
+import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudLoginApi;
+import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudVersionsApi;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+
+/**
+ * @author Adrian Cole
+ */
+public abstract class BaseTerremarkECloudApiTest<T> extends BaseAsyncClientTest<T> {
+
+   @Override
+   protected void checkFilters(HttpRequest request) {
+      assertEquals(request.getFilters().size(), 1);
+      assertEquals(request.getFilters().get(0).getClass(), SetVCloudTokenCookie.class);
+   }
+
+   @Override
+   protected Module createModule() {
+      return new TerremarkECloudHttpApiModuleExtension();
+   }
+
+   @Override
+   public ProviderMetadata createProviderMetadata() {
+      return new TerremarkECloudProviderMetadata();
+   }
+
+   protected static final ReferenceTypeImpl ORG_REF = new ReferenceTypeImpl("org", TerremarkECloudMediaType.ORG_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/org/1"));
+
+   protected static final ReferenceTypeImpl CATALOG_REF = new ReferenceTypeImpl("catalog",
+         TerremarkECloudMediaType.CATALOG_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/catalog/1"));
+
+   protected static final ReferenceTypeImpl TASKSLIST_REF = new ReferenceTypeImpl("tasksList",
+         TerremarkECloudMediaType.TASKSLIST_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/tasksList/1"));
+
+   protected static final ReferenceTypeImpl VDC_REF = new ReferenceTypeImpl("vdc", TerremarkECloudMediaType.VDC_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/vdc/1"));
+
+   protected static final ReferenceTypeImpl KEYSLIST_REF = new ReferenceTypeImpl("keysList",
+         TerremarkECloudMediaType.KEYSLIST_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/keysList/1"));
+   protected static final ReferenceTypeImpl TAGSLIST_REF = new ReferenceTypeImpl("deviceTags",
+         TerremarkECloudMediaType.TAGSLISTLIST_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/deviceTags/1"));
+   protected static final ReferenceTypeImpl VAPPCATALOGLIST_REF = new ReferenceTypeImpl("vappCatalog",
+         TerremarkECloudMediaType.VAPPCATALOGLIST_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/vappCatalog/1"));
+   protected static final ReferenceTypeImpl DATACENTERSLIST_REF = new ReferenceTypeImpl("dataCentersList",
+         TerremarkECloudMediaType.DATACENTERSLIST_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/datacentersList/1"));
+   protected static final ReferenceTypeImpl NETWORK_REF = new ReferenceTypeImpl("network",
+         TerremarkECloudMediaType.NETWORK_XML, URI.create("https://vcloud.safesecureweb.com/network/1990"));
+
+   protected static final ReferenceTypeImpl PUBLICIPS_REF = new ReferenceTypeImpl("publicIps",
+         TerremarkECloudMediaType.PUBLICIPSLIST_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/publicIps/1"));
+
+   protected static final ReferenceTypeImpl INTERNETSERVICES_REF = new ReferenceTypeImpl("internetServices",
+         TerremarkECloudMediaType.INTERNETSERVICESLIST_XML,
+         URI.create("https://vcloud.safesecureweb.com/api/v0.8/internetServices/1"));
+
+   protected static final Org ORG = new ECloudOrgImpl(ORG_REF.getName(), ORG_REF.getType(), ORG_REF.getHref(), "org",
+         ImmutableMap.<String, ReferenceType> of(CATALOG_REF.getName(), CATALOG_REF),
+         ImmutableMap.<String, ReferenceType> of(VDC_REF.getName(), VDC_REF), ImmutableMap.<String, ReferenceType> of(
+               TASKSLIST_REF.getName(), TASKSLIST_REF), KEYSLIST_REF, DATACENTERSLIST_REF, TAGSLIST_REF,
+         VAPPCATALOGLIST_REF);
+
+   protected static final VDC VDC = new VDCImpl(VDC_REF.getName(), VDC_REF.getType(), VDC_REF.getHref(), "description",
+         CATALOG_REF, PUBLICIPS_REF, INTERNETSERVICES_REF, ImmutableMap.<String, ReferenceType> of(
+               "vapp",
+               new ReferenceTypeImpl("vapp", "application/vnd.vmware.vcloud.vApp+xml", URI
+                     .create("https://vcloud.safesecureweb.com/api/v0.8/vApp/188849-1")),
+               "network",
+               new ReferenceTypeImpl("network", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
+                     .create("https://vcloud.safesecureweb.com/api/v0.8/vdcItem/2"))),
+         ImmutableMap.<String, ReferenceType> of(NETWORK_REF.getName(), NETWORK_REF));
+
+      @ConfiguresRestClient
+   protected static class TerremarkECloudHttpApiModuleExtension extends TerremarkECloudHttpApiModule {
+
+      @Override
+      protected Supplier<URI> provideAuthenticationURI(TerremarkVCloudVersionsApi versionService, String version) {
+         return Suppliers.ofInstance(URI.create("https://vcloud.safesecureweb.com/api/v0.8/login"));
+      }
+
+      @Override
+      protected Supplier<Org> provideOrg(Supplier<Map<String, ? extends Org>> orgSupplier,
+            @org.jclouds.trmk.vcloud_0_8.endpoints.Org Supplier<ReferenceType> defaultOrg) {
+         return Suppliers.ofInstance(ORG);
+      }
+
+      @Override
+      protected void installDefaultVCloudEndpointsModule() {
+         install(new AbstractModule() {
+
+            @Override
+            protected void configure() {
+               TypeLiteral<Supplier<ReferenceType>> refTypeSupplier = new TypeLiteral<Supplier<ReferenceType>>() {
+               };
+               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Org.class).toInstance(
+                     Suppliers.<ReferenceType> ofInstance(ORG_REF));
+               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Catalog.class).toInstance(
+                     Suppliers.<ReferenceType> ofInstance(CATALOG_REF));
+               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.TasksList.class).toInstance(
+                     Suppliers.<ReferenceType> ofInstance(TASKSLIST_REF));
+               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.VDC.class).toInstance(
+                     Suppliers.<ReferenceType> ofInstance(VDC_REF));
+               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Network.class).toInstance(
+                     Suppliers.<ReferenceType> ofInstance(NETWORK_REF));
+            }
+
+         });
+      }
+
+      @Override
+      protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
+            AtomicReference<AuthorizationException> authException, TerremarkVCloudLoginApi login) {
+         return Suppliers.<VCloudSession> ofInstance(new VCloudSession() {
+
+            @Override
+            public Map<String, ReferenceType> getOrgs() {
+               return ImmutableMap.<String, ReferenceType> of(ORG_REF.getName(), ORG_REF);
+            }
+
+            @Override
+            public String getVCloudToken() {
+               return "token";
+            }
+
+         });
+
+      }
+
+      @Override
+      protected void configure() {
+         super.configure();
+         bind(OrgMapSupplier.class).to(TestOrgMapSupplier.class);
+         bind(OrgCatalogSupplier.class).to(TestOrgCatalogSupplier.class);
+         bind(OrgCatalogItemSupplier.class).to(TestOrgCatalogItemSupplier.class);
+      }
+
+      @Override
+      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 Suppliers
+               .<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> ofInstance(ImmutableMap
+                     .<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> of(ORG_REF.getName(),
+                           ImmutableMap.<String, org.jclouds.trmk.vcloud_0_8.domain.VDC> of(VDC.getName(), VDC)));
+      }
+
+      @Singleton
+      public static class TestOrgMapSupplier extends OrgMapSupplier {
+
+         @Inject
+         protected TestOrgMapSupplier() {
+            super(null, null);
+         }
+
+         @Override
+         public Map<String, Org> get() {
+            return ImmutableMap.<String, Org> of(ORG.getName(), ORG);
+         }
+      }
+
+      @Singleton
+      public static class TestOrgCatalogSupplier extends OrgCatalogSupplier {
+         @Inject
+         protected TestOrgCatalogSupplier() {
+            super(null, null);
+         }
+
+         @Override
+         public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> get() {
+            return ImmutableMap.<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> of(ORG_REF
+                  .getName(), ImmutableMap.<String, org.jclouds.trmk.vcloud_0_8.domain.Catalog> of(
+                  CATALOG_REF.getName(),
+                  new CatalogImpl(CATALOG_REF.getName(), CATALOG_REF.getType(), CATALOG_REF.getHref(), null,
+                        ImmutableMap.<String, ReferenceType> of(
+                              "item",
+                              new ReferenceTypeImpl("item", "application/vnd.vmware.vcloud.catalogItem+xml", URI
+                                    .create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/1")),
+                              "template",
+                              new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
+                                    .create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/2"))))));
+         }
+      }
+
+      @Singleton
+      public static class TestOrgCatalogItemSupplier extends OrgCatalogItemSupplier {
+         protected TestOrgCatalogItemSupplier() {
+            super(null, null);
+         }
+
+         @Override
+         public Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> get() {
+            return ImmutableMap
+                  .<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> of(
+                        ORG_REF.getName(),
+                        ImmutableMap.<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>> of(
+                              CATALOG_REF.getName(),
+                              ImmutableMap
+                                    .<String, org.jclouds.trmk.vcloud_0_8.domain.CatalogItem> of(
+                                          "template",
+                                          new CatalogItemImpl(
+                                                "template",
+                                                URI.create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/2"),
+                                                "description",
+                                                new ReferenceTypeImpl(
+                                                      "template",
+                                                      "application/vnd.vmware.vcloud.vAppTemplate+xml",
+                                                      URI.create("https://vcloud.safesecureweb.com/api/v0.8/vAppTemplate/2")),
+                                                null, null, ImmutableMap.<String, String> of()))));
+
+         }
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudAsyncClientTest.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudAsyncClientTest.java b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudAsyncClientTest.java
deleted file mode 100644
index 977a13d..0000000
--- a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudAsyncClientTest.java
+++ /dev/null
@@ -1,268 +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.ecloud;
-
-import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
-import static org.testng.Assert.assertEquals;
-
-import java.net.URI;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.rest.AuthorizationException;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.rest.internal.BaseAsyncClientTest;
-import org.jclouds.trmk.ecloud.config.TerremarkECloudRestClientModule;
-import org.jclouds.trmk.ecloud.domain.internal.ECloudOrgImpl;
-import org.jclouds.trmk.vcloud_0_8.domain.Org;
-import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
-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.domain.internal.CatalogImpl;
-import org.jclouds.trmk.vcloud_0_8.domain.internal.CatalogItemImpl;
-import org.jclouds.trmk.vcloud_0_8.domain.internal.ReferenceTypeImpl;
-import org.jclouds.trmk.vcloud_0_8.domain.internal.VDCImpl;
-import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudLoginClient;
-import org.jclouds.trmk.vcloud_0_8.internal.TerremarkVCloudVersionsClient;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import com.google.inject.TypeLiteral;
-
-/**
- * @author Adrian Cole
- */
-public abstract class BaseTerremarkECloudAsyncClientTest<T> extends BaseAsyncClientTest<T> {
-
-   @Override
-   protected void checkFilters(HttpRequest request) {
-      assertEquals(request.getFilters().size(), 1);
-      assertEquals(request.getFilters().get(0).getClass(), SetVCloudTokenCookie.class);
-   }
-
-   @Override
-   protected Module createModule() {
-      return new TerremarkECloudRestClientModuleExtension();
-   }
-
-   @Override
-   public ProviderMetadata createProviderMetadata() {
-      return new TerremarkECloudProviderMetadata();
-   }
-
-   protected static final ReferenceTypeImpl ORG_REF = new ReferenceTypeImpl("org", TerremarkECloudMediaType.ORG_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/org/1"));
-
-   protected static final ReferenceTypeImpl CATALOG_REF = new ReferenceTypeImpl("catalog",
-         TerremarkECloudMediaType.CATALOG_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/catalog/1"));
-
-   protected static final ReferenceTypeImpl TASKSLIST_REF = new ReferenceTypeImpl("tasksList",
-         TerremarkECloudMediaType.TASKSLIST_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/tasksList/1"));
-
-   protected static final ReferenceTypeImpl VDC_REF = new ReferenceTypeImpl("vdc", TerremarkECloudMediaType.VDC_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/vdc/1"));
-
-   protected static final ReferenceTypeImpl KEYSLIST_REF = new ReferenceTypeImpl("keysList",
-         TerremarkECloudMediaType.KEYSLIST_XML, URI.create("https://vcloud.safesecureweb.com/api/v0.8/keysList/1"));
-   protected static final ReferenceTypeImpl TAGSLIST_REF = new ReferenceTypeImpl("deviceTags",
-         TerremarkECloudMediaType.TAGSLISTLIST_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/deviceTags/1"));
-   protected static final ReferenceTypeImpl VAPPCATALOGLIST_REF = new ReferenceTypeImpl("vappCatalog",
-         TerremarkECloudMediaType.VAPPCATALOGLIST_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/vappCatalog/1"));
-   protected static final ReferenceTypeImpl DATACENTERSLIST_REF = new ReferenceTypeImpl("dataCentersList",
-         TerremarkECloudMediaType.DATACENTERSLIST_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/datacentersList/1"));
-   protected static final ReferenceTypeImpl NETWORK_REF = new ReferenceTypeImpl("network",
-         TerremarkECloudMediaType.NETWORK_XML, URI.create("https://vcloud.safesecureweb.com/network/1990"));
-
-   protected static final ReferenceTypeImpl PUBLICIPS_REF = new ReferenceTypeImpl("publicIps",
-         TerremarkECloudMediaType.PUBLICIPSLIST_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/publicIps/1"));
-
-   protected static final ReferenceTypeImpl INTERNETSERVICES_REF = new ReferenceTypeImpl("internetServices",
-         TerremarkECloudMediaType.INTERNETSERVICESLIST_XML,
-         URI.create("https://vcloud.safesecureweb.com/api/v0.8/internetServices/1"));
-
-   protected static final Org ORG = new ECloudOrgImpl(ORG_REF.getName(), ORG_REF.getType(), ORG_REF.getHref(), "org",
-         ImmutableMap.<String, ReferenceType> of(CATALOG_REF.getName(), CATALOG_REF),
-         ImmutableMap.<String, ReferenceType> of(VDC_REF.getName(), VDC_REF), ImmutableMap.<String, ReferenceType> of(
-               TASKSLIST_REF.getName(), TASKSLIST_REF), KEYSLIST_REF, DATACENTERSLIST_REF, TAGSLIST_REF,
-         VAPPCATALOGLIST_REF);
-
-   protected static final VDC VDC = new VDCImpl(VDC_REF.getName(), VDC_REF.getType(), VDC_REF.getHref(), "description",
-         CATALOG_REF, PUBLICIPS_REF, INTERNETSERVICES_REF, ImmutableMap.<String, ReferenceType> of(
-               "vapp",
-               new ReferenceTypeImpl("vapp", "application/vnd.vmware.vcloud.vApp+xml", URI
-                     .create("https://vcloud.safesecureweb.com/api/v0.8/vApp/188849-1")),
-               "network",
-               new ReferenceTypeImpl("network", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
-                     .create("https://vcloud.safesecureweb.com/api/v0.8/vdcItem/2"))),
-         ImmutableMap.<String, ReferenceType> of(NETWORK_REF.getName(), NETWORK_REF));
-
-      @ConfiguresRestClient
-   protected static class TerremarkECloudRestClientModuleExtension extends TerremarkECloudRestClientModule {
-
-      @Override
-      protected Supplier<URI> provideAuthenticationURI(TerremarkVCloudVersionsClient versionService, String version) {
-         return Suppliers.ofInstance(URI.create("https://vcloud.safesecureweb.com/api/v0.8/login"));
-      }
-
-      @Override
-      protected Supplier<Org> provideOrg(Supplier<Map<String, ? extends Org>> orgSupplier,
-            @org.jclouds.trmk.vcloud_0_8.endpoints.Org Supplier<ReferenceType> defaultOrg) {
-         return Suppliers.ofInstance(ORG);
-      }
-
-      @Override
-      protected void installDefaultVCloudEndpointsModule() {
-         install(new AbstractModule() {
-
-            @Override
-            protected void configure() {
-               TypeLiteral<Supplier<ReferenceType>> refTypeSupplier = new TypeLiteral<Supplier<ReferenceType>>() {
-               };
-               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Org.class).toInstance(
-                     Suppliers.<ReferenceType> ofInstance(ORG_REF));
-               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Catalog.class).toInstance(
-                     Suppliers.<ReferenceType> ofInstance(CATALOG_REF));
-               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.TasksList.class).toInstance(
-                     Suppliers.<ReferenceType> ofInstance(TASKSLIST_REF));
-               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.VDC.class).toInstance(
-                     Suppliers.<ReferenceType> ofInstance(VDC_REF));
-               bind(refTypeSupplier).annotatedWith(org.jclouds.trmk.vcloud_0_8.endpoints.Network.class).toInstance(
-                     Suppliers.<ReferenceType> ofInstance(NETWORK_REF));
-            }
-
-         });
-      }
-
-      @Override
-      protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
-            AtomicReference<AuthorizationException> authException, TerremarkVCloudLoginClient login) {
-         return Suppliers.<VCloudSession> ofInstance(new VCloudSession() {
-
-            @Override
-            public Map<String, ReferenceType> getOrgs() {
-               return ImmutableMap.<String, ReferenceType> of(ORG_REF.getName(), ORG_REF);
-            }
-
-            @Override
-            public String getVCloudToken() {
-               return "token";
-            }
-
-         });
-
-      }
-
-      @Override
-      protected void configure() {
-         super.configure();
-         bind(OrgMapSupplier.class).to(TestOrgMapSupplier.class);
-         bind(OrgCatalogSupplier.class).to(TestOrgCatalogSupplier.class);
-         bind(OrgCatalogItemSupplier.class).to(TestOrgCatalogItemSupplier.class);
-      }
-
-      @Override
-      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 Suppliers
-               .<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>>> ofInstance(ImmutableMap
-                     .<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.VDC>> of(ORG_REF.getName(),
-                           ImmutableMap.<String, org.jclouds.trmk.vcloud_0_8.domain.VDC> of(VDC.getName(), VDC)));
-      }
-
-      @Singleton
-      public static class TestOrgMapSupplier extends OrgMapSupplier {
-
-         @Inject
-         protected TestOrgMapSupplier() {
-            super(null, null);
-         }
-
-         @Override
-         public Map<String, Org> get() {
-            return ImmutableMap.<String, Org> of(ORG.getName(), ORG);
-         }
-      }
-
-      @Singleton
-      public static class TestOrgCatalogSupplier extends OrgCatalogSupplier {
-         @Inject
-         protected TestOrgCatalogSupplier() {
-            super(null, null);
-         }
-
-         @Override
-         public Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> get() {
-            return ImmutableMap.<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> of(ORG_REF
-                  .getName(), ImmutableMap.<String, org.jclouds.trmk.vcloud_0_8.domain.Catalog> of(
-                  CATALOG_REF.getName(),
-                  new CatalogImpl(CATALOG_REF.getName(), CATALOG_REF.getType(), CATALOG_REF.getHref(), null,
-                        ImmutableMap.<String, ReferenceType> of(
-                              "item",
-                              new ReferenceTypeImpl("item", "application/vnd.vmware.vcloud.catalogItem+xml", URI
-                                    .create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/1")),
-                              "template",
-                              new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
-                                    .create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/2"))))));
-         }
-      }
-
-      @Singleton
-      public static class TestOrgCatalogItemSupplier extends OrgCatalogItemSupplier {
-         protected TestOrgCatalogItemSupplier() {
-            super(null, null);
-         }
-
-         @Override
-         public Map<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> get() {
-            return ImmutableMap
-                  .<String, Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>>> of(
-                        ORG_REF.getName(),
-                        ImmutableMap.<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.CatalogItem>> of(
-                              CATALOG_REF.getName(),
-                              ImmutableMap
-                                    .<String, org.jclouds.trmk.vcloud_0_8.domain.CatalogItem> of(
-                                          "template",
-                                          new CatalogItemImpl(
-                                                "template",
-                                                URI.create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/2"),
-                                                "description",
-                                                new ReferenceTypeImpl(
-                                                      "template",
-                                                      "application/vnd.vmware.vcloud.vAppTemplate+xml",
-                                                      URI.create("https://vcloud.safesecureweb.com/api/v0.8/vAppTemplate/2")),
-                                                null, null, ImmutableMap.<String, String> of()))));
-
-         }
-      }
-
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudClientLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudClientLiveTest.java b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudClientLiveTest.java
deleted file mode 100644
index f1d3b58..0000000
--- a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/BaseTerremarkECloudClientLiveTest.java
+++ /dev/null
@@ -1,41 +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.ecloud;
-
-import java.util.Properties;
-
-import org.jclouds.trmk.vcloud_0_8.internal.BaseTerremarkClientLiveTest;
-import org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants;
-import org.testng.annotations.Test;
-
-/**
- * @author Adrian Cole
- */
-@Test(groups = "live", enabled = true, singleThreaded = true)
-public class BaseTerremarkECloudClientLiveTest extends BaseTerremarkClientLiveTest {
-   @Override
-   protected Properties setupProperties() {
-      Properties props = super.setupProperties();
-      props.setProperty(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC,
-            ".* - " + System.getProperty("test.trmk-ecloud.datacenter", "MIA"));
-      return props;
-   }
-
-   protected TerremarkECloudClient api() {
-      return TerremarkECloudClient.class.cast(api);
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/TerremarkECloudApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/TerremarkECloudApiLiveTest.java b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/TerremarkECloudApiLiveTest.java
new file mode 100644
index 0000000..80b851c
--- /dev/null
+++ b/providers/trmk-ecloud/src/test/java/org/jclouds/trmk/ecloud/TerremarkECloudApiLiveTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.ecloud;
+
+import java.util.Map.Entry;
+import java.util.Properties;
+
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.ssh.SshClient;
+import org.jclouds.trmk.ecloud.suppliers.TerremarkECloudInternetServiceAndPublicIpAddressSupplier;
+import org.jclouds.trmk.vcloud_0_8.TerremarkApiLiveTest;
+import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
+import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
+import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
+import org.jclouds.trmk.vcloud_0_8.domain.VApp;
+import org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants;
+import org.testng.annotations.Test;
+
+import com.google.common.net.HostAndPort;
+
+/**
+ * Tests behavior of {@code TerremarkECloudApi}
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "live", enabled = true, singleThreaded = true, testName = "TerremarkECloudApiLiveTest")
+public class TerremarkECloudApiLiveTest extends TerremarkApiLiveTest {
+
+   public TerremarkECloudApiLiveTest() {
+      this.provider = "trmk-ecloud";
+      this.itemName = "Ubuntu Server 10.04 x64";
+      this.expectedOs = "Ubuntu Linux (64-bit)";
+   }
+
+   @Override
+   protected Properties setupProperties() {
+      Properties props = super.setupProperties();
+      props.setProperty(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC,
+            ".* - " + System.getProperty("test.trmk-ecloud.datacenter", "MIA"));
+      return props;
+   }
+
+   @Override
+   protected SshClient getConnectionFor(HostAndPort socket) {
+      return sshFactory.create(socket, LoginCredentials.builder().user("ecloud").password("TmrkCl0ud1s#1!").privateKey(
+               key.getPrivateKey()).authenticateSudo(true).build());
+   }
+
+   @Override
+   protected Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VApp vApp) {
+      return new TerremarkECloudInternetServiceAndPublicIpAddressSupplier(TerremarkECloudApi.class.cast(api))
+            .getNewInternetServiceAndIp(vApp, 22, Protocol.TCP);
+   }
+
+}