You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/12 05:38:27 UTC

[4/9] Dedupe vcloud api calls and instead expose helper to resolve ids to hrefs. cleanup pass on javadoc.

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
index fc5a583..cf94dea 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserApi.java
@@ -29,6 +29,7 @@ import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
+import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.rest.annotations.BinderParam;
 import org.jclouds.rest.annotations.EndpointParam;
 import org.jclouds.rest.annotations.Fallback;
@@ -37,114 +38,44 @@ import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.User;
 import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
 @RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface UserApi {
 
+   /** Returns the user, even if disabled, or null if not found. */
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   @Nullable
+   User get(@EndpointParam URI userHref);
+
    /**
     * Creates or imports a user in an organization. The user could be enabled or disabled.
-    * 
-    * <pre>
-    * POST /admin/org/{id}/users
-    * </pre>
-    * 
-    * @param orgUrn
-    *           the urn for the org
-    * @return the addd user
     */
    @POST
    @Path("/users")
    @Consumes(USER)
    @Produces(USER)
-   @JAXBResponseParser User addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
-         @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   @POST
-   @Path("/users")
-   @Consumes(USER)
-   @Produces(USER)
    @JAXBResponseParser
    User addUserToOrg(@BinderParam(BindToXMLPayload.class) User user, @EndpointParam URI orgAdminHref);
 
-   /**
-    * Retrieves a user. This entity could be enabled or disabled.
-    * 
-    * <pre>
-    * GET /admin/user/{id}
-    * </pre>
-    * 
-    * @param userUrn
-    *           the reference for the user
-    * @return a user
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   User get(@EndpointParam(parser = URNToHref.class) String userUrn);
-
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   User get(@EndpointParam URI userHref);
 
    /**
     * Modifies a user. The user object could be enabled or disabled. Note: the lock status cannot be
-    * changed using this call: use unlockUser.
-    * 
-    * <pre>
-    * PUT /admin/user/{id}
-    * </pre>
-    * 
-    * @param userUrn
-    *           the reference for the user
-    * @return the modified user
+    * changed using this call: use {@link #unlock(URI)}.
     */
    @PUT
    @Consumes(USER)
    @Produces(USER)
    @JAXBResponseParser
-   User edit(@EndpointParam(parser = URNToHref.class) String userUrn, @BinderParam(BindToXMLPayload.class) User user);
-
-   @PUT
-   @Consumes(USER)
-   @Produces(USER)
-   @JAXBResponseParser
    User edit(@EndpointParam URI userHref, @BinderParam(BindToXMLPayload.class) User user);
 
-   /**
-    * Deletes a user. Enabled and disabled users could be removed.
-    * 
-    * <pre>
-    * DELETE /admin/catalog/{id}
-    * </pre>
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   void remove(@EndpointParam(parser = URNToHref.class) String userUrn);
-
    @DELETE
    @Consumes
    @JAXBResponseParser
    void remove(@EndpointParam URI userHref);
 
-   /**
-    * Unlocks a user.
-    * 
-    * <pre>
-    * POST /admin/user/{id}/action/unlock
-    * </pre>
-    */
-   @POST
-   @Path("/action/unlock")
-   @Consumes
-   @JAXBResponseParser
-   void unlock(@EndpointParam(parser = URNToHref.class) String userUrn);
-
    @POST
    @Path("/action/unlock")
    @Consumes

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToAdminHref.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToAdminHref.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToAdminHref.java
new file mode 100644
index 0000000..8b969ac
--- /dev/null
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToAdminHref.java
@@ -0,0 +1,63 @@
+/*
+ * 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.vcloud.director.v1_5.functions;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.URI;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Link;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.Iterables;
+
+/**
+ * Resolves URN to its Admin HREF via the entity Resolver
+ */
+@Singleton
+public final class IdToAdminHref implements Function<String, URI> {
+   private final LoadingCache<String, Entity> resolveEntityCache;
+
+   @Inject
+   public IdToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
+      this.resolveEntityCache = checkNotNull(resolveEntityCache, "resolveEntityCache");
+   }
+
+   @Override
+   public URI apply(String from) {
+      checkNotNull(from, "urn");
+      Entity entity = resolveEntityCache.getUnchecked(from.toString());
+      Optional<Link> link = Iterables.tryFind(entity.getLinks(), typeContainsAdmin);
+      checkArgument(link.isPresent(), "no admin link found for entity %s", entity);
+      return link.get().getHref();
+   }
+
+   private static final Predicate<Link> typeContainsAdmin = new Predicate<Link>() {
+      @Override
+      public boolean apply(Link in) {
+         return in.getType().indexOf(".admin.") != -1;
+      }
+   };
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToHref.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToHref.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToHref.java
new file mode 100644
index 0000000..790e1ed
--- /dev/null
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/IdToHref.java
@@ -0,0 +1,51 @@
+/*
+ * 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.vcloud.director.v1_5.functions;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.get;
+
+import java.net.URI;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+
+import com.google.common.base.Function;
+import com.google.common.cache.LoadingCache;
+
+/**
+ * Resolves URN to its HREF via the entity Resolver, caching to avoid excess network requests.
+ */
+@Singleton
+public final class IdToHref implements Function<String, URI> {
+   private final LoadingCache<String, Entity> resolveEntityCache;
+
+   @Inject
+   public IdToHref(LoadingCache<String, Entity> resolveEntityCache) {
+      this.resolveEntityCache = checkNotNull(resolveEntityCache, "resolveEntityCache");
+   }
+
+   @Override
+   public URI apply(String urn) {
+      Entity entity = resolveEntityCache.getUnchecked(checkNotNull(urn, "urn"));
+      checkArgument(entity.getLinks().size() > 0, "no links found for entity %s", entity);
+      return get(entity.getLinks(), 0).getHref();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/SectionForVApp.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/SectionForVApp.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/SectionForVApp.java
index b7937f8..ef48233 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/SectionForVApp.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/SectionForVApp.java
@@ -17,11 +17,11 @@
 package org.jclouds.vcloud.director.v1_5.functions;
 
 import org.jclouds.dmtf.ovf.SectionType;
-import org.jclouds.vcloud.director.v1_5.domain.AbstractVAppType;
+import org.jclouds.vcloud.director.v1_5.domain.AbstractVApp;
 
 import com.google.common.base.Function;
 
-public class SectionForVApp<S extends SectionType> implements Function<AbstractVAppType, S> {
+public class SectionForVApp<S extends SectionType> implements Function<AbstractVApp, S> {
    
    private final Class<? extends SectionType> sectionType;
 
@@ -31,7 +31,7 @@ public class SectionForVApp<S extends SectionType> implements Function<AbstractV
 
    @SuppressWarnings("unchecked")
    @Override
-   public S apply(AbstractVAppType from) {
+   public S apply(AbstractVApp from) {
       for (SectionType section : from.getSections()) {
          if (sectionType.isAssignableFrom(section.getClass())) {
             return (S)section;

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToAdminHref.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToAdminHref.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToAdminHref.java
deleted file mode 100644
index b5fed26..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToAdminHref.java
+++ /dev/null
@@ -1,64 +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.vcloud.director.v1_5.functions;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.net.URI;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
-import org.jclouds.vcloud.director.v1_5.domain.Link;
-
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.Iterables;
-
-/**
- * Resolves URN to its Admin HREF via the entity Resolver
- */
-@Singleton
-public final class URNToAdminHref implements Function<Object, URI> {
-   private final LoadingCache<String, Entity> resolveEntityCache;
-
-   @Inject
-   public URNToAdminHref(LoadingCache<String, Entity> resolveEntityCache) {
-      this.resolveEntityCache = checkNotNull(resolveEntityCache, "resolveEntityCache");
-   }
-
-   @Override
-   public URI apply(@Nullable Object from) {
-      checkArgument(checkNotNull(from, "urn") instanceof String, "urn is a String argument");
-      Entity entity = resolveEntityCache.getUnchecked(from.toString());
-      Optional<Link> link = Iterables.tryFind(entity.getLinks(), typeContainsAdmin);
-      checkArgument(link.isPresent(), "no admin link found for entity %s", entity);
-      return link.get().getHref();
-   }
-
-   private static final Predicate<Link> typeContainsAdmin = new Predicate<Link>() {
-      @Override
-      public boolean apply(Link in) {
-         return in.getType().indexOf(".admin.") != -1;
-      }
-   };
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.java
deleted file mode 100644
index bf48ba1..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/functions/URNToHref.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.vcloud.director.v1_5.functions;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.get;
-
-import java.net.URI;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
-
-import com.google.common.base.Function;
-import com.google.common.cache.LoadingCache;
-
-/**
- * Resolves URN to its HREF via the entity Resolver
- */
-@Singleton
-public final class URNToHref implements Function<Object, URI> {
-   private final LoadingCache<String, Entity> resolveEntityCache;
-
-   @Inject
-   public URNToHref(LoadingCache<String, Entity> resolveEntityCache) {
-      this.resolveEntityCache = checkNotNull(resolveEntityCache, "resolveEntityCache");
-   }
-
-   @Override
-   public URI apply(@Nullable Object from) {
-      checkArgument(checkNotNull(from, "urn") instanceof String, "urn is a String argument");
-      Entity entity = resolveEntityCache.getUnchecked(from.toString());
-      checkArgument(entity.getLinks().size() > 0, "no links found for entity %s", entity);
-      return get(entity.getLinks(), 0).getHref();
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorContextImpl.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorContextImpl.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorContextImpl.java
index a417597..1d15f40 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorContextImpl.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/internal/VCloudDirectorContextImpl.java
@@ -16,6 +16,8 @@
  */
 package org.jclouds.vcloud.director.v1_5.internal;
 
+import java.net.URI;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
@@ -29,8 +31,11 @@ import org.jclouds.rest.Utils;
 import org.jclouds.rest.internal.ApiContextImpl;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
 import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
+import org.jclouds.vcloud.director.v1_5.functions.IdToAdminHref;
+import org.jclouds.vcloud.director.v1_5.functions.IdToHref;
 import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
 
+import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import com.google.inject.Injector;
 import com.google.inject.TypeLiteral;
@@ -38,17 +43,29 @@ import com.google.inject.TypeLiteral;
 @Singleton
 public class VCloudDirectorContextImpl extends ApiContextImpl<VCloudDirectorApi> implements VCloudDirectorContext {
    private final ApiContext<VCloudDirectorAdminApi> adminContext;
+   private final Function<String, URI> idToHref;
+   private final Function<String, URI> idToAdminHref;
 
-   @Inject
-   VCloudDirectorContextImpl(@Name String name, ProviderMetadata providerMetadata,
+   @Inject VCloudDirectorContextImpl(@Name String name, ProviderMetadata providerMetadata,
          @Provider Supplier<Credentials> creds, Utils utils, Closer closer, Injector injector,
-         ApiContext<VCloudDirectorAdminApi> adminContext) {
+         ApiContext<VCloudDirectorAdminApi> adminContext, IdToHref idToHref, IdToAdminHref idToAdminHref) {
       super(name, providerMetadata, creds, utils, closer, injector, TypeLiteral.get(VCloudDirectorApi.class));
       this.adminContext = adminContext;
+      this.idToHref = idToHref;
+      this.idToAdminHref = idToAdminHref;
+
    }
-   
+
    @Override
    public ApiContext<VCloudDirectorAdminApi> getAdminContext() {
       return adminContext;
    }
+
+   @Override public URI resolveIdToHref(String id) {
+      return idToHref.apply(id);
+   }
+
+   @Override public URI resolveIdToAdminHref(String adminId) {
+      return idToAdminHref.apply(adminId);
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
index a4f98d9..85bb25f 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorApi.java
@@ -46,7 +46,6 @@ import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi;
 import org.jclouds.vcloud.director.v1_5.features.VdcApi;
 import org.jclouds.vcloud.director.v1_5.features.VmApi;
 import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
 import com.google.inject.Provides;
 
@@ -138,12 +137,6 @@ public interface VCloudDirectorApi extends Closeable {
     */
    @Delegate
    VmApi getVmApi();
-   
-   /**
-    * @return synchronous access to {@link Metadata} features
-    */
-   @Delegate
-   MetadataApi getMetadataApi(@EndpointParam(parser = URNToHref.class) String urn);
 
    @Delegate
    MetadataApi getMetadataApi(@EndpointParam URI href);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
index eff236e..9ecd55a 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/AbstractVAppApiLiveTest.java
@@ -28,6 +28,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.io.IOException;
 import java.math.BigInteger;
+import java.net.URI;
 import java.util.List;
 import java.util.Set;
 
@@ -35,7 +36,7 @@ import org.jclouds.dmtf.cim.CimBoolean;
 import org.jclouds.dmtf.cim.CimString;
 import org.jclouds.dmtf.cim.CimUnsignedInt;
 import org.jclouds.dmtf.cim.CimUnsignedLong;
-import org.jclouds.vcloud.director.v1_5.domain.AbstractVAppType;
+import org.jclouds.vcloud.director.v1_5.domain.AbstractVApp;
 import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
 import org.jclouds.vcloud.director.v1_5.domain.Reference;
 import org.jclouds.vcloud.director.v1_5.domain.ResourceEntity.Status;
@@ -46,8 +47,8 @@ import org.jclouds.vcloud.director.v1_5.domain.Vdc;
 import org.jclouds.vcloud.director.v1_5.domain.Vm;
 import org.jclouds.vcloud.director.v1_5.domain.dmtf.RasdItem;
 import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
-import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
 import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection.IpAddressAllocationMode;
+import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
 import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
@@ -103,8 +104,8 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    protected Vm vm;
    protected VApp vApp;
    protected VAppTemplate vAppTemplate;
-   protected String vmUrn;
-   protected String vAppUrn;
+   protected String vmId;
+   protected String vAppId;
 
    /**
     * Retrieves the required apis from the REST API context
@@ -133,35 +134,35 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
       vdc = lazyGetVdc();
 
       // Get the configured VAppTemplate for the tests
-      vAppTemplate = vAppTemplateApi.get(vAppTemplateUrn);
+      vAppTemplate = vAppTemplateApi.get(context.resolveIdToHref(vAppTemplateId));
       assertNotNull(vAppTemplate, String.format(ENTITY_NON_NULL, VAPP_TEMPLATE));
 
       // Instantiate a new VApp
       VApp vAppInstantiated = instantiateVApp();
       assertNotNull(vAppInstantiated, String.format(ENTITY_NON_NULL, VAPP));
-      vAppUrn = vAppInstantiated.getId();
+      vAppId = vAppInstantiated.getId();
 
       // Wait for the task to complete
       Task instantiateTask = Iterables.getOnlyElement(vAppInstantiated.getTasks());
       assertTrue(retryTaskSuccessLong.apply(instantiateTask), String.format(TASK_COMPLETE_TIMELY, "instantiateTask"));
 
       // Get the instantiated VApp
-      vApp = vAppApi.get(vAppUrn);
+      vApp = vAppApi.get(vApp.getHref());
 
       // Get the Vm
       List<Vm> vms = vApp.getChildren().getVms();
       vm = Iterables.getOnlyElement(vms);
-      vmUrn = vm.getId();
+      vmId = vm.getId();
       assertFalse(vms.isEmpty(), "The VApp must have a Vm");
    }
 
-   protected void getGuestCustomizationSection(final Function<String, GuestCustomizationSection> getGuestCustomizationSection) {
+   protected void getGuestCustomizationSection(final Function<URI, GuestCustomizationSection> getGuestCustomizationSection) {
       // Get URI for child VM
-      String vmUrn = Iterables.getOnlyElement(vApp.getChildren().getVms()).getId();
+      URI vmHref = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
 
       // The method under test
       try {
-         GuestCustomizationSection section = getGuestCustomizationSection.apply(vmUrn);
+         GuestCustomizationSection section = getGuestCustomizationSection.apply(vmHref);
 
          // Check the retrieved object is well formed
          checkGuestCustomizationSection(section);
@@ -170,13 +171,13 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
       }
    }
 
-   protected void getNetworkConnectionSection(final Function<String, NetworkConnectionSection> getNetworkConnectionSection) {
+   protected void getNetworkConnectionSection(final Function<URI, NetworkConnectionSection> getNetworkConnectionSection) {
       // Get URI for child VM
-      String vmUrn = Iterables.getOnlyElement(vApp.getChildren().getVms()).getId();
+      URI vmHref = Iterables.getOnlyElement(vApp.getChildren().getVms()).getHref();
 
       // The method under test
       try {
-         NetworkConnectionSection section = getNetworkConnectionSection.apply(vmUrn);
+         NetworkConnectionSection section = getNetworkConnectionSection.apply(vmHref);
 
          // Check the retrieved object is well formed
          checkNetworkConnectionSection(section);
@@ -187,7 +188,7 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
 
    @AfterClass(alwaysRun = true, description = "Cleans up the environment by deleting addd VApps")
    protected void cleanUpEnvironment() {
-      vdc = vdcApi.get(vdcUrn); // Refresh
+      vdc = vdcApi.get(context.resolveIdToHref(vdcId)); // Refresh
 
       // Find references in the Vdc with the VApp type and in the list of instantiated VApp names
       Iterable<Reference> vApps = Iterables.filter(vdc.getResourceEntities(),
@@ -244,14 +245,14 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Power on a {@link VApp}.
     */
-   protected VApp powerOnVApp(String vAppUrn) {
-      VApp test = vAppApi.get(vAppUrn);
+   protected VApp powerOnVApp(URI vAppHref) {
+      VApp test = vAppApi.get(vAppHref);
       Status status = test.getStatus();
       if (status != Status.POWERED_ON) {
-         Task powerOn = vAppApi.powerOn(vAppUrn);
+         Task powerOn = vAppApi.powerOn(vAppHref);
          assertTaskSucceedsLong(powerOn);
       }
-      test = vAppApi.get(vAppUrn);
+      test = vAppApi.get(vAppHref);
       assertStatus(VAPP, test, Status.POWERED_ON);
       return test;
    }
@@ -259,14 +260,14 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Power on a {@link Vm}.
     */
-   protected Vm powerOnVm(String vmUrn) {
-      Vm test = vmApi.get(vmUrn);
+   protected Vm powerOnVm(URI vmHref) {
+      Vm test = vmApi.get(vmHref);
       Status status = test.getStatus();
       if (status != Status.POWERED_ON) {
-         Task powerOn = vmApi.powerOn(vmUrn);
+         Task powerOn = vmApi.powerOn(vmHref);
          assertTaskSucceedsLong(powerOn);
       }
-      test = vmApi.get(vmUrn);
+      test = vmApi.get(vmHref);
       assertStatus(VM, test, Status.POWERED_ON);
       return test;
    }
@@ -274,14 +275,14 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Power off a {@link VApp}.
     */
-   protected VApp powerOffVApp(String vAppUrn) {
-      VApp test = vAppApi.get(vAppUrn);
+   protected VApp powerOffVApp(URI vAppHref) {
+      VApp test = vAppApi.get(vAppHref);
       Status status = test.getStatus();
       if (status != Status.POWERED_OFF) {
-         Task powerOff = vAppApi.powerOff(vAppUrn);
+         Task powerOff = vAppApi.powerOff(vAppHref);
          assertTaskSucceedsLong(powerOff);
       }
-      test = vAppApi.get(vAppUrn);
+      test = vAppApi.get(vAppHref);
       assertStatus(VAPP, test, Status.POWERED_OFF);
       return test;
    }
@@ -289,15 +290,15 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Power off a {@link Vm}.
     */
-   protected Vm powerOffVm(String vmUrn) {
-      Vm test = vmApi.get(vmUrn);
+   protected Vm powerOffVm(URI vmHref) {
+      Vm test = vmApi.get(vmHref);
       Status status = test.getStatus();
       if (status != Status.POWERED_OFF || test.isDeployed()) {
          UndeployVAppParams undeployParams = UndeployVAppParams.builder().build();
-         Task shutdownVapp = vmApi.undeploy(vmUrn, undeployParams);
+         Task shutdownVapp = vmApi.undeploy(vmHref, undeployParams);
          assertTaskSucceedsLong(shutdownVapp);
       }
-      test = vmApi.get(vmUrn);
+      test = vmApi.get(vmHref);
       assertStatus(VM, test, Status.POWERED_OFF);
       return test;
    }
@@ -305,14 +306,14 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Suspend a {@link VApp}.
     */
-   protected VApp suspendVApp(String vAppUrn) {
-      VApp test = vAppApi.get(vAppUrn);
+   protected VApp suspendVApp(URI vAppHref) {
+      VApp test = vAppApi.get(vAppHref);
       Status status = test.getStatus();
       if (status != Status.SUSPENDED) {
-         Task suspend = vAppApi.suspend(vAppUrn);
+         Task suspend = vAppApi.suspend(vAppHref);
          assertTaskSucceedsLong(suspend);
       }
-      test = vAppApi.get(vAppUrn);
+      test = vAppApi.get(vAppHref);
       assertStatus(VAPP, test, Status.SUSPENDED);
       return test;
    }
@@ -320,14 +321,14 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Suspend a {@link Vm}.
     */
-   protected Vm suspendVm(String vmUrn) {
-      Vm test = vmApi.get(vmUrn);
+   protected Vm suspendVm(URI vmHref) {
+      Vm test = vmApi.get(vmHref);
       Status status = test.getStatus();
       if (status != Status.SUSPENDED) {
-         Task suspend = vmApi.suspend(vmUrn);
+         Task suspend = vmApi.suspend(vmHref);
          assertTaskSucceedsLong(suspend);
       }
-      test = vmApi.get(vmUrn);
+      test = vmApi.get(vmHref);
       assertStatus(VM, test, Status.SUSPENDED);
       return test;
    }
@@ -335,30 +336,26 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    /**
     * Check the {@link VApp}s current status.
     */
-   protected void assertVAppStatus(final String vAppUrn, final Status status) {
-      VApp testVApp = vAppApi.get(vAppUrn);
+   protected void assertVAppStatus(URI vAppHref, final Status status) {
+      VApp testVApp = vAppApi.get(vAppHref);
       assertStatus(VAPP, testVApp, status);
    }
 
    /**
     * Check the {@link Vm}s current status.
     */
-   protected void assertVmStatus(String vmUrn, final Status status) {
-      Vm testVm = vmApi.get(vmUrn);
+   protected void assertVmStatus(URI vmHref, final Status status) {
+      Vm testVm = vmApi.get(vmHref);
       assertStatus(VM, testVm, status);
    }
 
    /**
     * Check a {@link VApp} or {@link Vm}s status.
     */
-   protected static void assertStatus(final String type, final AbstractVAppType testVApp, final Status status) {
+   protected static void assertStatus(final String type, final AbstractVApp testVApp, final Status status) {
       assertEquals(testVApp.getStatus(), status, String.format(OBJ_FIELD_EQ, type, "status", status.toString(), testVApp.getStatus().toString()));
    }
 
-   /**
-    * Marshals a JAXB annotated object into XML. The XML is output using
-    * {@link org.jclouds.logging.Logger#debug(String)}
-    */
    protected void debug(final Object object) {
       JAXBParser parser = new JAXBParser("true");
       try {
@@ -372,7 +369,7 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    }
    
    protected VAppNetworkConfiguration getVAppNetworkConfig(VApp vApp) {
-      Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getId()).getNetworkConfigs();
+      Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getHref()).getNetworkConfigs();
       return Iterables.tryFind(vAppNetworkConfigs, Predicates.notNull()).orNull();
    }
    
@@ -385,16 +382,16 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
    }
    
    protected Set<NetworkConnection> listNetworkConnections(Vm vm) {
-      return vmApi.getNetworkConnectionSection(vm.getId()).getNetworkConnections();
+      return vmApi.getNetworkConnectionSection(vm.getHref()).getNetworkConnections();
    }
    
    protected Set<VAppNetworkConfiguration> listVappNetworkConfigurations(VApp vApp) {
-      Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getId()).getNetworkConfigs();
+      Set<VAppNetworkConfiguration> vAppNetworkConfigs = vAppApi.getNetworkConfigSection(vApp.getHref()).getNetworkConfigs();
       return vAppNetworkConfigs;
    }
    
    protected void attachVmToVAppNetwork(Vm vm, String vAppNetworkName) {
-      Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getId())
+      Set<NetworkConnection> networkConnections = vmApi.getNetworkConnectionSection(vm.getHref())
                .getNetworkConnections();
 
       NetworkConnectionSection section = NetworkConnectionSection.builder()
@@ -412,7 +409,7 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
          
          section = section.toBuilder().networkConnection(newNetworkConnection).build();
       }
-      Task configureNetwork = vmApi.editNetworkConnectionSection(vm.getId(), section);
+      Task configureNetwork = vmApi.editNetworkConnectionSection(vm.getHref(), section);
       assertTaskSucceedsLong(configureNetwork);
    } 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
index 1e84eb6..8dd2080 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java
@@ -68,7 +68,7 @@ import org.jclouds.vcloud.director.v1_5.domain.network.Network;
 import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
 import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
 import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
-import org.jclouds.vcloud.director.v1_5.domain.network.NetworkServiceType;
+import org.jclouds.vcloud.director.v1_5.domain.network.NetworkService;
 import org.jclouds.vcloud.director.v1_5.domain.network.RouterInfo;
 import org.jclouds.vcloud.director.v1_5.domain.network.SyslogServerSettings;
 import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
@@ -89,8 +89,8 @@ import org.jclouds.vcloud.director.v1_5.domain.org.OrgPasswordPolicySettings;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgSettings;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgVAppTemplateLeaseSettings;
 import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
-import org.jclouds.vcloud.director.v1_5.domain.query.ContainerType;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecordType;
+import org.jclouds.vcloud.director.v1_5.domain.query.Container;
+import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecord;
 import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
@@ -448,7 +448,7 @@ public class Checks {
    public static void checkNetworkFeatures(NetworkFeatures features) {
       // Check optional fields
       if (features.getNetworkServices() != null) {
-         for (NetworkServiceType<?> service : features.getNetworkServices()) {
+         for (NetworkService<?> service : features.getNetworkServices()) {
             checkNetworkService(service);
          }
       }
@@ -471,7 +471,7 @@ public class Checks {
       checkIpAddress(routerInfo.getExternalIp());
    }
    
-   public static void checkNetworkService(NetworkServiceType service) {
+   public static void checkNetworkService(NetworkService service) {
       // NOTE isEnabled cannot be checked
    }
    
@@ -531,7 +531,7 @@ public class Checks {
       checkCapacityType(capacityWithUsage);
    }
 
-   public static void checkCapacityType(CapacityType<?> capacity) {
+   public static void checkCapacityType(Capacity<?> capacity) {
       // Check required fields
       assertNotNull(capacity.getUnits(), "The unit attribute of a CapacityWithUsage must be set");
       
@@ -632,17 +632,17 @@ public class Checks {
       }
    }
 
-   public static void checkAbstractVAppType(AbstractVAppType abstractVAppType) {
+   public static void checkAbstractVAppType(AbstractVApp abstractVApp) {
       // Check optional fields
-      Reference vAppParent = abstractVAppType.getVAppParent();
+      Reference vAppParent = abstractVApp.getVAppParent();
       if (vAppParent != null) checkReferenceType(vAppParent);
       // NOTE deployed cannot be checked
-      for (SectionType section : abstractVAppType.getSections()) {
+      for (SectionType section : abstractVApp.getSections()) {
          checkSectionType(section);
       }
       
       // Check parent type
-      checkResourceEntityType(abstractVAppType);
+      checkResourceEntityType(abstractVApp);
    }
    
    public static void checkVAppTemplate(VAppTemplate template) {
@@ -1452,7 +1452,7 @@ public class Checks {
       checkEntityType(vdc);
    }
 
-   public static void checkQueryResultRecord(QueryResultRecordType record) {
+   public static void checkQueryResultRecord(QueryResultRecord record) {
       checkHref(record.getHref());
       if (record.getLinks() != null) {
          for (Link link : record.getLinks()) {
@@ -1474,7 +1474,7 @@ public class Checks {
       checkContainerType(references);
    }
 
-   public static void checkContainerType(ContainerType container) {
+   public static void checkContainerType(Container container) {
       // optional
       // NOTE name can't be checked
       if (container.getPage() != null) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
index 224d268..be8e669 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiExpectTest.java
@@ -16,10 +16,8 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_CATALOG;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG_ITEM;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
@@ -44,9 +42,6 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.net.HttpHeaders;
 
-/**
- * Test the {@link CatalogApi} by observing its side effects.
- */
 @Test(groups = { "unit", "user" }, singleThreaded = true, testName = "CatalogApiExpectTest")
 public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
    static String catalog = "7212e451-76e1-4631-b2de-ba1dfd8080e4";
@@ -71,35 +66,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
       VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, get, getResponse);
       assertEquals(api.getCatalogApi().get(catalogHref), catalog());
    }
-   
-   HttpRequest resolveCatalog = HttpRequest.builder()
-            .method("GET")
-            .endpoint(endpoint + "/entity/" + catalogUrn)
-            .addHeader("Accept", "*/*")
-            .addHeader("x-vcloud-authorization", token)
-            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
-            .build();
-   
-   String catalogEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
-                                                             .a("name", catalogUrn)
-                                                             .a("id", catalogUrn)
-                                                             .a("type", ENTITY)
-                                                             .a("href", endpoint + "/entity/" + catalogUrn)
-                                  .e("Link").a("rel", "alternate").a("type", CATALOG).a("href", catalogHref.toString()).up()
-                                  // TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
-                                  .e("Link").a("rel", "alternate").a("type", ADMIN_CATALOG).a("href", catalogHref.toString()).up());
-   
-   HttpResponse resolveCatalogResponse = HttpResponse.builder()
-           .statusCode(200)
-           .payload(payloadFromStringWithContentType(catalogEntity, ENTITY + ";version=1.5"))
-           .build();
-   
-   @Test
-   public void testGetCatalogUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, get, getResponse);
-      assertEquals(api.getCatalogApi().get(catalogUrn), catalog());
-   }
-   
+
    HttpRequest add = HttpRequest.builder()
             .method("POST")
             .endpoint(catalogHref + "/catalogItems")
@@ -125,13 +92,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
       VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, add, addResponse);
       assertEquals(api.getCatalogApi().addItem(catalogHref, newItem), adddCatalogItem());
    }
-   
-   @Test
-   public void testAddCatalogItemUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveCatalog, resolveCatalogResponse, add, addResponse);
-      assertEquals(api.getCatalogApi().addItem(catalogUrn, newItem), adddCatalogItem());
-   }
-   
+
    HttpRequest getMetadata = HttpRequest.builder()
             .method("GET")
             .endpoint(catalogHref + "/metadata")
@@ -183,28 +144,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
 
    static String item = "a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df";
    static URI itemHref = URI.create(endpoint + "/catalogItem/" + item);
-   static String itemUrn = "urn:vcloud:catalogitem:" + item;
 
-   HttpRequest resolveItem = HttpRequest.builder()
-            .method("GET")
-            .endpoint(endpoint + "/entity/" + itemUrn)
-            .addHeader("Accept", "*/*")
-            .addHeader("x-vcloud-authorization", token)
-            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
-            .build();
-   
-   String itemEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
-                                                             .a("name", itemUrn)
-                                                             .a("id", itemUrn)
-                                                             .a("type", ENTITY)
-                                                             .a("href", endpoint + "/entity/" + itemUrn)
-                               .e("Link").a("rel", "alternate").a("type", CATALOG_ITEM).a("href", itemHref.toString()).up());
-
-   HttpResponse resolveItemResponse = HttpResponse.builder()
-            .statusCode(200)
-            .payload(payloadFromStringWithContentType(itemEntity, ENTITY + ";version=1.5"))
-            .build();
-   
    HttpRequest getItem = HttpRequest.builder()
             .method("GET")
             .endpoint(endpoint + "/catalogItem/" + item)
@@ -222,13 +162,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
       VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, getItem, getItemResponse);
       assertEquals(api.getCatalogApi().getItem(itemHref), catalogItem());
    }
-   
-   @Test
-   public void testGetCatalogItemUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, getItem, getItemResponse);
-      assertEquals(api.getCatalogApi().getItem(itemUrn), catalogItem());
-   }
-   
+
    HttpRequest editItem = HttpRequest.builder()
             .method("PUT")
             .endpoint(endpoint + "/catalogItem/" + item)
@@ -248,13 +182,7 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
       VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, editItem, editItemResponse);
       assertEquals(api.getCatalogApi().editItem(itemHref, catalogItem()), catalogItem());
    }
-   
-   @Test
-   public void testEditCatalogItemUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, editItem, editItemResponse);
-      assertEquals(api.getCatalogApi().editItem(itemUrn, catalogItem()), catalogItem());
-   }
-   
+
    HttpRequest removeItem = HttpRequest.builder()
             .method("DELETE")
             .endpoint(endpoint + "/catalogItem/" + item)
@@ -272,12 +200,6 @@ public class CatalogApiExpectTest extends VCloudDirectorApiExpectTest {
       api.getCatalogApi().removeItem(itemHref);
    }
 
-   @Test
-   public void testRemoveCatalogItemUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveItem, resolveItemResponse, removeItem, removeItemResponse);
-      api.getCatalogApi().removeItem(itemUrn);
-   }
-   
    HttpRequest getItemMetadata = HttpRequest.builder()
             .method("GET")
             .endpoint(endpoint + "/catalogItem/" + item + "/metadata")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
index f24ee9a..a49e527 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogApiLiveTest.java
@@ -48,9 +48,6 @@ import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMap;
 
-/**
- * Tests live behavior of {@link CatalogApi}.
- */
 @Test(groups = { "live", "user" }, singleThreaded = true, testName = "CatalogApiLiveTest")
 public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
@@ -73,12 +70,12 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       catalogApi = context.getApi().getCatalogApi();
       adminCatalogApi = adminContext.getApi().getCatalogApi();
      
-      if (catalogUrn == null) {
+      if (catalogId == null) {
          AdminCatalog newCatalog = AdminCatalog.builder().name(name("Test Catalog "))
                   .description("created by CatalogApiLiveTest").build();
 
-         adminCatalog = adminCatalogApi.addCatalogToOrg(newCatalog, org.getId());
-         catalogUrn = catalogApi.get(
+         adminCatalog = adminCatalogApi.addCatalogToOrg(newCatalog, org.getHref());
+         catalogId = catalogApi.get(
                   find(adminCatalog.getLinks(),
                            and(relEquals("alternate"), typeEquals(VCloudDirectorMediaType.CATALOG))).getHref()).getId();
 
@@ -91,7 +88,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    protected void tearDownContext() {
       if (media != null) {
          try {
-            Task remove = context.getApi().getMediaApi().remove(media.getId());
+            Task remove = context.getApi().getMediaApi().remove(media.getHref());
             taskDoneEventually(remove);
          } catch (Exception e) {
             logger.warn(e, "Error when deleting media '%s'", media.getName());
@@ -100,14 +97,14 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       if (createdByTest) {
          if (catalogItem != null) {
             try {
-               catalogApi.removeItem(catalogItem.getId());
+               catalogApi.removeItem(catalogItem.getHref());
             } catch (Exception e) {
                logger.warn(e, "Error when deleting catalog item '%s'", catalogItem.getName());
             }
          }
          if (adminContext != null && adminCatalog != null) {
             try {
-               adminContext.getApi().getCatalogApi().remove(adminCatalog.getId());
+               adminContext.getApi().getCatalogApi().remove(adminCatalog.getHref());
             } catch (Exception e) {
                logger.warn(e, "Error when deleting catalog '%s'", adminCatalog.getName());
             }
@@ -121,12 +118,12 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       Catalog catalog = lazyGetCatalog();
       assertNotNull(catalog);
       // Double check it's pointing at the correct catalog
-      assertEquals(catalog.getId(), catalogUrn);
+      assertEquals(catalog.getHref(), catalogId);
    }
 
    @Test(description = "GET /catalogItem/{id}", dependsOnMethods = "testAddCatalogItem")
    public void testGetCatalogItem() {
-      CatalogItem catalogItem = catalogApi.getItem(this.catalogItem.getId());
+      CatalogItem catalogItem = catalogApi.getItem(this.catalogItem.getHref());
       checkCatalogItem(catalogItem);
       assertEquals(catalogItem.getEntity().getHref(), this.catalogItem.getEntity().getHref());
    }
@@ -146,7 +143,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       CatalogItem editedCatalogItem = CatalogItem.builder().name("newitem").description("New Item")
                .type(VCloudDirectorMediaType.CATALOG_ITEM).entity(Reference.builder().href(media.getHref()).build())
                .build();
-      catalogItem = catalogApi.addItem(catalogUrn, editedCatalogItem);
+      catalogItem = catalogApi.addItem(context.resolveIdToHref(catalogId), editedCatalogItem);
       checkCatalogItem(catalogItem);
       assertEquals(catalogItem.getName(), "newitem");
       assertEquals(catalogItem.getDescription(), "New Item");
@@ -155,7 +152,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    @Test(description = "PUT /catalogItem/{id}", dependsOnMethods = "testAddCatalogItem")
    public void testEditCatalogItem() {
       CatalogItem editedCatalogItem = CatalogItem.builder().fromCatalogItem(catalogItem).name("UPDATEDNAME").build();
-      catalogItem = catalogApi.editItem(catalogItem.getId(), editedCatalogItem);
+      catalogItem = catalogApi.editItem(catalogItem.getHref(), editedCatalogItem);
       checkCatalogItem(catalogItem);
       assertEquals(catalogItem.getName(), "UPDATEDNAME");
    }
@@ -164,85 +161,85 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    @Test(description = "DELETE /catalogItem/{id}", dependsOnMethods = "testRemoveCatalogItemMetadataValue")
    public void testRemoveCatalogItem() {
       removeMediaAttachedToCatalogItem(catalogItem);
-      catalogApi.removeItem(catalogItem.getId());
-      catalogItem = catalogApi.getItem(catalogItem.getId());
+      catalogApi.removeItem(catalogItem.getHref());
+      catalogItem = catalogApi.getItem(catalogItem.getHref());
       assertNull(catalogItem);
    }
 
    @Test(description = "GET /catalog/{id}/metadata")
    public void testGetCatalogMetadata() {
-      Metadata catalogMetadata = context.getApi().getMetadataApi(catalogUrn).get();
+      Metadata catalogMetadata = context.getApi().getMetadataApi(context.resolveIdToHref(catalogId)).get();
       checkMetadata(catalogMetadata);
    }
 
    @Test(description = "GET /catalog/{id}/metadata/{key}")
    public void testGetCatalogMetadataValue() {
 
-      Task mergeCatalogMetadata = context.getApi().getMetadataApi(catalogUrn)
+      Task mergeCatalogMetadata = context.getApi().getMetadataApi(context.resolveIdToHref(catalogId))
             .putAll(ImmutableMap.of("KEY", "MARMALADE"));
       assertTaskSucceedsLong(mergeCatalogMetadata);
 
-      Metadata catalogMetadata = context.getApi().getMetadataApi(catalogUrn).get();
+      Metadata catalogMetadata = context.getApi().getMetadataApi(context.resolveIdToHref(catalogId)).get();
 
-      String metadataValue = context.getApi().getMetadataApi(catalogUrn).get("KEY");
+      String metadataValue = context.getApi().getMetadataApi(context.resolveIdToHref(catalogId)).get("KEY");
       assertEquals(metadataValue, catalogMetadata.get("KEY"), String.format(CORRECT_VALUE_OBJECT_FMT, "Value",
             "MetadataValue", catalogMetadata.get("KEY"), metadataValue));
    }
 
    @Test(description = "GET /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
    public void testGetCatalogItemMetadata() {
-      Metadata catalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getId()).get();
+      Metadata catalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getHref()).get();
       checkMetadata(catalogItemMetadata);
    }
 
    @Test(description = "POST /catalogItem/{id}/metadata", dependsOnMethods = "testAddCatalogItem")
    public void testMergeCatalogItemMetadata() {
-      Metadata before = context.getApi().getMetadataApi(catalogItem.getId()).get();
+      Metadata before = context.getApi().getMetadataApi(catalogItem.getHref()).get();
 
-      Task mergeCatalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getId()).putAll(
+      Task mergeCatalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getHref()).putAll(
             ImmutableMap.of("KEY", "MARMALADE", "VEGIMITE", "VALUE"));
       checkTask(mergeCatalogItemMetadata);
       assertTrue(retryTaskSuccess.apply(mergeCatalogItemMetadata),
             String.format(TASK_COMPLETE_TIMELY, "mergeCatalogItemMetadata"));
-      Metadata mergedCatalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getId()).get();
+      Metadata mergedCatalogItemMetadata = context.getApi().getMetadataApi(catalogItem.getHref()).get();
 
       assertTrue(mergedCatalogItemMetadata.getMetadataEntries().size() > before.getMetadataEntries().size(),
             "Should have added at least one other MetadataEntry to the CatalogItem");
 
-      String keyMetadataValue = context.getApi().getMetadataApi(catalogItem.getId()).get("KEY");
+      String keyMetadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).get("KEY");
       assertEquals(keyMetadataValue, "MARMALADE", "The Value of the MetadataValue for KEY should have changed");
 
-      String newKeyMetadataValue = context.getApi().getMetadataApi(catalogItem.getId()).get("VEGIMITE");
+      String newKeyMetadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).get("VEGIMITE");
 
       assertEquals(newKeyMetadataValue, "VALUE", "The Value of the MetadataValue for NEW_KEY should have been set");
    }
 
    @Test(description = "GET /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testSetCatalogItemMetadataValue")
    public void testGetCatalogItemMetadataValue() {
-      String metadataValue = context.getApi().getMetadataApi(catalogItem.getId()).get("KEY");
+      String metadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).get("KEY");
       assertNotNull(metadataValue);
    }
 
    @Test(description = "PUT /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testMergeCatalogItemMetadata")
    public void testSetCatalogItemMetadataValue() {
 
-      Task setCatalogItemMetadataValue = context.getApi().getMetadataApi(catalogItem.getId()).put("KEY", "NEW");
+      Task setCatalogItemMetadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).put("KEY", "NEW");
       checkTask(setCatalogItemMetadataValue);
       assertTrue(retryTaskSuccess.apply(setCatalogItemMetadataValue),
             String.format(TASK_COMPLETE_TIMELY, "setCatalogItemMetadataValue"));
 
-      String editedMetadataValue = context.getApi().getMetadataApi(catalogItem.getId()).get("KEY");
+      String editedMetadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).get("KEY");
       assertEquals(editedMetadataValue, "NEW",
             String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", "NEW", editedMetadataValue));
    }
 
    @Test(description = "DELETE /catalogItem/{id}/metadata/{key}", dependsOnMethods = "testGetCatalogItemMetadataValue")
    public void testRemoveCatalogItemMetadataValue() {
-      Task removeCatalogItemMetadataValue = context.getApi().getMetadataApi(catalogItem.getId()).remove("KEY");
+      Task removeCatalogItemMetadataValue = context.getApi().getMetadataApi(catalogItem.getHref()).remove("KEY");
       checkTask(removeCatalogItemMetadataValue);
       assertTrue(retryTaskSuccess.apply(removeCatalogItemMetadataValue),
             String.format(TASK_COMPLETE_TIMELY, "removeCatalogItemMetadataValue"));
-      String removed = context.getApi().getMetadataApi(catalogItem.getId()).get("KEY");
+      String removed = context.getApi().getMetadataApi(catalogItem.getHref()).get("KEY");
       assertNull(removed);
    }
    
@@ -250,7 +247,7 @@ public class CatalogApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       if (media != null) {
          if (catalogItem.getEntity().getHref().equals(media.getHref())) {
             try {
-               Task remove = context.getApi().getMediaApi().remove(media.getId());
+               Task remove = context.getApi().getMediaApi().remove(media.getHref());
                taskDoneEventually(remove);
                media = null;
             } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/KeyPairsApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/KeyPairsApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/KeyPairsApiLiveTest.java
index fb951fc..ae27c38 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/KeyPairsApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/KeyPairsApiLiveTest.java
@@ -58,9 +58,6 @@ import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 import com.google.inject.Inject;
 
-/**
- * Tests behavior of {@code Key Pairs}
- */
 @Test(groups = { "live", "user" }, singleThreaded = true, testName = "KeyPairsApiLiveTest")
 public class KeyPairsApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
@@ -89,7 +86,7 @@ public class KeyPairsApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 		Media keyPairsContainer = findOrCreateKeyPairContainerInVDCNamed(currentVDC,
 				keyPairContainer, keyPairName);
 		String keypairValue = context.getApi().getMetadataApi(
-				keyPairsContainer.getId()).get(keyPairName);
+				keyPairsContainer.getHref()).get(keyPairName);
 		assertEquals(keypairValue, generateKeyPair(keyPairName));
 	}
 
@@ -99,12 +96,12 @@ public class KeyPairsApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 		Vdc currentVDC = lazyGetVdc();
 		Media keyPairsContainer = findOrCreateKeyPairContainerInVDCNamed(currentVDC,
 				keyPairContainer, keyPairName);
-		Task removeMedia = mediaApi.remove(keyPairsContainer.getId());
+		Task removeMedia = mediaApi.remove(keyPairsContainer.getHref());
 		Checks.checkTask(removeMedia);
 		assertTrue(retryTaskSuccess.apply(removeMedia),
 				String.format(TASK_COMPLETE_TIMELY, "removeMedia"));
 
-		keyPairsContainer = mediaApi.get(keyPairsContainer.getId());
+		keyPairsContainer = mediaApi.get(keyPairsContainer.getHref());
 		assertNull(keyPairsContainer, String.format(OBJ_DEL, MEDIA,
 				keyPairsContainer != null ? keyPairsContainer.toString() : ""));
 	}
@@ -118,7 +115,7 @@ public class KeyPairsApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
 					@Override
 					public boolean apply(Media input) {
-						return context.getApi().getMetadataApi(input.getId()).get(
+						return context.getApi().getMetadataApi(input.getHref()).get(
 								keyPairName) != null;
 					}
 				});
@@ -204,7 +201,7 @@ public class KeyPairsApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
 	private void setKeyPairOnkeyPairsContainer(Media media, String keyPairName,
 			String keyPair) {
-		Task setKeyPair = context.getApi().getMetadataApi(media.getId()).put(
+		Task setKeyPair = context.getApi().getMetadataApi(media.getHref()).put(
 				keyPairName, keyPair);
 		Checks.checkTask(setKeyPair);
 		assertTrue(retryTaskSuccess.apply(setKeyPair),

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
index 4fc317f..864ae36 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiExpectTest.java
@@ -41,9 +41,6 @@ import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
 
-/**
- * Test the {@link MediaApi} via its side effects.
- */
 @Test(groups = { "unit", "user" }, singleThreaded = true, testName = "MediaApiExpectTest")
 public class MediaApiExpectTest extends VCloudDirectorAdminApiExpectTest {
    

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
index 7f6a08f..7f24595 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MediaApiLiveTest.java
@@ -67,9 +67,6 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
-/**
- * Tests behavior of {@code MediaApi}
- */
 @Test(groups = { "live", "user" }, singleThreaded = true, testName = "MediaApiLiveTest")
 public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
@@ -103,7 +100,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    protected void tidyUp() {
       if (media != null) {
          try {
-            Task remove = mediaApi.remove(media.getId());
+            Task remove = mediaApi.remove(media.getHref());
             taskDoneEventually(remove);
          } catch (Exception e) {
             logger.warn(e, "Error when deleting media '%s': %s", media.getName());
@@ -111,7 +108,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       }
       if (oldMedia != null) {
          try {
-            Task remove = mediaApi.remove(oldMedia.getId());
+            Task remove = mediaApi.remove(oldMedia.getHref());
             taskDoneEventually(remove);
          } catch (Exception e) {
             logger.warn(e, "Error when deleting media '%s': %s", oldMedia.getName());
@@ -156,19 +153,19 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       Link uploadLink = Iterables.find(links, LinkPredicates.relEquals(Link.Rel.UPLOAD_DEFAULT));
       context.getApi().getUploadApi().upload(uploadLink.getHref(), Payloads.newPayload(iso));
 
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       if (media.getTasks().size() == 1) {
          Task uploadTask = Iterables.getOnlyElement(media.getTasks());
          Checks.checkTask(uploadTask);
          assertEquals(uploadTask.getStatus(), Task.Status.RUNNING);
          assertTrue(retryTaskSuccess.apply(uploadTask), String.format(TASK_COMPLETE_TIMELY, "uploadTask"));
-         media = mediaApi.get(media.getId());
+         media = mediaApi.get(media.getHref());
       }
    }
 
    @Test(description = "GET /media/{id}", dependsOnMethods = { "testAddMedia" })
    public void testGetMedia() {
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       assertNotNull(media, String.format(OBJ_REQ_LIVE, MEDIA));
 
       owner = media.getOwner();
@@ -180,7 +177,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
    @Test(description = "GET /media/{id}/owner", dependsOnMethods = { "testGetMedia" })
    public void testGetMediaOwner() {
-      Owner directOwner = mediaApi.getOwner(media.getId());
+      Owner directOwner = mediaApi.getOwner(media.getHref());
       assertEquals(owner.toBuilder().user(owner.getUser()).build(),
                directOwner.toBuilder().links(ImmutableSet.<Link> of()).build(), String.format(
                         GETTER_RETURNS_SAME_OBJ, "getOwner()", "owner", "media.getOwner()", owner.toString(),
@@ -197,8 +194,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    @Test(description = "POST /vdc/{id}/action/cloneMedia", dependsOnMethods = { "testGetMediaOwner" })
    public void testCloneMedia() {
       oldMedia = media;
-      media = vdcApi.cloneMedia(
-               vdcUrn,
+      media = vdcApi.cloneMedia(context.resolveIdToHref(vdcId),
                CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build())
                         .name("copied " + media.getName()).description("copied by testCloneMedia()").build());
 
@@ -209,7 +205,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
          if (copyTask != null) {
             Checks.checkTask(copyTask);
             assertTrue(retryTaskSuccess.apply(copyTask), String.format(TASK_COMPLETE_TIMELY, "copyTask"));
-            media = mediaApi.get(media.getId());
+            media = mediaApi.get(media.getHref());
          }
       }
 
@@ -217,11 +213,11 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       assertTrue(media.clone(oldMedia),
                String.format(OBJ_FIELD_CLONE, MEDIA, "copied media", media.toString(), oldMedia.toString()));
 
-      context.getApi().getMetadataApi(media.getId()).put("key", "value");
+      context.getApi().getMetadataApi(media.getHref()).put("key", "value");
 
-      media = vdcApi
-               .cloneMedia(vdcUrn, CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build())
-                        .name("moved test media").description("moved by testCloneMedia()").isSourceDelete(true).build());
+      media = vdcApi.cloneMedia(context.resolveIdToHref(vdcId),
+            CloneMediaParams.builder().source(Reference.builder().fromEntity(media).build()).name("moved test media")
+                  .description("moved by testCloneMedia()").isSourceDelete(true).build());
 
       Checks.checkMediaFor(VDC, media);
 
@@ -230,7 +226,7 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
          if (copyTask != null) {
             Checks.checkTask(copyTask);
             assertTrue(retryTaskSuccess.apply(copyTask), String.format(TASK_COMPLETE_TIMELY, "copyTask"));
-            media = mediaApi.get(media.getId());
+            media = mediaApi.get(media.getHref());
          }
       }
 
@@ -247,10 +243,10 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
       String newDescription = "new " + oldDescription;
       media = media.toBuilder().name(newName).description(newDescription).build();
 
-      Task editMedia = mediaApi.edit(media.getId(), media);
+      Task editMedia = mediaApi.edit(media.getHref(), media);
       Checks.checkTask(editMedia);
       assertTrue(retryTaskSuccess.apply(editMedia), String.format(TASK_COMPLETE_TIMELY, "editMedia"));
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
 
       assertTrue(equal(media.getName(), newName), String.format(OBJ_FIELD_UPDATABLE, MEDIA, "name"));
       assertTrue(equal(media.getDescription(), newDescription),
@@ -262,15 +258,15 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
       media = media.toBuilder().name(oldName).description(oldDescription).build();
 
-      editMedia = mediaApi.edit(media.getId(), media);
+      editMedia = mediaApi.edit(media.getHref(), media);
       Checks.checkTask(editMedia);
       assertTrue(retryTaskSuccess.apply(editMedia), String.format(TASK_COMPLETE_TIMELY, "editMedia"));
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
    }
 
    @Test(description = "GET /media/{id}/metadata", dependsOnMethods = { "testSetMetadataValue" })
    public void testGetMetadata() {
-      metadata = context.getApi().getMetadataApi(media.getId()).get();
+      metadata = context.getApi().getMetadataApi(media.getHref()).get();
       // required for testing
       assertFalse(isEmpty(metadata.getMetadataEntries()), String.format(OBJ_FIELD_REQ_LIVE, MEDIA, "metadata.entries"));
 
@@ -280,31 +276,31 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    @Test(description = "POST /media/{id}/metadata", dependsOnMethods = { "testGetMedia" })
    public void testMergeMetadata() {
       // test new
-      Task mergeMetadata = context.getApi().getMetadataApi(media.getId()).putAll(ImmutableMap.of("testKey", "testValue"));
+      Task mergeMetadata = context.getApi().getMetadataApi(media.getHref()).putAll(ImmutableMap.of("testKey", "testValue"));
       Checks.checkTask(mergeMetadata);
       assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(new)"));
-      metadata = context.getApi().getMetadataApi(media.getId()).get();
+      metadata = context.getApi().getMetadataApi(media.getHref()).get();
       Checks.checkMetadataFor(MEDIA, metadata);
       assertEquals(metadata.get("testKey"), "testValue");
 
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       Checks.checkMediaFor(MEDIA, media);
 
       // test edit
-      mergeMetadata = context.getApi().getMetadataApi(media.getId()).put("testKey", "new testValue");
+      mergeMetadata = context.getApi().getMetadataApi(media.getHref()).put("testKey", "new testValue");
       Checks.checkTask(mergeMetadata);
       assertTrue(retryTaskSuccess.apply(mergeMetadata), String.format(TASK_COMPLETE_TIMELY, "mergeMetadata(edit)"));
-      metadata = context.getApi().getMetadataApi(media.getId()).get();
+      metadata = context.getApi().getMetadataApi(media.getHref()).get();
       Checks.checkMetadataFor(MEDIA, metadata);
       assertEquals(metadata.get("testKey"), "new testValue");
 
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       Checks.checkMediaFor(MEDIA, media);
    }
 
    @Test(description = "GET /media/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
    public void testGetMetadataValue() {
-      metadataValue = context.getApi().getMetadataApi(media.getId()).get("key");
+      metadataValue = context.getApi().getMetadataApi(media.getHref()).get("key");
       assertNotNull(metadataValue);
    }
 
@@ -312,42 +308,42 @@ public class MediaApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    public void testSetMetadataValue() {
       metadataEntryValue = "value";
       
-      Task setMetadataEntry = context.getApi().getMetadataApi(media.getId()).put("key", metadataEntryValue);
+      Task setMetadataEntry = context.getApi().getMetadataApi(media.getHref()).put("key", metadataEntryValue);
       Checks.checkTask(setMetadataEntry);
       assertTrue(retryTaskSuccess.apply(setMetadataEntry), String.format(TASK_COMPLETE_TIMELY, "setMetadataEntry"));
-      metadataValue = context.getApi().getMetadataApi(media.getId()).get("key");
+      metadataValue = context.getApi().getMetadataApi(media.getHref()).get("key");
       assertNotNull(metadataValue);
    }
 
    @Test(description = "DELETE /media/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata",
             "testGetMetadataValue" })
    public void testRemoveMetadata() {
-      Task remove = context.getApi().getMetadataApi(media.getId()).remove("testKey");
+      Task remove = context.getApi().getMetadataApi(media.getHref()).remove("testKey");
       Checks.checkTask(remove);
       assertTrue(retryTaskSuccess.apply(remove), String.format(TASK_COMPLETE_TIMELY, "remove"));
 
-      metadataValue = context.getApi().getMetadataApi(media.getId()).get("testKey");
+      metadataValue = context.getApi().getMetadataApi(media.getHref()).get("testKey");
       assertNull(metadataValue, String.format(OBJ_FIELD_ATTRB_DEL, MEDIA, "Metadata",
                metadataValue != null ? metadataValue.toString() : "", "MetadataEntry",
                metadataValue != null ? metadataValue.toString() : ""));
 
-      metadataValue = context.getApi().getMetadataApi(media.getId()).get("key");
+      metadataValue = context.getApi().getMetadataApi(media.getHref()).get("key");
       assertNotNull(metadataValue);
 
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       Checks.checkMediaFor(MEDIA, media);
    }
 
    @Test(description = "DELETE /media/{id}", dependsOnMethods = { "testRemoveMetadata" })
    public void testRemoveMedia() {
-      Task removeMedia = mediaApi.remove(media.getId());
+      Task removeMedia = mediaApi.remove(media.getHref());
       Checks.checkTask(removeMedia);
       assertTrue(retryTaskSuccess.apply(removeMedia), String.format(TASK_COMPLETE_TIMELY, "removeMedia"));
 
-      media = mediaApi.get(media.getId());
+      media = mediaApi.get(media.getHref());
       assertNull(media, String.format(OBJ_DEL, MEDIA, media != null ? media.toString() : ""));
 
-      removeMedia = mediaApi.remove(oldMedia.getId());
+      removeMedia = mediaApi.remove(oldMedia.getHref());
       Checks.checkTask(removeMedia);
       assertTrue(retryTaskSuccess.apply(removeMedia), String.format(TASK_COMPLETE_TIMELY, "removeMedia"));
       oldMedia = null;

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MetadataApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MetadataApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MetadataApiExpectTest.java
index 8bf90b5..3f328b8 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MetadataApiExpectTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/MetadataApiExpectTest.java
@@ -37,9 +37,6 @@ import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
 import org.testng.annotations.Test;
 
-/**
- * Tests the request/response behavior of {@link org.jclouds.vcloud.director.v1_5.features.MetadataApi}
- */
 @Test(groups = { "unit", "user" }, testName = "MetadataApiExpectTest")
 public class MetadataApiExpectTest extends VCloudDirectorAdminApiExpectTest {
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
index dc49116..98d4700 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiExpectTest.java
@@ -16,12 +16,9 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_NETWORK;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ENTITY;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ERROR;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK;
 import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
@@ -53,14 +50,10 @@ import org.testng.annotations.Test;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.net.HttpHeaders;
 
-/**
- * Test the {@link NetworkApi} via its side effects.
- */
 @Test(groups = { "unit", "user" }, singleThreaded = true, testName = "NetworkApiExpectTest")
 public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
 
    static String network = "55a677cf-ab3f-48ae-b880-fab90421980c";
-   static String networkUrn = "urn:vcloud:network:" + network;
    static URI networkHref = URI.create(endpoint + "/network/" + network);
    
    HttpRequest get = HttpRequest.builder()
@@ -131,35 +124,6 @@ public class NetworkApiExpectTest extends VCloudDirectorAdminApiExpectTest {
       
       assertNull(api.getNetworkApi().get(URI.create(endpoint + "/network/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee")));
    }
-   
-   HttpRequest resolveNetwork = HttpRequest.builder()
-            .method("GET")
-            .endpoint(endpoint + "/entity/" + networkUrn)
-            .addHeader("Accept", "*/*")
-            .addHeader("x-vcloud-authorization", token)
-            .addHeader(HttpHeaders.COOKIE, "vcloud-token=" + token)
-            .build();
-   
-   String networkEntity = asString(createXMLBuilder("Entity").a("xmlns", "http://www.vmware.com/vcloud/v1.5")
-                                                             .a("name", networkUrn)
-                                                             .a("id", networkUrn)
-                                                             .a("type", ENTITY)
-                                                             .a("href", endpoint + "/entity/" + networkUrn)
-                                  .e("Link").a("rel", "alternate").a("type", NETWORK).a("href", networkHref.toString()).up()
-                                  // TODO: remove this when VCloudDirectorApiExpectTest no longer inherits from VCloudDirectorAdminApiExpectTest
-                                  .e("Link").a("rel", "alternate").a("type", ADMIN_NETWORK).a("href", networkHref.toString()).up());
-   
-   HttpResponse resolveNetworkResponse = HttpResponse.builder()
-           .statusCode(200)
-           .payload(payloadFromStringWithContentType(networkEntity, ENTITY + ";version=1.5"))
-           .build();
-   
-   @Test
-   public void testGetNetworkUrn() {
-      VCloudDirectorApi api = requestsSendResponses(loginRequest, sessionResponse, resolveNetwork, resolveNetworkResponse, get, getResponse);
-      assertEquals(api.getNetworkApi().get(networkUrn), network());
-   }
-   
 
    HttpRequest getMetadata = HttpRequest.builder()
             .method("GET")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a58cf0c6/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
index cc2d355..a37fe8f 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkApiLiveTest.java
@@ -42,9 +42,6 @@ import org.testng.annotations.Test;
 
 import com.google.common.collect.Iterables;
 
-/**
- * Tests behavior of {@link NetworkApi}
- */
 @Test(groups = { "live", "user" }, singleThreaded = true, testName = "NetworkApiLiveTest")
 public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
@@ -67,7 +64,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    public void cleanUp() {
       if (metadataSet) {
          try {
-            Task remove = adminContext.getApi().getMetadataApi(networkUrn).remove("key");
+            Task remove = adminContext.getApi().getMetadataApi(context.resolveIdToAdminHref(networkId)).remove("key");
             taskDoneEventually(remove);
          } catch (Exception e) {
             logger.warn(e, "Error when deleting metadata");
@@ -78,9 +75,9 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
    @Test(description = "GET /network/{id}")
    public void testGetNetwork() {
       // required for testing
-      assertNotNull(networkUrn, String.format(URN_REQ_LIVE, NETWORK));
+      assertNotNull(networkId, String.format(URN_REQ_LIVE, NETWORK));
 
-      Network abstractNetwork = networkApi.get(networkUrn);
+      Network abstractNetwork = networkApi.get(context.resolveIdToHref(networkId));
       assertTrue(abstractNetwork instanceof OrgNetwork,
                String.format(REQUIRED_VALUE_OBJECT_FMT, ".class", NETWORK, abstractNetwork.getClass(), "OrgNetwork"));
       OrgNetwork network = Network.toSubType(abstractNetwork);
@@ -92,7 +89,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
    private void setupMetadata() {
       //TODO: block until complete
-      adminContext.getApi().getMetadataApi(networkUrn).put("key", "value");
+      adminContext.getApi().getMetadataApi(context.resolveIdToHref(networkId)).put("key", "value");
       metadataSet = true;
    }
 
@@ -102,7 +99,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
          setupMetadata();
       }
 
-      Metadata metadata = context.getApi().getMetadataApi(networkUrn).get();
+      Metadata metadata = context.getApi().getMetadataApi(context.resolveIdToHref(networkId)).get();
       // required for testing
       assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()),
                String.format(OBJ_FIELD_REQ_LIVE, NETWORK, "metadata.entries"));
@@ -124,7 +121,7 @@ public class NetworkApiLiveTest extends BaseVCloudDirectorApiLiveTest {
 
    @Test(description = "GET /network/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
    public void testGetMetadataValue() {
-      String metadataValue = context.getApi().getMetadataApi(networkUrn).get("key");
+      String metadataValue = context.getApi().getMetadataApi(context.resolveIdToHref(networkId)).get("key");
 
       assertEquals(metadataValue, "value", String.format(OBJ_FIELD_EQ, NETWORK, "metadataEntry.value", "value", metadataValue));
    }