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/05 22:15:21 UTC

[1/5] JCLOUDS-40 unasync vcloud-director

Repository: jclouds-labs
Updated Branches:
  refs/heads/master 0cbcf181c -> d7bc430c6


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApi.java
index ec8dbdb..e25f8be 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryApi.java
@@ -16,98 +16,101 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.QueryParams;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.RoleReferences;
 import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
 import org.jclouds.vcloud.director.v1_5.features.QueryApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
-/**
- * Provides synchronous access to {@link AdminQuery} objects.
- * 
- * @see AdminQueryAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminQueryApi extends QueryApi {
-   
+
    /**
-    * Retrieves a list of {@link Group}s for organization the org admin belongs to by using REST API general QueryHandler
-    * 
+    * Retrieves a list of {@link Group}s for organization the org admin belongs to by using REST API general
+    * QueryHandler
+    *
     * <pre>
     * GET /admin/groups/query
     * </pre>
-    *
-    * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/groups/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords groupsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords groupsQuery(String filter);
-
    /**
     * Retrieves a list of {@link Org}s by using REST API general QueryHandler.
     *
     * <pre>
     * GET /admin/orgs/query
     * </pre>
-    *
-    * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/orgs/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords orgsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords orgsQuery(String filter);
-   
    /**
     * Retrieves a list of {@link Right}s by using REST API general QueryHandler.
     *
     * <pre>
     * GET /admin/rights/query
     * </pre>
-    *
-    * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/rights/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords rightsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords rightsQuery(String filter);
-   
    /**
     * Retrieves a list of {@link Role}s by using REST API general QueryHandler.
     *
     * <pre>
     * GET /admin/roles/query
     * </pre>
-    *
-    * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/roles/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords rolesQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords rolesQuery(String filter);
-   
    /**
     * Retrieves a list of {@link RoleReference}s by using REST API general QueryHandler.
     *
     * <pre>
     * GET /admin/roles/query?format=references
     * </pre>
-    *
-    * @see #rolesQueryAll(String)
     */
+   @GET
+   @Path("/admin/roles/query")
+   @Consumes
+   @QueryParams(keys = { "format" }, values = { "references" })
+   @JAXBResponseParser
    RoleReferences roleReferencesQueryAll();
-   
+
    /**
     * Retrieves a list of {@link User}s by using REST API general QueryHandler.
     *
     * <pre>
     * GET /admin/strandedUsers/query
     * </pre>
-    *
-    * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/strandedUsers/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords strandedUsersQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords strandedUsersQuery(String filter);
-   
    /**
     * Retrieves a list of {@link User}s by using REST API general QueryHandler.
     *
@@ -117,11 +120,12 @@ public interface AdminQueryApi extends QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/users/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords usersQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords usersQuery(String filter);
-   
    /**
     * Retrieves a list of {@link Vdc}s by using REST API general QueryHandler.
     *
@@ -131,8 +135,9 @@ public interface AdminQueryApi extends QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/admin/vdcs/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords vdcsQueryAll();
-
-   /** @see #queryAll() */
-   QueryResultRecords vdcsQuery(String filter);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
deleted file mode 100644
index 98f6d6d..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminQueryAsyncApi.java
+++ /dev/null
@@ -1,132 +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.features.admin;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.QueryParam;
-
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.RoleReferences;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
-import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides asynchronous access to {@link AdminQuery} objects.
- * 
- * @see AdminQueryApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface AdminQueryAsyncApi extends QueryAsyncApi {
-   
-   @GET
-   @Path("/admin/groups/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> groupsQueryAll();
-
-   @GET
-   @Path("/admin/groups/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> groupsQuery(@QueryParam("filter") String filter);
-
-   @GET
-   @Path("/admin/orgs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> orgsQueryAll();
-
-   @GET
-   @Path("/admin/orgs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> orgsQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/admin/rights/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> rightsQueryAll();
-
-   @GET
-   @Path("/admin/rights/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> rightsQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/admin/roles/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> rolesQueryAll();
-
-   @GET
-   @Path("/admin/roles/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> rolesQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/admin/roles/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<RoleReferences> roleReferencesQueryAll();
-   
-   @GET
-   @Path("/admin/strandedUsers/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> strandedUsersQueryAll();
-
-   @GET
-   @Path("/admin/strandedUsers/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> strandedUsersQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/admin/users/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> usersQueryAll();
-
-   @GET
-   @Path("/admin/users/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> usersQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/admin/vdcs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vdcsQueryAll();
-
-   @GET
-   @Path("/admin/vdcs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vdcsQuery(@QueryParam("filter") String filter);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
index efa3795..ae18e8f 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcApi.java
@@ -16,17 +16,30 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.features.VdcApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
 
-/**
- * Provides synchronous access to {@link AdminVdc}.
- * 
- * @see AdminVdcAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminVdcApi extends VdcApi {
 
    /**
@@ -39,42 +52,80 @@ public interface AdminVdcApi extends VdcApi {
     * @return the admin vDC or null if not found
     */
    @Override
-   AdminVdc get(String vdcUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminVdc get(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
 
    @Override
-   AdminVdc get(URI vdcAdminHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminVdc get(@EndpointParam URI vdcAdminHref);
 
    /**
     * Modifies a Virtual Data Center. Virtual Data Center could be enabled or disabled. 
     * Additionally it could have one of these states FAILED_CREATION(-1), NOT_READY(0), 
     * READY(1), UNKNOWN(1) and UNRECOGNIZED(3).
     */
-   Task edit(String vdcUrn, AdminVdc vdc);
-   
-   Task edit(URI vdcAdminHref, AdminVdc vdc);
+   @PUT
+   @Consumes
+   @Produces(VCloudDirectorMediaType.ADMIN_VDC)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn, AdminVdc vdc);
+
+   @PUT
+   @Consumes
+   @Produces(VCloudDirectorMediaType.ADMIN_VDC)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI vdcAdminHref, AdminVdc vdc);
 
    /**
     * Deletes a Virtual Data Center. The Virtual Data Center should be disabled when remove is issued. 
     * Otherwise error code 400 Bad Request is returned.
     */
    // TODO Saw what exception, instead of 400 
-   Task remove(String vdcUrn);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   Task remove(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
 
-   Task remove(URI vdcAdminHref);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   Task remove(@EndpointParam URI vdcAdminHref);
 
    /**
     * Enables a Virtual Data Center. This operation enables disabled Virtual Data Center. 
     * If it is already enabled this operation has no effect.
     */
-   void enable(String vdcUrn);
-   
-   void enable(URI vdcAdminHref);
+   @POST
+   @Consumes
+   @Path("/action/enable")
+   @JAXBResponseParser
+   void enable(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
+
+   @POST
+   @Consumes
+   @Path("/action/enable")
+   @JAXBResponseParser
+   void enable(@EndpointParam URI vdcAdminHref);
 
    /**
     * Disables a Virtual Data Center. If the Virtual Data Center is disabled this operation does not 
     * have an effect.
     */
-   void disable(String vdcUrn);
+   @POST
+   @Consumes
+   @Path("/action/disable")
+   @JAXBResponseParser
+   void disable(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
 
-   void disable(URI vdcAdminHref);
+   @POST
+   @Consumes
+   @Path("/action/disable")
+   @JAXBResponseParser
+   void disable(@EndpointParam URI vdcAdminHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
deleted file mode 100644
index 74ac1d9..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminVdcAsyncApi.java
+++ /dev/null
@@ -1,137 +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.features.admin;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.AdminVdc;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see AdminVdcApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface AdminVdcAsyncApi extends VdcAsyncApi {
-   /**
-    * @see AdminVdcApi#get(String)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminVdc> get(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
-
-   /**
-    * @see AdminVdcApi#edit(String, AdminVdc)
-    */
-   @PUT
-   @Consumes
-   @Produces(VCloudDirectorMediaType.ADMIN_VDC)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn, AdminVdc vdc);
-
-   /**
-    * @see AdminVdcApi#remove(String)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
-
-   /**
-    * @see AdminVdcApi#enable(String)
-    */
-   @POST
-   @Consumes
-   @Path("/action/enable")
-   @JAXBResponseParser
-   ListenableFuture<Void> enable(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
-
-   /**
-    * @see AdminVdcApi#disable(String)
-    */
-   @POST
-   @Consumes
-   @Path("/action/disable")
-   @JAXBResponseParser
-   ListenableFuture<Void> disable(@EndpointParam(parser = URNToAdminHref.class) String vdcUrn);
-
-   /**
-    * @see AdminVdcApi#get(URI)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminVdc> get(@EndpointParam URI vdcAdminHref);
-
-   /**
-    * @see AdminVdcApi#edit(URI, AdminVdc)
-    */
-   @PUT
-   @Consumes
-   @Produces(VCloudDirectorMediaType.ADMIN_VDC)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI vdcAdminHref, AdminVdc vdc);
-
-   /**
-    * @see AdminVdcApi#remove(URI)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam URI vdcAdminHref);
-
-   /**
-    * @see AdminVdcApi#enable(URI)
-    */
-   @POST
-   @Consumes
-   @Path("/action/enable")
-   @JAXBResponseParser
-   ListenableFuture<Void> enable(@EndpointParam URI vdcAdminHref);
-
-   /**
-    * @see AdminVdcApi#disable(URI)
-    */
-   @POST
-   @Consumes
-   @Path("/action/disable")
-   @JAXBResponseParser
-   ListenableFuture<Void> disable(@EndpointParam URI vdcAdminHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
index 36292ed..892ff08 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupApi.java
@@ -16,14 +16,31 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GROUP;
+
 import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Group;
+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;
 
-/**
- * Provides synchronous access to {@link Group} objects.
- * 
- * @see GroupAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface GroupApi {
    
    /**
@@ -33,12 +50,23 @@ public interface GroupApi {
     * POST /admin/org/{id}/groups
     * </pre>
     *
-    * @param orgUrn the admin org to add the group in
-    * @return the addd group
+    * @param adminUrn the admin org to add the group in
+    * @return the added group
     */
-   Group addGroupToOrg(Group group, String orgUrn);
-   
-   Group addGroupToOrg(Group group, URI orgHref);
+   @POST
+   @Path("/groups")
+   @Consumes(GROUP)
+   @Produces(GROUP)
+   @JAXBResponseParser
+   Group addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group,
+         @EndpointParam(parser = URNToAdminHref.class) String adminUrn);
+
+   @POST
+   @Path("/groups")
+   @Consumes(GROUP)
+   @Produces(GROUP)
+   @JAXBResponseParser
+   Group addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group, @EndpointParam URI adminUrn);
 
    /**
     * Retrieves a group.
@@ -47,12 +75,20 @@ public interface GroupApi {
     * GET /admin/group/{id}
     * </pre>
     *
-    * @param groupString the reference for the group
+    * @param groupUrn the reference for the group
     * @return a group
     */
-   Group get(String groupUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Group get(@EndpointParam(parser = URNToHref.class) String groupUrn);
 
-   Group get(URI groupHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Group get(@EndpointParam URI groupUri);
 
    /**
     * Modifies a group.
@@ -63,9 +99,18 @@ public interface GroupApi {
     * 
     * @return the edited group
     */
-   Group edit(String groupUrn, Group group);
+   @PUT
+   @Consumes(GROUP)
+   @Produces(GROUP)
+   @JAXBResponseParser
+   Group edit(@EndpointParam(parser = URNToHref.class) String groupUrn,
+         @BinderParam(BindToXMLPayload.class) Group group);
 
-   Group edit(URI groupHref, Group group);
+   @PUT
+   @Consumes(GROUP)
+   @Produces(GROUP)
+   @JAXBResponseParser
+   Group edit(@EndpointParam URI groupUrn, @BinderParam(BindToXMLPayload.class) Group group);
 
    /**
     * Deletes a group.
@@ -74,8 +119,13 @@ public interface GroupApi {
     * DELETE /admin/group/{id}
     * </pre>
     */
-   void remove(String groupUrn);
-
-   void remove(URI groupHref);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam(parser = URNToHref.class) String groupUrn);
 
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam URI groupUrn);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
deleted file mode 100644
index 49830ba..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/GroupAsyncApi.java
+++ /dev/null
@@ -1,123 +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.features.admin;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Group;
-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;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see GroupApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface GroupAsyncApi {
-
-   /**
-    * @see GroupApi#addGroupToOrg(Group, String)
-    */
-   @POST
-   @Path("/groups")
-   @Consumes(VCloudDirectorMediaType.GROUP)
-   @Produces(VCloudDirectorMediaType.GROUP)
-   @JAXBResponseParser
-   ListenableFuture<Group> addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group,
-            @EndpointParam(parser = URNToAdminHref.class) String adminUrn);
-
-   /**
-    * @see GroupApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Group> get(@EndpointParam(parser = URNToHref.class) String groupUri);
-
-   /**
-    * @see GroupApi#edit(String, Group)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.GROUP)
-   @Produces(VCloudDirectorMediaType.GROUP)
-   @JAXBResponseParser
-   ListenableFuture<Group> edit(@EndpointParam(parser = URNToHref.class) String groupUrn,
-            @BinderParam(BindToXMLPayload.class) Group group);
-
-   /**
-    * @see GroupApi#remove(String)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam(parser = URNToHref.class) String groupUrn);
-
-   /**
-    * @see GroupApi#addGroupToOrg(Group, URI)
-    */
-   @POST
-   @Path("/groups")
-   @Consumes(VCloudDirectorMediaType.GROUP)
-   @Produces(VCloudDirectorMediaType.GROUP)
-   @JAXBResponseParser
-   ListenableFuture<Group> addGroupToOrg(@BinderParam(BindToXMLPayload.class) Group group, @EndpointParam URI adminUrn);
-
-   /**
-    * @see GroupApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Group> get(@EndpointParam URI groupUri);
-
-   /**
-    * @see GroupApi#edit(URI, Group)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.GROUP)
-   @Produces(VCloudDirectorMediaType.GROUP)
-   @JAXBResponseParser
-   ListenableFuture<Group> edit(@EndpointParam URI groupUrn, @BinderParam(BindToXMLPayload.class) Group group);
-
-   /**
-    * @see GroupApi#remove(URI)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam URI groupUrn);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/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 63cec6c..fc5a583 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
@@ -16,14 +16,31 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.USER;
+
 import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+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;
 
-/**
- * Provides synchronous access to {@link User} objects.
- * 
- * @see UserAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface UserApi {
 
    /**
@@ -37,9 +54,19 @@ public interface UserApi {
     *           the urn for the org
     * @return the addd user
     */
-   User addUserToOrg(User user, String orgUrn);
+   @POST
+   @Path("/users")
+   @Consumes(USER)
+   @Produces(USER)
+   @JAXBResponseParser User addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
+         @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   User addUserToOrg(User user, URI orgAdminHref);
+   @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.
@@ -52,9 +79,17 @@ public interface UserApi {
     *           the reference for the user
     * @return a user
     */
-   User get(String userUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   User get(@EndpointParam(parser = URNToHref.class) String userUrn);
 
-   User get(URI userHref);
+   @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
@@ -68,9 +103,17 @@ public interface UserApi {
     *           the reference for the user
     * @return the modified user
     */
-   User edit(String userUrn, User user);
-   
-   User edit(URI userHref, User user);
+   @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.
@@ -79,9 +122,15 @@ public interface UserApi {
     * DELETE /admin/catalog/{id}
     * </pre>
     */
-   void remove(String userUrn);
-   
-   void remove(URI userHref);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam(parser = URNToHref.class) String userUrn);
+
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam URI userHref);
 
    /**
     * Unlocks a user.
@@ -90,7 +139,15 @@ public interface UserApi {
     * POST /admin/user/{id}/action/unlock
     * </pre>
     */
-   void unlock(String userUrn);
+   @POST
+   @Path("/action/unlock")
+   @Consumes
+   @JAXBResponseParser
+   void unlock(@EndpointParam(parser = URNToHref.class) String userUrn);
 
-   void unlock(URI userHref);
+   @POST
+   @Path("/action/unlock")
+   @Consumes
+   @JAXBResponseParser
+   void unlock(@EndpointParam URI userHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
deleted file mode 100644
index b66026a..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/UserAsyncApi.java
+++ /dev/null
@@ -1,142 +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.features.admin;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-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;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see UserApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface UserAsyncApi {
-
-   /**
-    * @see UserApi#addUserToOrg(User, String)
-    */
-   @POST
-   @Path("/users")
-   @Consumes(VCloudDirectorMediaType.USER)
-   @Produces(VCloudDirectorMediaType.USER)
-   @JAXBResponseParser
-   ListenableFuture<User> addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see UserApi#addUserToOrg(User, URI)
-    */
-   @POST
-   @Path("/users")
-   @Consumes(VCloudDirectorMediaType.USER)
-   @Produces(VCloudDirectorMediaType.USER)
-   @JAXBResponseParser
-   ListenableFuture<User> addUserToOrg(@BinderParam(BindToXMLPayload.class) User user,
-            @EndpointParam URI orgAdminHref);
-
-   /**
-    * @see UserApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<User> get(@EndpointParam(parser = URNToHref.class) String userUrn);
-
-   /**
-    * @see UserApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<User> get(@EndpointParam URI userHref);
-
-   /**
-    * @see UserApi#edit(String, User)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.USER)
-   @Produces(VCloudDirectorMediaType.USER)
-   @JAXBResponseParser
-   ListenableFuture<User> edit(@EndpointParam(parser = URNToHref.class) String userUrn,
-            @BinderParam(BindToXMLPayload.class) User user);
-
-   /**
-    * @see UserApi#edit(URI, User)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.USER)
-   @Produces(VCloudDirectorMediaType.USER)
-   @JAXBResponseParser
-   ListenableFuture<User> edit(@EndpointParam URI userHref, @BinderParam(BindToXMLPayload.class) User user);
-
-   /**
-    * @see UserApi#remove(String)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam(parser = URNToHref.class) String userUrn);
-
-   /**
-    * @see UserApi#remove(URI)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam URI userHref);
-
-   /**
-    * @see UserApi#unlock(String)
-    */
-   @POST
-   @Path("/action/unlock")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> unlock(@EndpointParam(parser = URNToHref.class) String userUrn);
-
-   /**
-    * @see UserApi#unlock(URI)
-    */
-   @POST
-   @Path("/action/unlock")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> unlock(@EndpointParam URI userHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/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 54717f3..a417597 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
@@ -24,35 +24,31 @@ import org.jclouds.domain.Credentials;
 import org.jclouds.lifecycle.Closer;
 import org.jclouds.location.Provider;
 import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.rest.RestContext;
+import org.jclouds.rest.ApiContext;
 import org.jclouds.rest.Utils;
-import org.jclouds.rest.internal.RestContextImpl;
+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.admin.VCloudDirectorAdminAsyncApi;
 import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
 
 import com.google.common.base.Supplier;
 import com.google.inject.Injector;
 import com.google.inject.TypeLiteral;
 
 @Singleton
-public class VCloudDirectorContextImpl extends RestContextImpl<VCloudDirectorApi, VCloudDirectorAsyncApi> implements
-      VCloudDirectorContext {
-   private final RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext;
+public class VCloudDirectorContextImpl extends ApiContextImpl<VCloudDirectorApi> implements VCloudDirectorContext {
+   private final ApiContext<VCloudDirectorAdminApi> adminContext;
 
    @Inject
    VCloudDirectorContextImpl(@Name String name, ProviderMetadata providerMetadata,
          @Provider Supplier<Credentials> creds, Utils utils, Closer closer, Injector injector,
-         RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext) {
-      super(name, providerMetadata, creds, utils, closer, injector, TypeLiteral.get(VCloudDirectorApi.class),
-            TypeLiteral.get(VCloudDirectorAsyncApi.class));
+         ApiContext<VCloudDirectorAdminApi> adminContext) {
+      super(name, providerMetadata, creds, utils, closer, injector, TypeLiteral.get(VCloudDirectorApi.class));
       this.adminContext = adminContext;
    }
    
    @Override
-   public RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> getAdminContext() {
+   public ApiContext<VCloudDirectorAdminApi> getAdminContext() {
       return adminContext;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionApi.java
index 4d03f84..272789b 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionApi.java
@@ -17,29 +17,42 @@
 package org.jclouds.vcloud.director.v1_5.login;
 
 import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.vcloud.director.v1_5.binders.BindUserOrgAndPasswordAsBasicAuthorizationHeader;
 import org.jclouds.vcloud.director.v1_5.domain.Session;
 import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
+import org.jclouds.vcloud.director.v1_5.parsers.SessionWithTokenFromXMLAndHeader;
 
-/**
- * Provides synchronous access to Session.
- * <p/>
- * 
- * @see SessionAsyncApi
- */
 public interface SessionApi {
 
-   /**
-    * TODO
-    */
-   SessionWithToken loginUserInOrgWithPassword(URI loginUrl, String user, String org, String password);
+   @POST
+   @Consumes
+   @ResponseParser(SessionWithTokenFromXMLAndHeader.class)
+   @MapBinder(BindUserOrgAndPasswordAsBasicAuthorizationHeader.class)
+   SessionWithToken loginUserInOrgWithPassword(@EndpointParam URI loginUrl,
+         @PayloadParam("user") String user, @PayloadParam("org") String org,
+         @PayloadParam("password") String password);
 
-   /**
-    * TODO
-    */
-   Session getSessionWithToken(URI session, String authenticationToken);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   Session getSessionWithToken(@EndpointParam URI session,
+         @HeaderParam("x-vcloud-authorization") String authenticationToken);
 
-   /**
-    * TODO
-    */
-   void logoutSessionWithToken(URI session, String authenticationToken);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void logoutSessionWithToken(@EndpointParam URI session,
+         @HeaderParam("x-vcloud-authorization") String authenticationToken);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionAsyncApi.java
deleted file mode 100644
index fa9b487..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/login/SessionAsyncApi.java
+++ /dev/null
@@ -1,75 +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.login;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.vcloud.director.v1_5.binders.BindUserOrgAndPasswordAsBasicAuthorizationHeader;
-import org.jclouds.vcloud.director.v1_5.domain.Session;
-import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
-import org.jclouds.vcloud.director.v1_5.parsers.SessionWithTokenFromXMLAndHeader;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides asynchronous access to Session via their REST API.
- * <p/>
- * 
- * @see SessionApi
- */
-public interface SessionAsyncApi {
-
-   /**
-    * @see SessionApi#loginUserInOrgWithPassword
-    */
-   @POST
-   @Consumes
-   @ResponseParser(SessionWithTokenFromXMLAndHeader.class)
-   @MapBinder(BindUserOrgAndPasswordAsBasicAuthorizationHeader.class)
-   ListenableFuture<SessionWithToken> loginUserInOrgWithPassword(@EndpointParam URI loginUrl,
-            @PayloadParam("user") String user, @PayloadParam("org") String org,
-            @PayloadParam("password") String password);
-
-   /**
-    * @see SessionApi#getSessionWithToken
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Session> getSessionWithToken(@EndpointParam URI session,
-            @HeaderParam("x-vcloud-authorization") String authenticationToken);
-
-   /**
-    * @see SessionApi#logoutSessionWithToken
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> logoutSessionWithToken(@EndpointParam URI session,
-            @HeaderParam("x-vcloud-authorization") String authenticationToken);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/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 ba9e856..a4f98d9 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
@@ -16,10 +16,21 @@
  */
 package org.jclouds.vcloud.director.v1_5.user;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+
+import java.io.Closeable;
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
 import org.jclouds.rest.annotations.Delegate;
 import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.Entity;
 import org.jclouds.vcloud.director.v1_5.domain.Session;
 import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
@@ -34,16 +45,13 @@ import org.jclouds.vcloud.director.v1_5.features.VAppApi;
 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;
 
-/**
- * Provides synchronous access to VCloudDirector.
- * 
- * @see VCloudDirectorAsyncApi
- */
-public interface VCloudDirectorApi {
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface VCloudDirectorApi extends Closeable {
 
    /**
     * Redirects to the URL of an entity with the given VCD ID.
@@ -52,7 +60,12 @@ public interface VCloudDirectorApi {
     * GET /entity/{id}
     * </pre>
     */
-   Entity resolveEntity(String urn);
+   @GET
+   @Path("/entity/{id}")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Entity resolveEntity(@PathParam("id") String id);
    
    /**
     * @return the current login session
@@ -61,7 +74,7 @@ public interface VCloudDirectorApi {
    Session getCurrentSession();
 
    /**
-    * @return asynchronous access to query features
+    * @return synchronous access to query features
     */
    @Delegate
    QueryApi getQueryApi();

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
deleted file mode 100644
index 70fc600..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/user/VCloudDirectorAsyncApi.java
+++ /dev/null
@@ -1,150 +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.user;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.Delegate;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
-import org.jclouds.vcloud.director.v1_5.domain.Session;
-import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.TaskAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.UploadAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.inject.Provides;
-
-/**
- * Provides asynchronous access to VCloudDirector via their REST API.
- * 
- * @see VCloudDirectorApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VCloudDirectorAsyncApi {
-
-   /**
-    * @see VCloudDirectorApi#resolveEntity(String)
-    */
-   @GET
-   @Path("/entity/{id}")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Entity> resolveEntity(@PathParam("id") String id);
-
-   /**
-    * 
-    * @return the current login session
-    */
-   @Provides
-   Session getCurrentSession();
-
-   /**
-    * @return asynchronous access to query features
-    */
-   @Delegate
-   QueryAsyncApi getQueryApi();
-
-   /**
-    * @return asynchronous access to {@link Org} features
-    */
-   @Delegate
-   OrgAsyncApi getOrgApi();
-
-   /**
-    * @return asynchronous access to {@link Task} features
-    */
-   @Delegate
-   TaskAsyncApi getTaskApi();
-
-   /**
-    * @return asynchronous access to {@link Network} features
-    */
-   @Delegate
-   NetworkAsyncApi getNetworkApi();
-
-   /**
-    * @return asynchronous access to {@link Catalog} features
-    */
-   @Delegate
-   CatalogAsyncApi getCatalogApi();
-
-   /**
-    * @return asynchronous access to {@link Media} features
-    */
-   @Delegate
-   CatalogAsyncApi getMediaApi();
-
-   /**
-    * @return asynchronous access to {@link Vdc} features
-    */
-   @Delegate
-   VdcAsyncApi getVdcApi();
-
-   /**
-    * @return asynchronous access to Upload features
-    */
-   @Delegate
-   UploadAsyncApi getUploadApi();
-
-   /**
-    * @return asynchronous access to {@link VApp} features
-    */
-   @Delegate
-   VAppAsyncApi getVAppApi();
-
-   /**
-    * @return asynchronous access to {@link VAppTemplate} features
-    */
-   @Delegate
-   VAppTemplateAsyncApi getVAppTemplateApi();
-
-   /**
-    * @return asynchronous access to {@link Vm} features
-    */
-   @Delegate
-   VmAsyncApi getVmApi();
-   
-   /**
-    * @return asynchronous access to {@link Metadata} features
-    */
-   @Delegate
-   MetadataAsyncApi getMetadataApi(@EndpointParam(parser = URNToHref.class) String urn);
-
-   @Delegate
-   MetadataAsyncApi getMetadataApi(@EndpointParam URI href);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadataTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadataTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadataTest.java
index 7d03e12..201b1db 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadataTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadataTest.java
@@ -17,7 +17,7 @@
 package org.jclouds.vcloud.director.v1_5;
 
 import org.jclouds.View;
-import org.jclouds.rest.internal.BaseRestApiMetadataTest;
+import org.jclouds.apis.internal.BaseApiMetadataTest;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -25,7 +25,7 @@ import com.google.common.reflect.TypeToken;
 
 @Test(groups = "unit", testName = "VCloudDirectorApiMetadataTest")
 //TODO: BaseComputeServiceApiMetadataTest
-public class VCloudDirectorApiMetadataTest extends BaseRestApiMetadataTest {
+public class VCloudDirectorApiMetadataTest extends BaseApiMetadataTest {
 
    public VCloudDirectorApiMetadataTest() {
       super(new VCloudDirectorApiMetadata(), ImmutableSet.<TypeToken<? extends View>>of());

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
index d522bea..b3576ad 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorApiLiveTest.java
@@ -55,13 +55,11 @@ import org.jclouds.apis.BaseContextLiveTest;
 import org.jclouds.date.DateService;
 import org.jclouds.io.Payloads;
 import org.jclouds.logging.Logger;
-import org.jclouds.rest.RestContext;
+import org.jclouds.rest.ApiContext;
 import org.jclouds.vcloud.director.testng.FormatApiResultsListener;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorApiMetadata;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorContext;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
 import org.jclouds.vcloud.director.v1_5.domain.Catalog;
 import org.jclouds.vcloud.director.v1_5.domain.Checks;
 import org.jclouds.vcloud.director.v1_5.domain.Link;
@@ -130,7 +128,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
    public Predicate<Task> retryTaskSuccess;
    public Predicate<Task> retryTaskSuccessLong;
 
-   protected RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext;
+   protected ApiContext<VCloudDirectorAdminApi> adminContext;
 
    protected Session adminSession;
    protected Session session;
@@ -207,8 +205,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
       return getRoleReferenceFor(name, adminContext);
    }
 
-   public static Reference getRoleReferenceFor(String name,
-            RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> adminContext) {
+   public static Reference getRoleReferenceFor(String name, ApiContext<VCloudDirectorAdminApi> adminContext) {
       RoleReferences roles = adminContext.getApi().getQueryApi().roleReferencesQueryAll();
       // backend in a builder to strip out unwanted xml cruft that the api chokes on
       return Reference.builder().fromReference(find(roles.getReferences(), ReferencePredicates.nameEquals(name)))
@@ -739,7 +736,7 @@ public abstract class BaseVCloudDirectorApiLiveTest extends BaseContextLiveTest<
 
    @Override
    protected TypeToken<VCloudDirectorContext> contextType() {
-      return VCloudDirectorApiMetadata.CONTEXT_TOKEN;
+      return TypeToken.of(VCloudDirectorContext.class);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestApiExpectTest.java
deleted file mode 100644
index 9104486..0000000
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestApiExpectTest.java
+++ /dev/null
@@ -1,23 +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.internal;
-
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
-
-public abstract class BaseVCloudDirectorRestApiExpectTest extends BaseVCloudDirectorExpectTest<VCloudDirectorApi> {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiExpectTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiExpectTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiExpectTest.java
index b59441f..183e8cc 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiExpectTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiExpectTest.java
@@ -20,10 +20,10 @@ import static org.testng.Assert.assertEquals;
 
 import java.net.URI;
 
-import org.jclouds.apis.ApiMetadata;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
-import org.jclouds.rest.AnonymousRestApiMetadata;
+import org.jclouds.providers.AnonymousProviderMetadata;
+import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.rest.internal.BaseRestApiExpectTest;
 import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.Link;
@@ -119,8 +119,7 @@ public class SessionApiExpectTest extends BaseRestApiExpectTest<SessionApi> {
    }
    
    @Override
-   protected ApiMetadata createApiMetadata() {
-      return AnonymousRestApiMetadata.forClientMappedToAsyncClient(SessionApi.class, SessionAsyncApi.class)
-            .toBuilder().defaultEndpoint("https://vcloudbeta.bluelock.com/api").build();
+   protected ProviderMetadata createProviderMetadata() {
+      return AnonymousProviderMetadata.forApiOnEndpoint(SessionApi.class, "https://vcloudbeta.bluelock.com/api");
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
index 761012b..e59757d 100644
--- a/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
+++ b/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/login/SessionApiLiveTest.java
@@ -26,9 +26,8 @@ import org.jclouds.ContextBuilder;
 import org.jclouds.apis.BaseContextLiveTest;
 import org.jclouds.providers.AnonymousProviderMetadata;
 import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.rest.RestContext;
+import org.jclouds.rest.ApiContext;
 import org.jclouds.vcloud.director.testng.FormatApiResultsListener;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants;
 import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
 import org.testng.annotations.BeforeGroups;
 import org.testng.annotations.Listeners;
@@ -42,7 +41,7 @@ import com.google.common.reflect.TypeToken;
  */
 @Listeners(FormatApiResultsListener.class)
 @Test(groups = { "live", "user" }, testName = "SessionApiLiveTest")
-public class SessionApiLiveTest extends BaseContextLiveTest<RestContext<SessionApi, SessionAsyncApi>> {
+public class SessionApiLiveTest extends BaseContextLiveTest<ApiContext<SessionApi>> {
 
    public SessionApiLiveTest() {
       provider = "vcloud-director";
@@ -84,13 +83,14 @@ public class SessionApiLiveTest extends BaseContextLiveTest<RestContext<SessionA
    }
 
    @Override
-   protected TypeToken<RestContext<SessionApi, SessionAsyncApi>> contextType() {
-      return VCloudDirectorConstants.SESSION_CONTEXT_TYPE;
+   protected TypeToken<ApiContext<SessionApi>> contextType() {
+      return new TypeToken<ApiContext<SessionApi>>() {
+      };
    }
 
    @Override
    protected ProviderMetadata createProviderMetadata() {
-      return AnonymousProviderMetadata.forClientMappedToAsyncClientOnEndpoint(SessionApi.class, SessionAsyncApi.class, endpoint);
+      return AnonymousProviderMetadata.forApiOnEndpoint(SessionApi.class, endpoint);
    }
 
    @Override


[5/5] git commit: JCLOUDS-40 unasync vcloud-director

Posted by ad...@apache.org.
JCLOUDS-40 unasync vcloud-director


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/d7bc430c
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/d7bc430c
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/d7bc430c

Branch: refs/heads/master
Commit: d7bc430c6d8d66f0c91818f074bef6bba8846b8d
Parents: 0cbcf18
Author: Adrian Cole <ac...@twitter.com>
Authored: Sun Oct 5 12:53:06 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Sun Oct 5 13:15:09 2014 -0700

----------------------------------------------------------------------
 .../v1_5/VCloudDirectorApiMetadata.java         |  22 +-
 .../director/v1_5/VCloudDirectorConstants.java  |  34 -
 .../director/v1_5/VCloudDirectorContext.java    |  10 +-
 .../v1_5/admin/VCloudDirectorAdminApi.java      |   8 +-
 .../v1_5/admin/VCloudDirectorAdminAsyncApi.java | 101 --
 .../config/VCloudDirectorHttpApiModule.java     | 158 +++
 .../config/VCloudDirectorRestClientModule.java  | 232 -----
 .../director/v1_5/features/CatalogApi.java      | 102 +-
 .../director/v1_5/features/CatalogAsyncApi.java | 143 ---
 .../vcloud/director/v1_5/features/MediaApi.java |  99 +-
 .../director/v1_5/features/MediaAsyncApi.java   | 155 ---
 .../director/v1_5/features/MetadataApi.java     |  63 +-
 .../v1_5/features/MetadataAsyncApi.java         | 102 --
 .../director/v1_5/features/NetworkApi.java      |  29 +-
 .../director/v1_5/features/NetworkAsyncApi.java |  58 --
 .../vcloud/director/v1_5/features/OrgApi.java   |  34 +-
 .../director/v1_5/features/OrgAsyncApi.java     |  69 --
 .../vcloud/director/v1_5/features/QueryApi.java | 143 +--
 .../director/v1_5/features/QueryAsyncApi.java   | 192 ----
 .../vcloud/director/v1_5/features/TaskApi.java  |  53 +-
 .../director/v1_5/features/TaskAsyncApi.java    |  88 --
 .../director/v1_5/features/UploadApi.java       |  18 +-
 .../director/v1_5/features/UploadAsyncApi.java  |  41 -
 .../vcloud/director/v1_5/features/VAppApi.java  | 778 +++++++++++----
 .../director/v1_5/features/VAppAsyncApi.java    | 624 ------------
 .../director/v1_5/features/VAppTemplateApi.java | 268 ++++-
 .../v1_5/features/VAppTemplateAsyncApi.java     | 363 -------
 .../vcloud/director/v1_5/features/VdcApi.java   | 187 +++-
 .../director/v1_5/features/VdcAsyncApi.java     | 252 -----
 .../vcloud/director/v1_5/features/VmApi.java    | 747 +++++++++++---
 .../director/v1_5/features/VmAsyncApi.java      | 974 -------------------
 .../v1_5/features/admin/AdminCatalogApi.java    | 162 ++-
 .../features/admin/AdminCatalogAsyncApi.java    | 238 -----
 .../v1_5/features/admin/AdminNetworkApi.java    |  65 +-
 .../features/admin/AdminNetworkAsyncApi.java    | 108 --
 .../v1_5/features/admin/AdminOrgApi.java        | 247 ++++-
 .../v1_5/features/admin/AdminOrgAsyncApi.java   | 355 -------
 .../v1_5/features/admin/AdminQueryApi.java      |  89 +-
 .../v1_5/features/admin/AdminQueryAsyncApi.java | 132 ---
 .../v1_5/features/admin/AdminVdcApi.java        |  85 +-
 .../v1_5/features/admin/AdminVdcAsyncApi.java   | 137 ---
 .../director/v1_5/features/admin/GroupApi.java  |  86 +-
 .../v1_5/features/admin/GroupAsyncApi.java      | 123 ---
 .../director/v1_5/features/admin/UserApi.java   |  91 +-
 .../v1_5/features/admin/UserAsyncApi.java       | 142 ---
 .../internal/VCloudDirectorContextImpl.java     |  18 +-
 .../vcloud/director/v1_5/login/SessionApi.java  |  49 +-
 .../director/v1_5/login/SessionAsyncApi.java    |  75 --
 .../director/v1_5/user/VCloudDirectorApi.java   |  29 +-
 .../v1_5/user/VCloudDirectorAsyncApi.java       | 150 ---
 .../v1_5/VCloudDirectorApiMetadataTest.java     |   4 +-
 .../internal/BaseVCloudDirectorApiLiveTest.java |  11 +-
 .../BaseVCloudDirectorRestApiExpectTest.java    |  23 -
 .../v1_5/login/SessionApiExpectTest.java        |   9 +-
 .../director/v1_5/login/SessionApiLiveTest.java |  12 +-
 55 files changed, 2834 insertions(+), 5753 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java
index bf8ce70..d1759a5 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java
@@ -26,20 +26,12 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.PROPERTY_
 import java.net.URI;
 import java.util.Properties;
 
-import org.jclouds.rest.internal.BaseRestApiMetadata;
-import org.jclouds.vcloud.director.v1_5.config.VCloudDirectorRestClientModule;
+import org.jclouds.rest.internal.BaseHttpApiMetadata;
+import org.jclouds.vcloud.director.v1_5.config.VCloudDirectorHttpApiModule;
 import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
 
-import com.google.common.reflect.TypeToken;
+public class VCloudDirectorApiMetadata extends BaseHttpApiMetadata {
 
-/**
- * Implementation of {@link ApiMetadata} for VCloudDirector 1.5 API
- */
-public class VCloudDirectorApiMetadata extends BaseRestApiMetadata {
-
-   public static final TypeToken<VCloudDirectorContext> CONTEXT_TOKEN = typeToken(VCloudDirectorContext.class);
-   
    @Override
    public Builder toBuilder() {
       return new Builder().fromApiMetadata(this);
@@ -54,7 +46,7 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata {
    }
 
    public static Properties defaultProperties() {
-      Properties properties = BaseRestApiMetadata.defaultProperties();
+      Properties properties = BaseHttpApiMetadata.defaultProperties();
       /** FIXME this should not be the default */
       properties.setProperty(PROPERTY_SESSION_INTERVAL, Integer.toString(30 * 60));
 
@@ -70,10 +62,10 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata {
       return properties;
    }
 
-   public static class Builder extends BaseRestApiMetadata.Builder<Builder> {
+   public static class Builder extends BaseHttpApiMetadata.Builder<VCloudDirectorApi, Builder> {
 
       protected Builder() {
-         super(VCloudDirectorApi.class, VCloudDirectorAsyncApi.class);
+         super(VCloudDirectorApi.class);
           id("vcloud-director")
          .name("vCloud Director 1.5 API")
          .identityName("User at Organization (user@org)")
@@ -82,7 +74,7 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata {
          .version("1.5")
          .defaultProperties(VCloudDirectorApiMetadata.defaultProperties())
          .context(typeToken(VCloudDirectorContext.class))
-         .defaultModule(VCloudDirectorRestClientModule.class);
+         .defaultModule(VCloudDirectorHttpApiModule.class);
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java
index df72510..a8bb741 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java
@@ -16,12 +16,6 @@
  */
 package org.jclouds.vcloud.director.v1_5;
 
-import org.jclouds.rest.RestContext;
-import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi;
-import org.jclouds.vcloud.director.v1_5.login.SessionApi;
-
-import com.google.common.reflect.TypeToken;
-
 /**
  * Constants used by VCloudDirector apis
  */
@@ -37,40 +31,12 @@ public final class VCloudDirectorConstants {
 
    public static final String PROPERTY_VCLOUD_DIRECTOR_VERSION_SCHEMA = "jclouds.vcloud-director.version.schema";
 
-   /** Name of the default org that your vApp will join, if an org isn't explicitly specified. */
-   public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_ORG = "jclouds.vcloud-director.defaults.org";
-
-   /** Name of the default catalog to query, if it isn't explicitly specified. */
-   public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_CATALOG = "jclouds.vcloud-director.defaults.catalog";
-
-   /** Name of the VDC that your vApp will join, if a vDC isn't explicitly specified. */
-   public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_VDC = "jclouds.vcloud-director.defaults.vdc";
-
-   /** Name of the default network, in the default VDC that your vApp will join. */
-   public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_NETWORK = "jclouds.vcloud-director.defaults.network";
-
-   /** TODO javadoc */
-   // public static final String PROPERTY_VCLOUD_DEFAULT_FENCEMODE = "jclouds.vcloud-director.defaults.fencemode";
-
    /** TODO javadoc */
    public static final String PROPERTY_VCLOUD_DIRECTOR_XML_NAMESPACE = "jclouds.vcloud-director.xml.ns";
    
    /** TODO javadoc */
    public static final String PROPERTY_VCLOUD_DIRECTOR_XML_SCHEMA = "jclouds.vcloud-director.xml.schema";
 
-   // TODO put these somewhere else, maybe core?
-
-   /** TODO javadoc */
-   public static final String PROPERTY_DNS_NAME_LEN_MIN = "jclouds.dns_name_length_min";
-
-   /** TODO javadoc */
-   public static final String PROPERTY_NS_NAME_LEN_MAX = "jclouds.dns_name_length_max";
-
-   /** TODO javadoc */
-   public static final TypeToken<RestContext<SessionApi, SessionAsyncApi>> SESSION_CONTEXT_TYPE =
-         new TypeToken<RestContext<SessionApi, SessionAsyncApi>>() {
-		   };
-
    private VCloudDirectorConstants() {
       throw new AssertionError("intentionally unimplemented");
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java
index ea81039..8718bd2 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java
@@ -16,17 +16,15 @@
  */
 package org.jclouds.vcloud.director.v1_5;
 
-import org.jclouds.rest.RestContext;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
+import org.jclouds.rest.ApiContext;
 import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
 import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorContextImpl;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
 import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
 
 import com.google.inject.ImplementedBy;
 
 @ImplementedBy(VCloudDirectorContextImpl.class)
-public interface VCloudDirectorContext extends RestContext<VCloudDirectorApi, VCloudDirectorAsyncApi> {
-   
-   RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> getAdminContext();
+public interface VCloudDirectorContext extends ApiContext<VCloudDirectorApi> {
+
+   ApiContext<VCloudDirectorAdminApi> getAdminContext();
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java
index bd3e308..96641cc 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java
@@ -20,6 +20,7 @@ import java.net.URI;
 
 import org.jclouds.rest.annotations.Delegate;
 import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
 import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi;
 import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkApi;
@@ -28,14 +29,11 @@ import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryApi;
 import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcApi;
 import org.jclouds.vcloud.director.v1_5.features.admin.GroupApi;
 import org.jclouds.vcloud.director.v1_5.features.admin.UserApi;
+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.user.VCloudDirectorApi;
 
-/**
- * Provides synchronous access to VCloudDirector Admin.
- * 
- * @see VCloudDirectorAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VCloudDirectorAdminApi extends VCloudDirectorApi {
    /**
     * @return asynchronous access to admin query features

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
deleted file mode 100644
index c55c851..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java
+++ /dev/null
@@ -1,101 +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.admin;
-
-import java.net.URI;
-
-import org.jclouds.rest.annotations.Delegate;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi;
-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.user.VCloudDirectorAsyncApi;
-
-/**
- * Provides asynchronous access to VCloudDirector Admin via their REST API.
- * 
- * @see VCloudDirectorAdminApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VCloudDirectorAdminAsyncApi extends VCloudDirectorAsyncApi {
-   /**
-    * @return asynchronous access to admin query features
-    */
-   @Override
-   @Delegate
-   AdminQueryAsyncApi getQueryApi();
-
-   
-   /**
-    * @return asynchronous access to {@link Catalog} admin features
-    */
-   @Override
-   @Delegate
-   AdminCatalogAsyncApi getCatalogApi();
-   
-   /**
-    * @return asynchronous access to admin {@link Group} features
-    */
-   @Delegate
-   GroupAsyncApi getGroupApi();
-   
-   /**
-    * @return asynchronous access to {@link AdminOrg} features
-    */
-   @Override
-   @Delegate
-   AdminOrgAsyncApi getOrgApi();
-   
-   /**
-    * @return asynchronous access to {@link User} features
-    */
-   @Delegate
-   UserAsyncApi getUserApi();
-   
-   /**
-    * @return asynchronous access to {@link AdminVdc} features
-    */
-   @Override
-   @Delegate
-   AdminVdcAsyncApi getVdcApi();
-   
-   /**
-    * @return asynchronous access to admin {@link Network} features
-    */
-   @Override
-   @Delegate
-   AdminNetworkAsyncApi getNetworkApi();
-   
-   /**
-    * @return asynchronous access to {@link Metadata} features
-    */
-   @Override
-   @Delegate
-   MetadataAsyncApi getMetadataApi(@EndpointParam(parser = URNToAdminHref.class) String urn);
-
-   @Override
-   @Delegate
-   MetadataAsyncApi getMetadataApi(@EndpointParam URI href);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java
new file mode 100644
index 0000000..c78d68e
--- /dev/null
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java
@@ -0,0 +1,158 @@
+/*
+ * 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.config;
+
+import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
+import static org.jclouds.rest.config.BinderUtils.bindHttpApi;
+
+import java.net.URI;
+import java.util.concurrent.TimeUnit;
+
+import org.jclouds.domain.Credentials;
+import org.jclouds.http.HttpErrorHandler;
+import org.jclouds.http.HttpRetryHandler;
+import org.jclouds.http.annotation.ClientError;
+import org.jclouds.http.annotation.Redirection;
+import org.jclouds.http.annotation.ServerError;
+import org.jclouds.location.Provider;
+import org.jclouds.rest.ApiContext;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.jclouds.rest.config.HttpApiModule;
+import org.jclouds.rest.internal.ApiContextImpl;
+import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
+import org.jclouds.vcloud.director.v1_5.annotations.Login;
+import org.jclouds.vcloud.director.v1_5.domain.Entity;
+import org.jclouds.vcloud.director.v1_5.domain.Session;
+import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
+import org.jclouds.vcloud.director.v1_5.features.OrgApi;
+import org.jclouds.vcloud.director.v1_5.features.TaskApi;
+import org.jclouds.vcloud.director.v1_5.features.VAppApi;
+import org.jclouds.vcloud.director.v1_5.features.VmApi;
+import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose;
+import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler;
+import org.jclouds.vcloud.director.v1_5.loaders.LoginUserInOrgWithPassword;
+import org.jclouds.vcloud.director.v1_5.loaders.ResolveEntity;
+import org.jclouds.vcloud.director.v1_5.login.SessionApi;
+import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.LoadingCache;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Named;
+
+@ConfiguresHttpApi
+public class VCloudDirectorHttpApiModule extends HttpApiModule<VCloudDirectorApi> {
+   @Override
+   protected void configure() {
+      bind(new TypeLiteral<ApiContext<VCloudDirectorAdminApi>>() {
+      }).to(new TypeLiteral<ApiContextImpl<VCloudDirectorAdminApi>>() {
+      });
+      
+      // Bind apis that are used directly in Functions, Predicates and other circumstances
+      bindHttpApi(binder(), OrgApi.class);
+      bindHttpApi(binder(), SessionApi.class);
+      bindHttpApi(binder(), TaskApi.class);
+      bindHttpApi(binder(), VAppApi.class);
+      bindHttpApi(binder(), VmApi.class);
+      
+      bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(InvalidateSessionAndRetryOn401AndLogoutOnClose.class);
+      
+      super.configure();
+      bindHttpApi(binder(),  VCloudDirectorAdminApi.class);
+   }
+   
+   @Override
+   protected void bindErrorHandlers() {
+      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(VCloudDirectorErrorHandler.class);
+      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(VCloudDirectorErrorHandler.class);
+      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(VCloudDirectorErrorHandler.class);
+   }
+   
+   @Provides
+   @Login
+   protected Supplier<URI> loginUrl(@Provider Supplier<URI> provider) {
+      // TODO: technically, we should implement version api, but this will work
+      return Suppliers.compose(new Function<URI, URI>() {
+         
+         @Override
+         public URI apply(URI arg0) {
+            return URI.create(arg0.toASCIIString() + "/sessions");
+         }
+         
+      }, provider);
+   }
+   
+   @Provides
+   protected Supplier<Session> currentSession(Supplier<SessionWithToken> in) {
+      return Suppliers.compose(new Function<SessionWithToken, Session>() {
+         
+         @Override
+         public Session apply(SessionWithToken arg0) {
+            return arg0.getSession();
+         }
+         
+      }, in);
+      
+   }
+   
+   @Provides
+   @Singleton
+   @org.jclouds.vcloud.director.v1_5.annotations.Session
+   protected Supplier<String> sessionToken(Supplier<SessionWithToken> in) {
+      return Suppliers.compose(new Function<SessionWithToken, String>() {
+         
+         @Override
+         public String apply(SessionWithToken arg0) {
+            return arg0.getToken();
+         }
+         
+      }, in);
+      
+   }
+
+   @Provides
+   @Singleton
+   LoadingCache<String, Entity> resolveEntityCache(ResolveEntity loader, @Named(PROPERTY_SESSION_INTERVAL) int seconds) {
+      return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader);
+   }
+
+   @Provides
+   @Singleton
+   LoadingCache<Credentials, SessionWithToken> provideSessionWithTokenCache(LoginUserInOrgWithPassword loader,
+         @Named(PROPERTY_SESSION_INTERVAL) int seconds) {
+      return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader);
+   }
+   
+   // Temporary conversion of a cache to a supplier until there is a single-element cache
+   // http://code.google.com/p/guava-libraries/issues/detail?id=872
+   @Provides
+   @Singleton
+   protected Supplier<SessionWithToken> provideSessionWithTokenSupplier(
+         final LoadingCache<Credentials, SessionWithToken> cache, @Provider final Supplier<Credentials> creds) {
+      return new Supplier<SessionWithToken>() {
+         @Override
+         public SessionWithToken get() {
+            return cache.getUnchecked(creds.get());
+         }
+      };
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
deleted file mode 100644
index c2447a9..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java
+++ /dev/null
@@ -1,232 +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.config;
-
-import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
-import static org.jclouds.rest.config.BinderUtils.bindSyncToAsyncHttpApi;
-
-import java.net.URI;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import org.jclouds.domain.Credentials;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.HttpRetryHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.location.Provider;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.rest.RestContext;
-import org.jclouds.rest.config.RestClientModule;
-import org.jclouds.rest.internal.RestContextImpl;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi;
-import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi;
-import org.jclouds.vcloud.director.v1_5.annotations.Login;
-import org.jclouds.vcloud.director.v1_5.domain.Entity;
-import org.jclouds.vcloud.director.v1_5.domain.Session;
-import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken;
-import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
-import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.MediaApi;
-import org.jclouds.vcloud.director.v1_5.features.MediaAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.MetadataApi;
-import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.NetworkApi;
-import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.OrgApi;
-import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.QueryApi;
-import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.TaskApi;
-import org.jclouds.vcloud.director.v1_5.features.TaskAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.UploadApi;
-import org.jclouds.vcloud.director.v1_5.features.UploadAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi;
-import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VdcApi;
-import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.VmApi;
-import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.GroupApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.UserApi;
-import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi;
-import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose;
-import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler;
-import org.jclouds.vcloud.director.v1_5.loaders.LoginUserInOrgWithPassword;
-import org.jclouds.vcloud.director.v1_5.loaders.ResolveEntity;
-import org.jclouds.vcloud.director.v1_5.login.SessionApi;
-import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi;
-import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
-import com.google.inject.TypeLiteral;
-import com.google.inject.name.Named;
-
-/**
- * Configures the cloudstack connection.
- */
-@ConfiguresRestClient
-public class VCloudDirectorRestClientModule extends RestClientModule<VCloudDirectorApi, VCloudDirectorAsyncApi> {
-   
-   public static final Map<Class<?>, Class<?>> USER_DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder()
-         .put(CatalogApi.class, CatalogAsyncApi.class)
-         .put(MediaApi.class, MediaAsyncApi.class)
-         .put(MetadataApi.class, MetadataAsyncApi.class)
-         .put(NetworkApi.class, NetworkAsyncApi.class)
-         .put(OrgApi.class, OrgAsyncApi.class)
-         .put(QueryApi.class, QueryAsyncApi.class)
-         .put(TaskApi.class, TaskAsyncApi.class)
-         .put(UploadApi.class, UploadAsyncApi.class)
-         .put(VAppApi.class, VAppAsyncApi.class)
-         .put(VAppTemplateApi.class, VAppTemplateAsyncApi.class)
-         .put(VdcApi.class, VdcAsyncApi.class)
-         .put(VmApi.class, VmAsyncApi.class)
-         .build();
-   
-   public static final Map<Class<?>, Class<?>> ADMIN_DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder()
-         .putAll(USER_DELEGATE_MAP)
-         .put(AdminCatalogApi.class, AdminCatalogAsyncApi.class)
-         .put(AdminNetworkApi.class, AdminNetworkAsyncApi.class)
-         .put(AdminOrgApi.class, AdminOrgAsyncApi.class)
-         .put(AdminQueryApi.class, AdminQueryAsyncApi.class)
-         .put(AdminVdcApi.class, AdminVdcAsyncApi.class)
-         .put(GroupApi.class, GroupAsyncApi.class)
-         .put(UserApi.class, UserAsyncApi.class)
-         .build();
-   
-   public VCloudDirectorRestClientModule() {
-      super(ADMIN_DELEGATE_MAP);
-   }
-   
-   @Override
-   protected void configure() {
-      bind(new TypeLiteral<RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi>>() {
-      }).to(new TypeLiteral<RestContextImpl<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi>>() {
-      });
-      
-      // Bind apis that are used directly in Functions, Predicates and other circumstances
-      bindSyncToAsyncHttpApi(binder(), OrgApi.class, OrgAsyncApi.class);
-      bindSyncToAsyncHttpApi(binder(), SessionApi.class, SessionAsyncApi.class);
-      bindSyncToAsyncHttpApi(binder(), TaskApi.class, TaskAsyncApi.class);
-      bindSyncToAsyncHttpApi(binder(), VAppApi.class, VAppAsyncApi.class);
-      bindSyncToAsyncHttpApi(binder(), VmApi.class, VmAsyncApi.class);
-      
-      bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(InvalidateSessionAndRetryOn401AndLogoutOnClose.class);
-      
-      super.configure();
-      bindSyncToAsyncHttpApi(binder(),  VCloudDirectorAdminApi.class, VCloudDirectorAdminAsyncApi.class);
-
-   }
-   
-   @Override
-   protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(VCloudDirectorErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(VCloudDirectorErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(VCloudDirectorErrorHandler.class);
-   }
-   
-   @Provides
-   @Login
-   protected Supplier<URI> loginUrl(@Provider Supplier<URI> provider) {
-      // TODO: technically, we should implement version api, but this will work
-      return Suppliers.compose(new Function<URI, URI>() {
-         
-         @Override
-         public URI apply(URI arg0) {
-            return URI.create(arg0.toASCIIString() + "/sessions");
-         }
-         
-      }, provider);
-   }
-   
-   @Provides
-   protected Supplier<Session> currentSession(Supplier<SessionWithToken> in) {
-      return Suppliers.compose(new Function<SessionWithToken, Session>() {
-         
-         @Override
-         public Session apply(SessionWithToken arg0) {
-            return arg0.getSession();
-         }
-         
-      }, in);
-      
-   }
-   
-   @Provides
-   @Singleton
-   @org.jclouds.vcloud.director.v1_5.annotations.Session
-   protected Supplier<String> sessionToken(Supplier<SessionWithToken> in) {
-      return Suppliers.compose(new Function<SessionWithToken, String>() {
-         
-         @Override
-         public String apply(SessionWithToken arg0) {
-            return arg0.getToken();
-         }
-         
-      }, in);
-      
-   }
-
-   @Provides
-   @Singleton
-   LoadingCache<String, Entity> resolveEntityCache(ResolveEntity loader, @Named(PROPERTY_SESSION_INTERVAL) int seconds) {
-      return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader);
-   }
-
-   @Provides
-   @Singleton
-   LoadingCache<Credentials, SessionWithToken> provideSessionWithTokenCache(LoginUserInOrgWithPassword loader,
-         @Named(PROPERTY_SESSION_INTERVAL) int seconds) {
-      return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader);
-   }
-   
-   // Temporary conversion of a cache to a supplier until there is a single-element cache
-   // http://code.google.com/p/guava-libraries/issues/detail?id=872
-   @Provides
-   @Singleton
-   protected Supplier<SessionWithToken> provideSessionWithTokenSupplier(
-         final LoadingCache<Credentials, SessionWithToken> cache, @Provider final Supplier<Credentials> creds) {
-      return new Supplier<SessionWithToken>() {
-         @Override
-         public SessionWithToken get() {
-            return cache.getUnchecked(creds.get());
-         }
-      };
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
index 9dfe1d7..004193c 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java
@@ -16,16 +16,31 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG_ITEM;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Catalog;
 import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Catalog} objects.
- * 
- * @see CatalogAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface CatalogApi {
 
    /**
@@ -35,13 +50,21 @@ public interface CatalogApi {
     * GET /catalog/{id}
     * </pre>
     * 
-    * @param catalogUri
+    * @param catalogUrn
     *           the reference for the catalog
     * @return a catalog
     */
-   Catalog get(String catalogUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Catalog get(@EndpointParam(parser = URNToHref.class) String catalogUrn);
 
-   Catalog get(URI catalogHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Catalog get(@EndpointParam URI catalogHref);
 
    /**
     * Creates a catalog item in a catalog.
@@ -50,15 +73,26 @@ public interface CatalogApi {
     * POST /catalog/{id}/catalogItems
     * </pre>
     * 
-    * @param catalogUri
+    * @param catalogUrn
     *           the URI of the catalog
-    * @param item
+    * @param catalogItem
     *           the catalog item to add
-    * @return the addd catalog item
+    * @return the added catalog item
     */
-   CatalogItem addItem(String catalogUrn, CatalogItem item);
+   @POST
+   @Path("/catalogItems")
+   @Consumes(CATALOG_ITEM)
+   @Produces(CATALOG_ITEM)
+   @JAXBResponseParser
+   CatalogItem addItem(@EndpointParam(parser = URNToHref.class) String catalogUrn,
+         @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
 
-   CatalogItem addItem(URI catalogHref, CatalogItem item);
+   @POST
+   @Path("/catalogItems")
+   @Consumes(CATALOG_ITEM)
+   @Produces(CATALOG_ITEM)
+   @JAXBResponseParser
+   CatalogItem addItem(@EndpointParam URI catalogHref, @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
 
    /**
     * Retrieves a catalog item.
@@ -67,13 +101,21 @@ public interface CatalogApi {
     * GET /catalogItem/{id}
     * </pre>
     * 
-    * @param catalogItemRef
+    * @param catalogItemUrn
     *           the reference for the catalog item
     * @return the catalog item
     */
-   CatalogItem getItem(String catalogItemUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   CatalogItem getItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn);
 
-   CatalogItem getItem(URI catalogItemHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   CatalogItem getItem(@EndpointParam URI catalogItemHref);
 
    /**
     * Modifies a catalog item.
@@ -82,15 +124,25 @@ public interface CatalogApi {
     * PUT /catalogItem/{id}
     * </pre>
     * 
-    * @param catalogItemRef
+    * @param catalogItemUrn
     *           the reference for the catalog item
     * @param catalogItem
     *           the catalog item
     * @return the edited catalog item
     */
-   CatalogItem editItem(String catalogItemUrn, CatalogItem catalogItem);
+   @PUT
+   @Consumes(CATALOG_ITEM)
+   @Produces(CATALOG_ITEM)
+   @JAXBResponseParser
+   CatalogItem editItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn,
+         @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
 
-   CatalogItem editItem(URI catalogItemHref, CatalogItem catalogItem);
+   @PUT
+   @Consumes(CATALOG_ITEM)
+   @Produces(CATALOG_ITEM)
+   @JAXBResponseParser
+   CatalogItem editItem(@EndpointParam URI catalogItemHref,
+         @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
 
    /**
     * Deletes a catalog item.
@@ -99,10 +151,16 @@ public interface CatalogApi {
     * DELETE /catalogItem/{id}
     * </pre>
     * 
-    * @param catalogItemRef
+    * @param catalogItemUrn
     *           the reference for the catalog item
     */
-   void removeItem(String catalogItemUrn);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void removeItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn);
 
-   void removeItem(URI catalogItemHref);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void removeItem(@EndpointParam URI catalogItemHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
deleted file mode 100644
index 5f518a3..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java
+++ /dev/null
@@ -1,143 +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.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Catalog;
-import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see CatalogApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface CatalogAsyncApi {
-
-   /**
-    * @see CatalogApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Catalog> get(@EndpointParam(parser = URNToHref.class) String catalogUrn);
-
-   /**
-    * @see CatalogApi#addItem(String, CatalogItem)
-    */
-   @POST
-   @Path("/catalogItems")
-   @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
-   @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
-   @JAXBResponseParser
-   ListenableFuture<CatalogItem> addItem(@EndpointParam(parser = URNToHref.class) String catalogUrn,
-            @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
-
-   /**
-    * @see CatalogApi#getItem(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<CatalogItem> getItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn);
-
-   /**
-    * @see CatalogApi#editItem(String, CatalogItem)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
-   @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
-   @JAXBResponseParser
-   ListenableFuture<CatalogItem> editItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn,
-            @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
-
-   /**
-    * @see CatalogApi#removeItem(String)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> removeItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn);
-
-   /**
-    * @see CatalogApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Catalog> get(@EndpointParam URI catalogHref);
-
-   /**
-    * @see CatalogApi#addItem(URI, CatalogItem)
-    */
-   @POST
-   @Path("/catalogItems")
-   @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
-   @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
-   @JAXBResponseParser
-   ListenableFuture<CatalogItem> addItem(@EndpointParam URI catalogHref,
-            @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
-
-   /**
-    * @see CatalogApi#getItem(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<CatalogItem> getItem(@EndpointParam URI catalogItemHref);
-
-   /**
-    * @see CatalogApi#editItem(URI, CatalogItem)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.CATALOG_ITEM)
-   @Produces(VCloudDirectorMediaType.CATALOG_ITEM)
-   @JAXBResponseParser
-   ListenableFuture<CatalogItem> editItem(@EndpointParam URI catalogItemHref,
-            @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem);
-
-   /**
-    * @see CatalogApi#removeItem(URI)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> removeItem(@EndpointParam URI catalogItemHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
index 8d70c63..a8a3c0c 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java
@@ -16,18 +16,35 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CLONE_MEDIA_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.MEDIA;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Media;
 import org.jclouds.vcloud.director.v1_5.domain.Owner;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Media}.
- * 
- * @see MediaAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface MediaApi {
 
    /**
@@ -35,9 +52,17 @@ public interface MediaApi {
     * 
     * @return the media or null if not found
     */
-   Media get(String mediaUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Media get(@EndpointParam(parser = URNToHref.class) String mediaUrn);
 
-   Media get(URI mediaHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Media get(@EndpointParam URI mediaHref);
 
    /**
     * Creates a media (and present upload link for the floppy/iso file).
@@ -45,18 +70,19 @@ public interface MediaApi {
     * @return The response will return a link to transfer site to be able to continue with uploading
     *         the media.
     */
-   Media add(URI uploadHref, Media media);
-
-   /**
-    * Clones a media into new one. The status of the returned media is UNRESOLVED(0) until the task
-    * for cloning finish.
-    * 
-    * @return a Media resource which will contain a task. The user should monitor the contained task
-    *         status in order to check when it is completed.
-    */
-   Media clone(String mediaUrn, CloneMediaParams params);
+   @POST
+   @Consumes(MEDIA)
+   @Produces(MEDIA)
+   @JAXBResponseParser
+   Media add(@EndpointParam URI updateHref, @BinderParam(BindToXMLPayload.class) Media media);
 
-   Media clone(URI mediaHref, CloneMediaParams params);
+   @POST
+   @Path("/action/cloneMedia")
+   @Consumes(MEDIA)
+   @Produces(CLONE_MEDIA_PARAMS)
+   @JAXBResponseParser
+   Media clone(@EndpointParam URI mediaHref,
+         @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
 
    /**
     * Updates the name/description of a media.
@@ -64,23 +90,48 @@ public interface MediaApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task
     *         status in order to check when it is completed.
     */
-   Task edit(String mediaUrn, Media media);
+   @PUT
+   @Consumes(TASK)
+   @Produces(MEDIA)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToHref.class) String mediaUrn,
+         @BinderParam(BindToXMLPayload.class) Media media);
 
-   Task edit(URI mediaHref, Media media);
+   @PUT
+   @Consumes(TASK)
+   @Produces(MEDIA)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI mediaHref, @BinderParam(BindToXMLPayload.class) Media media);
 
    /**
     * Deletes a media.
     */
-   Task remove(String mediaUrn);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam(parser = URNToHref.class) String mediaUrn);
 
-   Task remove(URI mediaHref);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam URI mediaHref);
 
    /**
     * Retrieves an owner.
     * 
     * @return the owner or null if not found
     */
-   Owner getOwner(String mediaUrn);
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam(parser = URNToHref.class) String mediaUrn);
 
-   Owner getOwner(URI mediaHref);
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam URI mediaHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
deleted file mode 100644
index 987e3e9..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java
+++ /dev/null
@@ -1,155 +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.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Media;
-import org.jclouds.vcloud.director.v1_5.domain.Owner;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see MediaApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface MediaAsyncApi {
-
-   /**
-    * @see MediaApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Media> get(@EndpointParam(parser = URNToHref.class) String mediaUrn);
-
-   /**
-    * @see MediaApi#add(URI, Media)
-    */
-   @POST
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.MEDIA)
-   @JAXBResponseParser
-   ListenableFuture<Media> add(@EndpointParam URI updateHref, @BinderParam(BindToXMLPayload.class) Media media);
-
-   /**
-    * @see MediaApi#clone(String, CloneMediaParams)
-    */
-   @POST
-   @Path("/action/cloneMedia")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Media> clone(@EndpointParam(parser = URNToHref.class) String mediaUrn,
-            @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
-   /**
-    * @see MediaApi#editMedia(String, Media)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.MEDIA)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToHref.class) String mediaUrn,
-            @BinderParam(BindToXMLPayload.class) Media media);
-
-   /**
-    * @see MediaApi#removeMedia(String)
-    */
-   @DELETE
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam(parser = URNToHref.class) String mediaUrn);
-
-   /**
-    * @see MediaApi#getOwner(String)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam(parser = URNToHref.class) String mediaUrn);
-
-   /**
-    * @see MediaApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Media> get(@EndpointParam URI mediaHref);
-
-   /**
-    * @see MediaApi#clone(URI, CloneMediaParams)
-    */
-   @POST
-   @Path("/action/cloneMedia")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Media> clone(@EndpointParam URI mediaHref,
-            @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
-   /**
-    * @see MediaApi#editMedia(URI, Media)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.MEDIA)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI mediaHref, @BinderParam(BindToXMLPayload.class) Media media);
-
-   /**
-    * @see MediaApi#removeMedia(URI)
-    */
-   @DELETE
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam URI mediaHref);
-
-   /**
-    * @see MediaApi#getOwner(URI)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam URI mediaHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
index 394d4c6..3a7896c 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java
@@ -16,21 +16,46 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+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;
+
 import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.vcloud.director.v1_5.binders.BindMapAsMetadata;
+import org.jclouds.vcloud.director.v1_5.binders.BindStringAsMetadataValue;
 import org.jclouds.vcloud.director.v1_5.domain.Metadata;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.RegexValueParser;
 
-/**
- * Provides synchronous access to {@link Metadata}.
- * 
- * @see MetadataAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface MetadataApi {
    /**
     * Retrieves an list of metadata
     * 
     * @return a list of metadata
     */
+   @GET
+   @Path("/metadata")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
    Metadata get();
 
    /**
@@ -38,7 +63,12 @@ public interface MetadataApi {
     * 
     * @return the metadata value, or null if not found
     */
-   String get(String key);
+   @GET
+   @Path("/metadata/{key}")
+   @Consumes
+   @ResponseParser(RegexValueParser.class)
+   @Fallback(NullOnNotFoundOr404.class)
+   String get(@PathParam("key") String key);
 
    /**
     * Merges the metadata for a media with the information provided.
@@ -46,7 +76,12 @@ public interface MetadataApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to
     *         check when it is completed.
     */
-   Task putAll(Map<String, String> metadata);
+   @POST
+   @Path("/metadata")
+   @Consumes(TASK)
+   @Produces(METADATA)
+   @JAXBResponseParser
+   Task putAll(@BinderParam(BindMapAsMetadata.class) Map<String, String> metadata);
 
    /**
     * Sets the metadata for the particular key for the media to the value provided. Note: this will replace any existing
@@ -55,7 +90,12 @@ public interface MetadataApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to
     *         check when it is completed.
     */
-   Task put(String key, String value);
+   @PUT
+   @Path("/metadata/{key}")
+   @Consumes(TASK)
+   @Produces(METADATA_VALUE)
+   @JAXBResponseParser
+   Task put(@PathParam("key") String key, @BinderParam(BindStringAsMetadataValue.class) String metadataValue);
 
    /**
     * Deletes a metadata entry.
@@ -63,6 +103,9 @@ public interface MetadataApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to
     *         check when it is completed.
     */
-   Task remove(String key);
-
+   @DELETE
+   @Path("/metadata/{key}")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@PathParam("key") String key);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
deleted file mode 100644
index 4b5c7d9..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java
+++ /dev/null
@@ -1,102 +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.features;
-
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.binders.BindMapAsMetadata;
-import org.jclouds.vcloud.director.v1_5.binders.BindStringAsMetadataValue;
-import org.jclouds.vcloud.director.v1_5.domain.Metadata;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.RegexValueParser;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see MetadataApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface MetadataAsyncApi {
-
-   /**
-    * @see MetadataApi.Readable#get()
-    */
-   @GET
-   @Path("/metadata")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Metadata> get();
-
-   /**
-    * @see MetadataApi.Readable#get(String)
-    */
-   @GET
-   @Path("/metadata/{key}")
-   @Consumes
-   @ResponseParser(RegexValueParser.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<String> get(@PathParam("key") String key);
-
-   /**
-    * @see MetadataApi.Writable#putAll
-    */
-   @POST
-   @Path("/metadata")
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.METADATA)
-   @JAXBResponseParser
-   ListenableFuture<Task> putAll(@BinderParam(BindMapAsMetadata.class) Map<String, String> metadata);
-
-   /**
-    * @see MetadataApi#put
-    */
-   @PUT
-   @Path("/metadata/{key}")
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.METADATA_VALUE)
-   @JAXBResponseParser
-   ListenableFuture<Task> put(@PathParam("key") String key,
-         @BinderParam(BindStringAsMetadataValue.class) String metadataValue);
-
-   /**
-    * @see MetadataApi.Writable#remove
-    */
-   @DELETE
-   @Path("/metadata/{key}")
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@PathParam("key") String key);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
index 9a6c71d..116df53 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java
@@ -16,15 +16,22 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.network.Network;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Network}.
- * 
- * @see NetworkAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface NetworkApi {
 
    /**
@@ -32,7 +39,15 @@ public interface NetworkApi {
     * 
     * @return the network or null if not found
     */
-   Network get(String networkUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Network get(@EndpointParam(parser = URNToHref.class) String networkUrn);
 
-   Network get(URI networkHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Network get(@EndpointParam URI networkHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
deleted file mode 100644
index 997ff98..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java
+++ /dev/null
@@ -1,58 +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.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.network.Network;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see NetworkApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface NetworkAsyncApi {
-
-   /**
-    * @see NetworkApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Network> get(@EndpointParam(parser = URNToHref.class) String networkUrn);
-
-   /**
-    * @see NetworkApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Network> get(@EndpointParam URI networkHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
index fc24805..54a7fab 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java
@@ -16,16 +16,24 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.org.Org;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Org}.
- * 
- * @see OrgAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface OrgApi {
 
    /**
@@ -37,6 +45,10 @@ public interface OrgApi {
     * 
     * @return a list of organizations
     */
+   @GET
+   @Path("/org/")
+   @Consumes
+   @JAXBResponseParser
    OrgList list();
 
    /**
@@ -48,7 +60,15 @@ public interface OrgApi {
     * 
     * @return the org or null if not found
     */
-   Org get(String orgUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Org get(@EndpointParam(parser = URNToHref.class) String orgUrn);
 
-   Org get(URI orgHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Org get(@EndpointParam URI orgHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java
deleted file mode 100644
index 44d3ab9..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.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.vcloud.director.v1_5.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.org.Org;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgList;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see OrgApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface OrgAsyncApi {
-
-   /**
-    * @see OrgApi#list()
-    */
-   @GET
-   @Path("/org/")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<OrgList> list();
-
-   /**
-    * @see OrgApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Org> get(@EndpointParam(parser = URNToHref.class) String orgUrn);
-
-   /**
-    * @see OrgApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Org> get(@EndpointParam URI orgHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
index 0fb49c7..8c9ed91 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java
@@ -16,28 +16,22 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.QueryParams;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.query.CatalogReferences;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryList;
 import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
-import org.jclouds.vcloud.director.v1_5.domain.query.VAppReferences;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
-/**
- * Provides synchronous access to the REST API query interface.
- * 
- * @see QueryAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface QueryApi {
 
    // TODO Add a typed object for filter syntax, or at least a fluent builder
-   
-   /**
-    * REST API query {@link Link} list.
-    *
-    * <pre>
-    * GET /query
-    * </pre>
-    */
-   QueryList queryList();
 
    /**
     * Retrieves a list of entities by using REST API general QueryHandler.
@@ -49,18 +43,25 @@ public interface QueryApi {
     * <pre>
     * GET /query
     * </pre>
-    *
-    * @see #queryList()
-    * @see #query(String, String)
-    * @see #query(Integer, Integer, String, String, String)
     */
-   QueryResultRecords queryAll(String type);
-
-   /** @see #queryAll() */
-   QueryResultRecords query(String type, String filter);
-
-   /** @see #queryAll() */
-   QueryResultRecords query(Integer page, Integer pageSize, String format, String type, String filter);
+   @GET
+   @Path("/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords queryAll(@QueryParam("type") String type);
+
+   @GET
+   @Path("/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords query(@QueryParam("type") String type, @QueryParam("filter") String filter);
+
+   @GET
+   @Path("/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords query(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
+         @QueryParam("format") String format, @QueryParam("type") String type, @QueryParam("filter") String filter);
 
    /**
     * Retrieves a list of {@link Catalog}s by using REST API general QueryHandler.
@@ -71,15 +72,12 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/catalogs/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords catalogsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords catalogsQuery(String filter);
-
-   /** @see #queryAll() */
-   QueryResultRecords catalogsQuery(Integer page, Integer pageSize, String filter);
-
-
    /**
     * Retrieves a list of {@link CatalogReference}s by using REST API general QueryHandler.
     *
@@ -89,14 +87,13 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/catalogs/query")
+   @Consumes
+   @QueryParams(keys = { "format" }, values = { "references" })
+   @JAXBResponseParser
    CatalogReferences catalogReferencesQueryAll();
 
-   /** @see #catalogReferencesQueryAll() */
-   CatalogReferences catalogReferencesQuery(String filter);
-
-   /** @see #catalogReferencesQueryAll() */
-   CatalogReferences catalogReferencesQuery(Integer page, Integer pageSize, String filter);
-
    /**
     * Retrieves a list of {@link VAppTemplate}s by using REST API general QueryHandler.
     *
@@ -106,10 +103,17 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/vAppTemplates/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords vAppTemplatesQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords vAppTemplatesQuery(String filter);
+   @GET
+   @Path("/vAppTemplates/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords vAppTemplatesQuery(@QueryParam("filter") String filter);
 
    /**
     * Retrieves a list of {@link VApp}s by using REST API general QueryHandler.
@@ -120,31 +124,17 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/vApps/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords vAppsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords vAppsQuery(String filter);
-
-   /** @see #queryAll() */
-   QueryResultRecords vAppsQuery(Integer page, Integer pageSize, String filter);
-
-   /**
-    * Retrieves a list of {@link VAppReference}s by using REST API general QueryHandler.
-    *
-    * <pre>
-    * GET /vApps/query?format=references
-    * </pre>
-    *
-    * @see #queryAll(String)
-    */
-   /** @see #queryAll() */
-   VAppReferences vAppReferencesQueryAll();
-
-   /** @see #queryAll() */
-   VAppReferences vAppReferencesQuery(String filter);
-
-   /** @see #queryAll() */
-   VAppReferences vAppReferencesQuery(Integer page, Integer pageSize, String filter);
+   @GET
+   @Path("/vApps/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords vAppsQuery(@QueryParam("filter") String filter);
 
    /**
     * Retrieves a list of {@link Vm}s by using REST API general QueryHandler.
@@ -155,10 +145,17 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/vms/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords vmsQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords vmsQuery(String filter);
+   @GET
+   @Path("/vms/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords vmsQuery(@QueryParam("filter") String filter);
 
    /**
     * Retrieves a list of {@link Media}s by using REST API general QueryHandler.
@@ -169,9 +166,15 @@ public interface QueryApi {
     *
     * @see #queryAll(String)
     */
+   @GET
+   @Path("/mediaList/query")
+   @Consumes
+   @JAXBResponseParser
    QueryResultRecords mediaListQueryAll();
 
-   /** @see #queryAll() */
-   QueryResultRecords mediaListQuery(String filter);
-   
+   @GET
+   @Path("/mediaList/query")
+   @Consumes
+   @JAXBResponseParser
+   QueryResultRecords mediaListQuery(@QueryParam("filter") String filter);
 }


[4/5] JCLOUDS-40 unasync vcloud-director

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
deleted file mode 100644
index 42193c2..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryAsyncApi.java
+++ /dev/null
@@ -1,192 +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.features;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.QueryParam;
-
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.query.CatalogReferences;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryList;
-import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords;
-import org.jclouds.vcloud.director.v1_5.domain.query.VAppReferences;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see QueryApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface QueryAsyncApi {
-
-   /**
-    * REST API General queries handler.
-    */
-   @GET
-   @Path("/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryList> queryList();
-
-   @GET
-   @Path("/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> queryAll(@QueryParam("type") String type);
-
-   @GET
-   @Path("/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> query(@QueryParam("type") String type, @QueryParam("filter") String filter);
-
-   @GET
-   @Path("/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> query(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
-         @QueryParam("format") String format, @QueryParam("type") String type, @QueryParam("filter") String filter);
-
-   /**
-    * Retrieves a list of {@link Catalog}s by using REST API general QueryHandler.
-    */
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> catalogsQueryAll();
-
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> catalogsQuery(@QueryParam("filter") String filter);
-
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> catalogsQuery(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
-         @QueryParam("filter") String filter);
-
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<CatalogReferences> catalogReferencesQueryAll();
-
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<CatalogReferences> catalogReferencesQuery(@QueryParam("filter") String filter);
-
-   @GET
-   @Path("/catalogs/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<CatalogReferences> catalogReferencesQuery(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
-         @QueryParam("filter") String filter);
-
-   @GET
-   @Path("/vAppTemplates/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vAppTemplatesQueryAll();
-
-   @GET
-   @Path("/vAppTemplates/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vAppTemplatesQuery(@QueryParam("filter") String filter);
-
-   /**
-    * Retrieves a list of {@link VApp}s by using REST API general QueryHandler.
-    */
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vAppsQueryAll();
-
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vAppsQuery(@QueryParam("filter") String filter);
-
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vAppsQuery(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
-         @QueryParam("filter") String filter);
-
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<VAppReferences> vAppReferencesQueryAll();
-
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<VAppReferences> vAppReferencesQuery(@QueryParam("filter") String filter);
-
-   @GET
-   @Path("/vApps/query")
-   @Consumes
-   @QueryParams(keys = { "format" }, values = { "references" })
-   @JAXBResponseParser
-   ListenableFuture<VAppReferences> vAppReferencesQuery(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize,
-         @QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/vms/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vmsQueryAll();
-
-   @GET
-   @Path("/vms/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> vmsQuery(@QueryParam("filter") String filter);
-   
-   @GET
-   @Path("/mediaList/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> mediaListQueryAll();
-
-   @GET
-   @Path("/mediaList/query")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<QueryResultRecords> mediaListQuery(@QueryParam("filter") String filter);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
index 7c045f2..a5b98f2 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskApi.java
@@ -16,15 +16,25 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+
 import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.domain.TasksList;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Task} objects.
- * 
- * @see TaskAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface TaskApi {
 
    /**
@@ -39,7 +49,11 @@ public interface TaskApi {
     *           {@link VCloudDirectorMediaType#TASKS_LIST}
     * @return a list of tasks
     */
-   TasksList getTasksList(URI tasksListHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   TasksList getTasksList(@EndpointParam URI tasksListHref);
 
    /**
     * Retrieves a task.
@@ -50,18 +64,21 @@ public interface TaskApi {
     * 
     * @return the task or null if not found
     */
-   Task get(String taskUrn);
-
-   Task get(URI taskHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Task get(@EndpointParam(parser = URNToHref.class) String taskUrn);
 
-   /**
-    * Cancels a task.
-    * 
-    * <pre>
-    * POST /task/{id}/action/cancel
-    * </pre>
-    */
-   void cancel(String taskUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Task get(@EndpointParam URI taskURI);
 
-   void cancel(URI taskHref);
+   @POST
+   @Path("/action/cancel")
+   @Consumes
+   @JAXBResponseParser
+   void cancel(@EndpointParam URI taskURI);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
deleted file mode 100644
index 3401f0b..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncApi.java
+++ /dev/null
@@ -1,88 +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.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.TasksList;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see TaskApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface TaskAsyncApi {
-   
-   /**
-    * @see TaskApi#getTasksList(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<TasksList> getTasksList(@EndpointParam URI tasksListHref);
-
-   /**
-    * @see TaskApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Task> get(@EndpointParam(parser = URNToHref.class) String taskUrn);
-   
-   /**
-    * @see TaskApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Task> get(@EndpointParam URI taskURI);
-   
-   /**
-    * @see TaskApi#cancel(String)
-    */
-   @POST
-   @Path("/action/cancel")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> cancel(@EndpointParam(parser = URNToHref.class) String taskUrn);
-   
-   /**
-    * @see TaskApi#cancel(URI)
-    */
-   @POST
-   @Path("/action/cancel")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> cancel(@EndpointParam URI taskURI);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadApi.java
index 0846c28..6b576ad 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadApi.java
@@ -17,18 +17,16 @@
 package org.jclouds.vcloud.director.v1_5.features;
 
 import java.net.URI;
+
+import javax.ws.rs.PUT;
+
 import org.jclouds.io.Payload;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
 
-/**
- * Provides synchronous access to upload.
- * 
- * @see UploadAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface UploadApi {
 
-   /**
-    * @return eTag
-    */
-   void upload(URI location, Payload payload);
-   
+   @PUT void upload(@EndpointParam URI location, Payload payload);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.java
deleted file mode 100644
index b436137..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/UploadAsyncApi.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.vcloud.director.v1_5.features;
-
-import java.net.URI;
-
-import javax.ws.rs.PUT;
-
-import org.jclouds.io.Payload;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see UploadApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface UploadAsyncApi {
-
-   /**
-    * @see UploadApi#put
-    */
-   @PUT
-   ListenableFuture<Void> upload(@EndpointParam URI location, Payload payload);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
index 6d1b3d9..250b50a 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppApi.java
@@ -16,10 +16,37 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.DEPLOY_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RECOMPOSE_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.STARTUP_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.UNDEPLOY_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
 import org.jclouds.dmtf.ovf.NetworkSection;
 import org.jclouds.dmtf.ovf.StartupSection;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Owner;
 import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
@@ -30,457 +57,812 @@ import org.jclouds.vcloud.director.v1_5.domain.params.RecomposeVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link VApp} objects.
- * 
- * @see VAppAsyncApi
- * @version 1.5
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppApi {
 
    /**
-    * Retrieves a {@link VApp}.
-    * 
-    * The {@link VApp} could be in one of these statuses:
-    * <ul>
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION
-    * FAILED_CREATION(-1)} - Transient entity state, e.g., model object is addd but the
-    * corresponding VC backing does not exist yet. This is further sub-categorized in the respective
-    * entities.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED
-    * UNRESOLVED(0)} - Entity is whole, e.g., VM creation is complete and all the required model
-    * objects and VC backings are created.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED
-    * RESOLVED(1)} - Entity is resolved.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#DEPLOYED
-    * DEPLOYED(2)} - Entity is deployed.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#SUSPENDED
-    * SUSPENDED(3)} - All VMs of the vApp are suspended.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_ON
-    * POWERED_ON(4)} - All VMs of the vApp are powered on.
-    * <li>
-    * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#WAITING_FOR_INPUT
-    * WAITING_FOR_INPUT(5)} - VM is pending response on a question.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN
-    * UNKNOWN(6)} - Entity state could not be retrieved from the inventory, e.g., VM power state is
-    * null.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRECOGNIZED
-    * UNRECOGNIZED(7)} - Entity state was retrieved from the inventory but could not be mapped to an
-    * internal state.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF
-    * POWERED_OFF(8)} - All VMs of the vApp are powered off.
-    * <li>
-    * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#INCONSISTENT_STATE
-    * INCONSISTENT_STATE(9)} - Apply to VM status, if a vm is {@code POWERED_ON}, or
-    * {@code WAITING_FOR_INPUT}, but is undeployed, it is in an inconsistent state.
-    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)}
-    * - vApp status is set to {@code MIXED} when the VMs in the vApp are in different power states
-    * </ul>
-    * 
-    * <pre>
-    * GET /vApp/{id}
-    * </pre>
-    * 
-    * @since 0.9
+    * @see VAppApi#get(String)
     */
-   VApp get(String vAppUrn);
-
-   VApp get(URI vAppHref);
+   @GET
+   @Consumes(VAPP)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VApp get(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the name/description of a {@link VApp}.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task edit(String vAppUrn, VApp vApp);
-
-   Task edit(URI vAppHref, VApp vApp);
+   @PUT
+   @Produces(VAPP)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) VApp vApp);
 
    /**
     * Deletes a {@link VApp}.
-    * 
+    *
     * <pre>
     * DELETE /vApp/{id}
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task remove(String vAppUrn);
-
-   Task remove(URI vAppHref);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the control access of a {@link VApp}.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/controlAccess
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   ControlAccessParams editControlAccess(String vAppUrn, ControlAccessParams params);
-
-   ControlAccessParams editControlAccess(URI vAppHref, ControlAccessParams params);
+   @POST
+   @Path("/action/controlAccess")
+   @Produces(CONTROL_ACCESS)
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   ControlAccessParams editControlAccess(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
 
    /**
     * Deploys a {@link VApp}.
-    * 
+    *
     * Deployment means allocation of all resource for a vApp/VM like CPU and memory from a vDC
     * resource pool. Deploying a vApp automatically deploys all of the virtual machines it contains.
     * As of version 1.5 the operation supports force customization passed with
     * {@link DeployVAppParamsType#setForceCustomization(Boolean)} parameter.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/deploy
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task deploy(String vAppUrn, DeployVAppParams params);
-
-   Task deploy(URI vAppHref, DeployVAppParams params);
+   @POST
+   @Path("/action/deploy")
+   @Produces(DEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task deploy(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
 
    /**
     * Discard suspended state of a {@link VApp}.
-    * 
+    *
     * Discarding suspended state of a vApp automatically discarded suspended states of all of the
     * virtual machines it contains.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/discardSuspendedState
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task discardSuspendedState(String vAppUrn);
-
-   Task discardSuspendedState(URI vAppHref);
+   @POST
+   @Path("/action/discardSuspendedState")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task discardSuspendedState(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Place the {@link VApp} into maintenance mode.
-    * 
+    *
     * While in maintenance mode, a system admin can operate on the vApp as usual, but end users are
     * restricted to read-only operations. Any user-initiated tasks running when the vApp enters
     * maintenance mode will continue.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/enterMaintenanceMode
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   void enterMaintenanceMode(String vAppUrn);
-
-   void enterMaintenanceMode(URI vAppHref);
+   @POST
+   @Path("/action/enterMaintenanceMode")
+   @Consumes
+   @JAXBResponseParser
+   void enterMaintenanceMode(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Take the {@link VApp} out of maintenance mode.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/exitMaintenanceMode
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   void exitMaintenanceMode(String vAppUrn);
-
-   void exitMaintenanceMode(URI vAppHref);
+   @POST
+   @Path("/action/exitMaintenanceMode")
+   @Consumes
+   @JAXBResponseParser
+   void exitMaintenanceMode(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Recompose a {@link VApp} by removing its own VMs and/or adding new ones from other vApps or
     * vApp templates.
-    * 
+    *
     * To remove VMs you should put their references in elements. The way you add VMs is the same as
     * described in compose vApp operation
     * {@link VdcApi#composeVApp(String, org.jclouds.vcloud.director.v1_5.domain.ComposeVAppParams)}.
     * The status of vApp will be in
     * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED} until the
     * recompose task is finished.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/recomposeVApp
     * </pre>
-    * 
+    *
     * @since 1.0
     */
-   Task recompose(String vAppUrn, RecomposeVAppParams params);
-
-   Task recompose(URI vAppHref, RecomposeVAppParams params);
+   @POST
+   @Path("/action/recomposeVApp")
+   @Produces(RECOMPOSE_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task recompose(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
 
    /**
     * Undeploy a {@link VApp}.
-    * 
+    *
     * Undeployment means deallocation of all resources for a vApp/VM like CPU and memory from a vDC
     * resource pool. Undeploying a vApp automatically undeploys all of the virtual machines it
     * contains.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/action/undeploy
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task undeploy(String vAppUrn, UndeployVAppParams params);
-
-   Task undeploy(URI vAppHref, UndeployVAppParams params);
+   @POST
+   @Path("/action/undeploy")
+   @Produces(UNDEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task undeploy(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
 
    /**
     * Retrieves the control access information for a {@link VApp}.
-    * 
+    *
     * The vApp could be shared to everyone or could be shared to specific user, by editing the
     * control access values.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/controlAccess
     * </pre>
-    * 
+    *
     * @since 0.9
     */
    // TODO: revise
-   ControlAccessParams getAccessControl(String vAppUrn);
-
-   ControlAccessParams getAccessControl(URI vAppHref);
+   @GET
+   @Path("/controlAccess")
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ControlAccessParams getAccessControl(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Powers off a {@link VApp}.
-    * 
+    *
     * If the operation is used over a vApp then all VMs are powered off. This operation is allowed
     * only when the vApp/VM is powered on.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/powerOff
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task powerOff(String vAppUrn);
-
-   Task powerOff(URI vAppHref);
+   @POST
+   @Path("/power/action/powerOff")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOff(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Powers on a {@link VApp}.
-    * 
+    *
     * If the operation is used over a vApp then all VMs are powered on. This operation is allowed
     * only when the vApp/VM is powered off.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/powerOn
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task powerOn(String vAppUrn);
-
-   Task powerOn(URI vAppHref);
+   @POST
+   @Path("/power/action/powerOn")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOn(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Reboots a {@link VApp}.
-    * 
+    *
     * The vApp/VM should be started in order to reboot it.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/reboot
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task reboot(String vAppUrn);
-
-   Task reboot(URI vAppHref);
+   @POST
+   @Path("/power/action/reboot")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reboot(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Resets a {@link VApp}.
-    * 
+    *
     * If the operation is used over a vApp then all VMs are reset. This operation is allowed only
     * when the vApp/VM is powered on.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/reset
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task reset(String vAppUrn);
-
-   Task reset(URI vAppHref);
+   @POST
+   @Path("/power/action/reset")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reset(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Shuts down a {@link VApp}.
-    * 
+    *
     * If the operation is used over a vApp then all VMs are shutdown. This operation is allowed only
     * when the vApp/VM is powered on.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/shutdown
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task shutdown(String vAppUrn);
-
-   Task shutdown(URI vAppHref);
+   @POST
+   @Path("/power/action/shutdown")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task shutdown(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Suspends a {@link VApp}.
-    * 
+    *
     * If the operation is used over a vApp then all VMs are suspended. This operation is allowed
     * only when the vApp/VM is powered on.
-    * 
+    *
     * <pre>
     * POST /vApp/{id}/power/action/suspend
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task suspend(String vAppUrn);
-
-   Task suspend(URI vAppHref);
+   @POST
+   @Path("/power/action/suspend")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task suspend(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Retrieves the lease settings section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/leaseSettingsSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   LeaseSettingsSection getLeaseSettingsSection(String vAppUrn);
-
-   LeaseSettingsSection getLeaseSettingsSection(URI vAppHref);
+   @GET
+   @Path("/leaseSettingsSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   LeaseSettingsSection getLeaseSettingsSection(
+         @EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the lease settings section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}/leaseSettingsSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task editLeaseSettingsSection(String vAppUrn, LeaseSettingsSection section);
-
-   Task editLeaseSettingsSection(URI vAppHref, LeaseSettingsSection section);
+   @PUT
+   @Path("/leaseSettingsSection")
+   @Produces(LEASE_SETTINGS_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editLeaseSettingsSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
 
    /**
     * Retrieves the network config section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/networkConfigSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   NetworkConfigSection getNetworkConfigSection(String vAppUrn);
-
-   NetworkConfigSection getNetworkConfigSection(URI vAppHref);
+   @GET
+   @Path("/networkConfigSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConfigSection getNetworkConfigSection(
+         @EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the network config section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}/networkConfigSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task editNetworkConfigSection(String vAppUrn, NetworkConfigSection section);
-
-   Task editNetworkConfigSection(URI vAppHref, NetworkConfigSection section);
+   @PUT
+   @Path("/networkConfigSection")
+   @Produces(NETWORK_CONFIG_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editNetworkConfigSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
 
    /**
     * Retrieves the network section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/networkSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   NetworkSection getNetworkSection(String vAppUrn);
-
-   NetworkSection getNetworkSection(URI vAppHref);
+   @GET
+   @Path("/networkSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkSection getNetworkSection(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Retrieves the owner of a {@link VApp}.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/owner
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   Owner getOwner(String vAppUrn);
-
-   Owner getOwner(URI vAppHref);
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Changes {@link VApp} owner.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}/owner
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   void editOwner(String vAppUrn, Owner owner);
-
-   void editOwner(URI vAppHref, Owner owner);
+   @PUT
+   @Path("/owner")
+   @Produces(OWNER)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   void editOwner(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) Owner owner);
 
    /**
     * Retrieves {@link VApp} product sections.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/productSections
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   ProductSectionList getProductSections(String vAppUrn);
-
-   ProductSectionList getProductSections(URI vAppHref);
+   @GET
+   @Path("/productSections")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the product section information of a {@link VApp}.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}/productSections
     * </pre>
-    * 
+    *
     * @since 1.5
     */
-   Task editProductSections(String vAppUrn, ProductSectionList sectionList);
-
-   Task editProductSections(URI vAppHref, ProductSectionList sectionList);
+   @PUT
+   @Path("/productSections")
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
 
    /**
     * Retrieves the startup section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * GET /vApp/{id}/startupSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   StartupSection getStartupSection(String vAppUrn);
-
-   StartupSection getStartupSection(URI vAppHref);
+   @GET
+   @Path("/startupSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   StartupSection getStartupSection(@EndpointParam(parser = URNToHref.class) String vAppUrn);
 
    /**
     * Modifies the startup section of a {@link VApp}.
-    * 
+    *
     * <pre>
     * PUT /vApp/{id}/startupSection
     * </pre>
-    * 
+    *
     * @since 0.9
     */
-   Task editStartupSection(String vAppUrn, StartupSection section);
+   @PUT
+   @Path("/startupSection")
+   @Produces(STARTUP_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editStartupSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
+         @BinderParam(BindToXMLPayload.class) StartupSection section);
 
-   Task editStartupSection(URI vAppHref, StartupSection section);
+   /**
+    * Retrieves a {@link VApp}.
+    *
+    * The {@link VApp} could be in one of these statuses:
+    * <ul>
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#FAILED_CREATION
+    * FAILED_CREATION(-1)} - Transient entity state, e.g., model object is addd but the
+    * corresponding VC backing does not exist yet. This is further sub-categorized in the respective
+    * entities.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRESOLVED
+    * UNRESOLVED(0)} - Entity is whole, e.g., VM creation is complete and all the required model
+    * objects and VC backings are created.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#RESOLVED
+    * RESOLVED(1)} - Entity is resolved.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#DEPLOYED
+    * DEPLOYED(2)} - Entity is deployed.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#SUSPENDED
+    * SUSPENDED(3)} - All VMs of the vApp are suspended.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_ON
+    * POWERED_ON(4)} - All VMs of the vApp are powered on.
+    * <li>
+    * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#WAITING_FOR_INPUT
+    * WAITING_FOR_INPUT(5)} - VM is pending response on a question.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNKNOWN
+    * UNKNOWN(6)} - Entity state could not be retrieved from the inventory, e.g., VM power state is
+    * null.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#UNRECOGNIZED
+    * UNRECOGNIZED(7)} - Entity state was retrieved from the inventory but could not be mapped to an
+    * internal state.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#POWERED_OFF
+    * POWERED_OFF(8)} - All VMs of the vApp are powered off.
+    * <li>
+    * {@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#INCONSISTENT_STATE
+    * INCONSISTENT_STATE(9)} - Apply to VM status, if a vm is {@code POWERED_ON}, or
+    * {@code WAITING_FOR_INPUT}, but is undeployed, it is in an inconsistent state.
+    * <li>{@link org.jclouds.vcloud.director.v1_5.domain.ResourceEntityType.Status#MIXED MIXED(10)}
+    * - vApp status is set to {@code MIXED} when the VMs in the vApp are in different power states
+    * </ul>
+    *
+    * <pre>
+    * GET /vApp/{id}
+    * </pre>
+    *
+    * @since 0.9
+    */
+   @GET
+   @Consumes(VAPP)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VApp get(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#edit(URI, VApp)
+    */
+   @PUT
+   @Produces(VAPP)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) VApp vApp);
+
+   /**
+    * @see VAppApi#remove(URI)
+    */
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editControlAccess(URI, ControlAccessParams)
+    */
+   @POST
+   @Path("/action/controlAccess")
+   @Produces(CONTROL_ACCESS)
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   ControlAccessParams editControlAccess(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
+
+   /**
+    * @see VAppApi#deploy(URI, DeployVAppParams)
+    */
+   @POST
+   @Path("/action/deploy")
+   @Produces(DEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task deploy(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+
+   /**
+    * @see VAppApi#discardSuspendedState(URI)
+    */
+   @POST
+   @Path("/action/discardSuspendedState")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task discardSuspendedState(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#enterMaintenanceMode(URI)
+    */
+   @POST
+   @Path("/action/enterMaintenanceMode")
+   @Consumes
+   @JAXBResponseParser
+   void enterMaintenanceMode(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#exitMaintenanceMode(URI)
+    */
+   @POST
+   @Path("/action/exitMaintenanceMode")
+   @Consumes
+   @JAXBResponseParser
+   void exitMaintenanceMode(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#recompose(URI, RecomposeVAppParams)
+    */
+   @POST
+   @Path("/action/recomposeVApp")
+   @Produces(RECOMPOSE_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task recompose(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
+
+   /**
+    * @see VAppApi#undeploy(URI, UndeployVAppParams)
+    */
+   @POST
+   @Path("/action/undeploy")
+   @Produces(UNDEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task undeploy(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+
+   /**
+    * @see VAppApi#getAccessControl(URI)
+    */
+   @GET
+   @Path("/controlAccess")
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ControlAccessParams getAccessControl(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#powerOff(URI)
+    */
+   @POST
+   @Path("/power/action/powerOff")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOff(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#powerOn(URI)
+    */
+   @POST
+   @Path("/power/action/powerOn")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOn(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#reboot(URI)
+    */
+   @POST
+   @Path("/power/action/reboot")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reboot(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#reset(URI)
+    */
+   @POST
+   @Path("/power/action/reset")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reset(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#shutdown(URI)
+    */
+   @POST
+   @Path("/power/action/shutdown")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task shutdown(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#suspend(URI)
+    */
+   @POST
+   @Path("/power/action/suspend")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task suspend(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#getLeaseSettingsSection(URI)
+    */
+   @GET
+   @Path("/leaseSettingsSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   LeaseSettingsSection getLeaseSettingsSection(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editLeaseSettingsSection(URI, LeaseSettingsSection)
+    */
+   @PUT
+   @Path("/leaseSettingsSection")
+   @Produces(LEASE_SETTINGS_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editLeaseSettingsSection(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
+
+   /**
+    * @see VAppApi#getNetworkConfigSection(URI)
+    */
+   @GET
+   @Path("/networkConfigSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConfigSection getNetworkConfigSection(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editNetworkConfigSection(URI, NetworkConfigSection)
+    */
+   @PUT
+   @Path("/networkConfigSection")
+   @Produces(NETWORK_CONFIG_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editNetworkConfigSection(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
+
+   /**
+    * @see VAppApi#getNetworkSection(URI)
+    */
+   @GET
+   @Path("/networkSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkSection getNetworkSection(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#getOwner(URI)
+    */
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editOwner(URI, Owner)
+    */
+   @PUT
+   @Path("/owner")
+   @Produces(OWNER)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   void editOwner(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) Owner owner);
+
+   /**
+    * @see VAppApi#getProductSections(URI)
+    */
+   @GET
+   @Path("/productSections")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editProductSections(URI, ProductSectionList)
+    */
+   @PUT
+   @Path("/productSections")
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
+
+   /**
+    * @see VAppApi#getStartupSection(URI)
+    */
+   @GET
+   @Path("/startupSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   StartupSection getStartupSection(@EndpointParam URI vAppHref);
+
+   /**
+    * @see VAppApi#editStartupSection(URI, StartupSection)
+    */
+   @PUT
+   @Path("/startupSection")
+   @Produces(STARTUP_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editStartupSection(@EndpointParam URI vAppHref,
+         @BinderParam(BindToXMLPayload.class) StartupSection section);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
deleted file mode 100644
index b42006e..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppAsyncApi.java
+++ /dev/null
@@ -1,624 +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.features;
-
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.DEPLOY_VAPP_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RECOMPOSE_VAPP_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.STARTUP_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.UNDEPLOY_VAPP_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.dmtf.ovf.NetworkSection;
-import org.jclouds.dmtf.ovf.StartupSection;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.domain.Owner;
-import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.VApp;
-import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.DeployVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.RecomposeVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see VAppApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VAppAsyncApi {
-
-   /**
-    * @see VAppApi#get(String)
-    */
-   @GET
-   @Consumes(VAPP)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VApp> get(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#edit(String, VApp)
-    */
-   @PUT
-   @Produces(VAPP)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) VApp vApp);
-
-   /**
-    * @see VAppApi#remove(String)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editControlAccess(String, ControlAccessParams)
-    */
-   @POST
-   @Path("/action/controlAccess")
-   @Produces(CONTROL_ACCESS)
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   ListenableFuture<ControlAccessParams> editControlAccess(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
-
-   /**
-    * @see VAppApi#deploy(String, DeployVAppParams)
-    */
-   @POST
-   @Path("/action/deploy")
-   @Produces(DEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> deploy(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
-
-   /**
-    * @see VAppApi#discardSuspendedState(String)
-    */
-   @POST
-   @Path("/action/discardSuspendedState")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> discardSuspendedState(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#enterMaintenanceMode(String)
-    */
-   @POST
-   @Path("/action/enterMaintenanceMode")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> enterMaintenanceMode(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#exitMaintenanceMode(String)
-    */
-   @POST
-   @Path("/action/exitMaintenanceMode")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> exitMaintenanceMode(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#recompose(String, RecomposeVAppParams)
-    */
-   @POST
-   @Path("/action/recomposeVApp")
-   @Produces(RECOMPOSE_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> recompose(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
-
-   /**
-    * @see VAppApi#undeploy(String, UndeployVAppParams)
-    */
-   @POST
-   @Path("/action/undeploy")
-   @Produces(UNDEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> undeploy(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
-
-   /**
-    * @see VAppApi#getAccessControl(String)
-    */
-   @GET
-   @Path("/controlAccess")
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#powerOff(String)
-    */
-   @POST
-   @Path("/power/action/powerOff")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOff(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#powerOn(String)
-    */
-   @POST
-   @Path("/power/action/powerOn")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOn(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#reboot(String)
-    */
-   @POST
-   @Path("/power/action/reboot")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reboot(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#reset(String)
-    */
-   @POST
-   @Path("/power/action/reset")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#shutdown(String)
-    */
-   @POST
-   @Path("/power/action/shutdown")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> shutdown(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#suspend(String)
-    */
-   @POST
-   @Path("/power/action/suspend")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> suspend(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#getLeaseSettingsSection(String)
-    */
-   @GET
-   @Path("/leaseSettingsSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(
-            @EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editLeaseSettingsSection(String, LeaseSettingsSection)
-    */
-   @PUT
-   @Path("/leaseSettingsSection")
-   @Produces(LEASE_SETTINGS_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
-
-   /**
-    * @see VAppApi#getNetworkConfigSection(String)
-    */
-   @GET
-   @Path("/networkConfigSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConfigSection> getNetworkConfigSection(
-            @EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editNetworkConfigSection(String, NetworkConfigSection)
-    */
-   @PUT
-   @Path("/networkConfigSection")
-   @Produces(NETWORK_CONFIG_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editNetworkConfigSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
-
-   /**
-    * @see VAppApi#getNetworkSection(String)
-    */
-   @GET
-   @Path("/networkSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#getOwner(String)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editOwner(String, Owner)
-    */
-   @PUT
-   @Path("/owner")
-   @Produces(OWNER)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Void> editOwner(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) Owner owner);
-
-   /**
-    * @see VAppApi#getProductSections(String)
-    */
-   @GET
-   @Path("/productSections")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editProductSections(String, ProductSectionList)
-    */
-   @PUT
-   @Path("/productSections")
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
-
-   /**
-    * @see VAppApi#getStartupSection(String)
-    */
-   @GET
-   @Path("/startupSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<StartupSection> getStartupSection(@EndpointParam(parser = URNToHref.class) String vAppUrn);
-
-   /**
-    * @see VAppApi#editStartupSection(String, StartupSection)
-    */
-   @PUT
-   @Path("/startupSection")
-   @Produces(STARTUP_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editStartupSection(@EndpointParam(parser = URNToHref.class) String vAppUrn,
-            @BinderParam(BindToXMLPayload.class) StartupSection section);
-
-   /**
-    * @see VAppApi#get(URI)
-    */
-   @GET
-   @Consumes(VAPP)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VApp> get(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#edit(URI, VApp)
-    */
-   @PUT
-   @Produces(VAPP)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) VApp vApp);
-
-   /**
-    * @see VAppApi#remove(URI)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editControlAccess(URI, ControlAccessParams)
-    */
-   @POST
-   @Path("/action/controlAccess")
-   @Produces(CONTROL_ACCESS)
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   ListenableFuture<ControlAccessParams> editControlAccess(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
-
-   /**
-    * @see VAppApi#deploy(URI, DeployVAppParams)
-    */
-   @POST
-   @Path("/action/deploy")
-   @Produces(DEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> deploy(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
-
-   /**
-    * @see VAppApi#discardSuspendedState(URI)
-    */
-   @POST
-   @Path("/action/discardSuspendedState")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#enterMaintenanceMode(URI)
-    */
-   @POST
-   @Path("/action/enterMaintenanceMode")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> enterMaintenanceMode(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#exitMaintenanceMode(URI)
-    */
-   @POST
-   @Path("/action/exitMaintenanceMode")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> exitMaintenanceMode(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#recompose(URI, RecomposeVAppParams)
-    */
-   @POST
-   @Path("/action/recomposeVApp")
-   @Produces(RECOMPOSE_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> recompose(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) RecomposeVAppParams params);
-
-   /**
-    * @see VAppApi#undeploy(URI, UndeployVAppParams)
-    */
-   @POST
-   @Path("/action/undeploy")
-   @Produces(UNDEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> undeploy(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
-
-   /**
-    * @see VAppApi#getAccessControl(URI)
-    */
-   @GET
-   @Path("/controlAccess")
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#powerOff(URI)
-    */
-   @POST
-   @Path("/power/action/powerOff")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOff(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#powerOn(URI)
-    */
-   @POST
-   @Path("/power/action/powerOn")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOn(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#reboot(URI)
-    */
-   @POST
-   @Path("/power/action/reboot")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reboot(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#reset(URI)
-    */
-   @POST
-   @Path("/power/action/reset")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#shutdown(URI)
-    */
-   @POST
-   @Path("/power/action/shutdown")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> shutdown(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#suspend(URI)
-    */
-   @POST
-   @Path("/power/action/suspend")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> suspend(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#getLeaseSettingsSection(URI)
-    */
-   @GET
-   @Path("/leaseSettingsSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editLeaseSettingsSection(URI, LeaseSettingsSection)
-    */
-   @PUT
-   @Path("/leaseSettingsSection")
-   @Produces(LEASE_SETTINGS_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) LeaseSettingsSection section);
-
-   /**
-    * @see VAppApi#getNetworkConfigSection(URI)
-    */
-   @GET
-   @Path("/networkConfigSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editNetworkConfigSection(URI, NetworkConfigSection)
-    */
-   @PUT
-   @Path("/networkConfigSection")
-   @Produces(NETWORK_CONFIG_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editNetworkConfigSection(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
-
-   /**
-    * @see VAppApi#getNetworkSection(URI)
-    */
-   @GET
-   @Path("/networkSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#getOwner(URI)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editOwner(URI, Owner)
-    */
-   @PUT
-   @Path("/owner")
-   @Produces(OWNER)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Void> editOwner(@EndpointParam URI vAppHref, @BinderParam(BindToXMLPayload.class) Owner owner);
-
-   /**
-    * @see VAppApi#getProductSections(URI)
-    */
-   @GET
-   @Path("/productSections")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editProductSections(URI, ProductSectionList)
-    */
-   @PUT
-   @Path("/productSections")
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
-
-   /**
-    * @see VAppApi#getStartupSection(URI)
-    */
-   @GET
-   @Path("/startupSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<StartupSection> getStartupSection(@EndpointParam URI vAppHref);
-
-   /**
-    * @see VAppApi#editStartupSection(URI, StartupSection)
-    */
-   @PUT
-   @Path("/startupSection")
-   @Produces(STARTUP_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editStartupSection(@EndpointParam URI vAppHref,
-            @BinderParam(BindToXMLPayload.class) StartupSection section);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
index ab76580..df1ad86 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateApi.java
@@ -16,9 +16,33 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CUSTOMIZATION_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
 import org.jclouds.dmtf.ovf.NetworkSection;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Owner;
 import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
 import org.jclouds.vcloud.director.v1_5.domain.References;
@@ -28,12 +52,10 @@ import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
 import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link VAppTemplate} objects.
- * 
- * @see VAppTemplateAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VAppTemplateApi {
 
    /**
@@ -68,9 +90,17 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the requested template
     */
-   VAppTemplate get(String templateUrn);
-
-   VAppTemplate get(URI templateHref);
+   @GET
+   @Consumes(VAPP_TEMPLATE)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VAppTemplate get(@EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(VAPP_TEMPLATE)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VAppTemplate get(@EndpointParam URI reference);
 
    /**
     * Modifies only the name/description of a vApp template.
@@ -86,9 +116,19 @@ public interface VAppTemplateApi {
     * @return the task performing the action. This operation is asynchronous and the user should
     *         monitor the returned task status in order to check when it is completed.
     */
-   Task edit(String templateUrn, VAppTemplate template);
-
-   Task edit(URI templateHref, VAppTemplate template);
+   @PUT
+   @Produces(VAPP_TEMPLATE)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToHref.class) String templateUrn,
+         @BinderParam(BindToXMLPayload.class) VAppTemplate template);
+
+   @PUT
+   @Produces(VAPP_TEMPLATE)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI templateHref,
+         @BinderParam(BindToXMLPayload.class) VAppTemplate template);
 
    /**
     * Deletes a vApp template.
@@ -102,9 +142,15 @@ public interface VAppTemplateApi {
     * @return the task performing the action. This operation is asynchronous and the user should
     *         monitor the returned task status in order to check when it is completed.
     */
-   Task remove(String templateUrn);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam String templateUrn);
 
-   Task remove(URI templateHref);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam URI templateUri);
 
    /**
     * Disables the download link to the ovf of a vApp template.
@@ -116,9 +162,15 @@ public interface VAppTemplateApi {
     * @param templateUrn
     *           the String of the template
     */
-   void disableDownload(String templateUrn);
+   @POST
+   @Path("/action/disableDownload")
+   @JAXBResponseParser
+   void disableDownload(@EndpointParam(parser = URNToHref.class) String templateUrn);
 
-   void disableDownload(URI templateHref);
+   @POST
+   @Path("/action/disableDownload")
+   @JAXBResponseParser
+   void disableDownload(@EndpointParam URI templateHref);
 
    /**
     * Enables downloading of the ovf of a vApp template.
@@ -132,9 +184,17 @@ public interface VAppTemplateApi {
     * @return the task performing the action. This operation is asynchronous and the user should
     *         monitor the returned task status in order to check when it is completed.
     */
-   Task enableDownload(String templateUrn);
-
-   Task enableDownload(URI templateHref);
+   @POST
+   @Consumes(TASK)
+   @Path("/action/enableDownload")
+   @JAXBResponseParser
+   Task enableDownload(@EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @POST
+   @Consumes(TASK)
+   @Path("/action/enableDownload")
+   @JAXBResponseParser
+   Task enableDownload(@EndpointParam URI templateHref);
 
    /**
     * Retrieves the customization section of a vApp template.
@@ -147,9 +207,20 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the customization section
     */
-   CustomizationSection getCustomizationSection(String templateUrn);
-
-   CustomizationSection getCustomizationSection(URI templateHref);
+   @GET
+   @Consumes(CUSTOMIZATION_SECTION)
+   @Path("/customizationSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   CustomizationSection getCustomizationSection(
+         @EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(CUSTOMIZATION_SECTION)
+   @Path("/customizationSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   CustomizationSection getCustomizationSection(@EndpointParam URI templateHref);
 
    /**
     * Retrieves the lease settings section of a vApp or vApp template
@@ -162,9 +233,20 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the lease settings
     */
-   LeaseSettingsSection getLeaseSettingsSection(String templateUrn);
-
-   LeaseSettingsSection getLeaseSettingsSection(URI templateHref);
+   @GET
+   @Consumes(LEASE_SETTINGS_SECTION)
+   @Path("/leaseSettingsSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   LeaseSettingsSection getLeaseSettingsSection(
+         @EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(LEASE_SETTINGS_SECTION)
+   @Path("/leaseSettingsSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   LeaseSettingsSection getLeaseSettingsSection(@EndpointParam URI templateHref);
 
    /**
     * Modifies the lease settings section of a vApp or vApp template.
@@ -175,14 +257,27 @@ public interface VAppTemplateApi {
     * 
     * @param templateUrn
     *           the String of the template
-    * @param section
+    * @param settingsSection
     *           the new configuration to apply
     * @return the task performing the action. This operation is asynchronous and the user should
     *         monitor the returned task status in order to check when it is completed.
     */
-   Task editLeaseSettingsSection(String templateUrn, LeaseSettingsSection section);
-
-   Task editLeaseSettingsSection(URI templateHref, LeaseSettingsSection section);
+   @PUT
+   @Produces(LEASE_SETTINGS_SECTION)
+   @Consumes(TASK)
+   @Path("/leaseSettingsSection")
+   @JAXBResponseParser
+   Task editLeaseSettingsSection(
+         @EndpointParam(parser = URNToHref.class) String templateUrn,
+         @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
+
+   @PUT
+   @Produces(LEASE_SETTINGS_SECTION)
+   @Consumes(TASK)
+   @Path("/leaseSettingsSection")
+   @JAXBResponseParser
+   Task editLeaseSettingsSection(@EndpointParam URI templateHref,
+         @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
 
    /**
     * Retrieves the network config section of a vApp or vApp template.
@@ -195,9 +290,20 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the network config section requested
     */
-   NetworkConfigSection getNetworkConfigSection(String templateUrn);
-
-   NetworkConfigSection getNetworkConfigSection(URI templateHref);
+   @GET
+   @Consumes(NETWORK_CONFIG_SECTION)
+   @Path("/networkConfigSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConfigSection getNetworkConfigSection(
+         @EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(NETWORK_CONFIG_SECTION)
+   @Path("/networkConfigSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConfigSection getNetworkConfigSection(@EndpointParam URI templateHref);
 
    /**
     * Retrieves the network section of a vApp or vApp template.
@@ -210,9 +316,20 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the network section requested
     */
-   NetworkSection getNetworkSection(String templateUrn);
-
-   NetworkSection getNetworkSection(URI templateHref);
+   @GET
+   @Consumes(NETWORK_SECTION)
+   @Path("/networkSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkSection getNetworkSection(
+         @EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(NETWORK_SECTION)
+   @Path("/networkSection")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkSection getNetworkSection(@EndpointParam URI templateHref);
 
    /**
     * Retrieves an OVF descriptor of a vApp template.
@@ -229,9 +346,19 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the ovf envelope
     */
-   Envelope getOvf(String templateUrn);
-
-   Envelope getOvf(URI templateHref);
+   @GET
+   @Consumes
+   @Path("/ovf")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Envelope getOvf(@EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes
+   @Path("/ovf")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Envelope getOvf(@EndpointParam URI templateHref);
 
    /**
     * Retrieves vApp template owner.
@@ -244,9 +371,19 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the owner of the vApp template
     */
-   Owner getOwner(String templateUrn);
-
-   Owner getOwner(URI templateHref);
+   @GET
+   @Consumes(OWNER)
+   @Path("/owner")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(OWNER)
+   @Path("/owner")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam URI templateHref);
 
    /**
     * Retrieves VAppTemplate/VM product sections
@@ -259,9 +396,20 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return the product sections
     */
-   ProductSectionList getProductSections(String templateUrn);
-
-   ProductSectionList getProductSections(URI templateHref);
+   @GET
+   @Consumes(PRODUCT_SECTION_LIST)
+   @Path("/productSections")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(
+         @EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes(PRODUCT_SECTION_LIST)
+   @Path("/productSections")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(@EndpointParam URI templateHref);
 
    /**
     * Modifies the product sections of a vApp or vApp template.
@@ -275,9 +423,21 @@ public interface VAppTemplateApi {
     * @return the task performing the action. This operation is asynchronous and the user should
     *         monitor the returned task status in order to check when it is completed.
     */
-   Task editProductSections(String templateUrn, ProductSectionList sections);
-
-   Task editProductSections(URI templateHref, ProductSectionList sections);
+   @PUT
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @Path("/productSections")
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam(parser = URNToHref.class) String templateUrn,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
+
+   @PUT
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @Path("/productSections")
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam URI templateHref,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
 
    /**
     * <pre>
@@ -288,7 +448,17 @@ public interface VAppTemplateApi {
     *           the String of the template
     * @return shadowVM references
     */
-   References getShadowVms(String templateUrn);
-
-   References getShadowVms(URI templateHref);
+   @GET
+   @Consumes
+   @Path("/shadowVms")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   References getShadowVms(@EndpointParam(parser = URNToHref.class) String templateUrn);
+
+   @GET
+   @Consumes
+   @Path("/shadowVms")
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   References getShadowVms(@EndpointParam URI templateHref);
 }


[2/5] JCLOUDS-40 unasync vcloud-director

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
deleted file mode 100644
index 908197e..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmAsyncApi.java
+++ /dev/null
@@ -1,974 +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.features;
-
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ANY_IMAGE;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.DEPLOY_VAPP_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.MEDIA_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OPERATING_SYSTEM_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OVF_RASD_ITEM;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RELOCATE_VM_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.UNDEPLOY_VAPP_PARAMS;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VIRTUAL_HARDWARE_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VM;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VM_PENDING_ANSWER;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
-import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
-import org.jclouds.vcloud.director.v1_5.domain.ScreenTicket;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.Vm;
-import org.jclouds.vcloud.director.v1_5.domain.VmPendingQuestion;
-import org.jclouds.vcloud.director.v1_5.domain.VmQuestionAnswer;
-import org.jclouds.vcloud.director.v1_5.domain.dmtf.RasdItem;
-import org.jclouds.vcloud.director.v1_5.domain.params.DeployVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.MediaInsertOrEjectParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
-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;
-import org.jclouds.vcloud.director.v1_5.domain.section.OperatingSystemSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.RuntimeInfoSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.VirtualHardwareSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.ReturnPayloadBytes;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see VmApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VmAsyncApi {
-
-   /**
-    * @see VmApi#get(String)
-    */
-   @GET
-   @Consumes(VM)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Vm> get(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#edit(String, Vm)
-    */
-   @PUT
-   @Produces(VM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) Vm vApp);
-
-   /**
-    * @see VmApi#remove(String)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#consolidate(String)
-    */
-   @POST
-   @Path("/action/consolidate")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> consolidate(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#deploy(String, DeployVAppParams)
-    */
-   @POST
-   @Path("/action/deploy")
-   @Produces(DEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> deploy(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
-
-   /**
-    * @see VmApi#discardSuspendedState(String)
-    */
-   @POST
-   @Path("/action/discardSuspendedState")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> discardSuspendedState(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#installVMwareTools(String)
-    */
-   @POST
-   @Path("/action/installVMwareTools")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> installVMwareTools(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#relocate(String, RelocateParams)
-    */
-   @POST
-   @Path("/action/relocate")
-   @Produces(RELOCATE_VM_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> relocate(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RelocateParams params);
-
-   /**
-    * @see VmApi#undeploy(String, UndeployVAppParams)
-    */
-   @POST
-   @Path("/action/undeploy")
-   @Produces(UNDEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> undeploy(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
-
-   /**
-    * @see VmApi#upgradeHardwareVersion(String)
-    */
-   @POST
-   @Path("/action/upgradeHardwareVersion")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> upgradeHardwareVersion(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#powerOff(String)
-    */
-   @POST
-   @Path("/power/action/powerOff")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOff(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#powerOn(String)
-    */
-   @POST
-   @Path("/power/action/powerOn")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOn(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#reboot(String)
-    */
-   @POST
-   @Path("/power/action/reboot")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reboot(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#reset(String)
-    */
-   @POST
-   @Path("/power/action/reset")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#shutdown(String)
-    */
-   @POST
-   @Path("/power/action/shutdown")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> shutdown(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#suspend(String)
-    */
-   @POST
-   @Path("/power/action/suspend")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> suspend(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#getGuestCustomizationSection(String)
-    */
-   @GET
-   @Path("/guestCustomizationSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editGuestCustomizationSection(String, GuestCustomizationSection)
-    */
-   @PUT
-   @Path("/guestCustomizationSection")
-   @Produces(GUEST_CUSTOMIZATION_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editGuestCustomizationSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
-
-   /**
-    * @see VmApi#ejectMedia(String, MediaInsertOrEjectParams)
-    */
-   @POST
-   @Path("/media/action/ejectMedia")
-   @Produces(MEDIA_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> ejectMedia(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
-
-   /**
-    * @see VmApi#insertMedia(String, MediaInsertOrEjectParams)
-    */
-   @POST
-   @Path("/media/action/insertMedia")
-   @Produces(MEDIA_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> insertMedia(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
-
-   /**
-    * @see VmApi#getNetworkConnectionSection(String)
-    */
-   @GET
-   @Path("/networkConnectionSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editNetworkConnectionSection(String, NetworkConnectionSection)
-    */
-   @PUT
-   @Path("/networkConnectionSection")
-   @Produces(NETWORK_CONNECTION_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editNetworkConnectionSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
-
-   /**
-    * @see VmApi#getOperatingSystemSection(String)
-    */
-   @GET
-   @Path("/operatingSystemSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OperatingSystemSection> getOperatingSystemSection(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editOperatingSystemSection(String, OperatingSystemSection)
-    */
-   @PUT
-   @Path("/operatingSystemSection")
-   @Produces(OPERATING_SYSTEM_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editOperatingSystemSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
-
-   /**
-    * @see VmApi#getProductSections(String)
-    */
-   @GET
-   @Path("/productSections")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editProductSections(String, ProductSectionList)
-    */
-   @PUT
-   @Path("/productSections")
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
-
-   /**
-    * @see VmApi#getPendingQuestion(String)
-    */
-   @GET
-   @Path("/question")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VmPendingQuestion> getPendingQuestion(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#answerQuestion(String, VmQuestionAnswer)
-    */
-   @POST
-   @Path("/question/action/answer")
-   @Produces(VM_PENDING_ANSWER)
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> answerQuestion(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
-
-   /**
-    * @see VmApi#getRuntimeInfoSection(String)
-    */
-   @GET
-   @Path("/runtimeInfoSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RuntimeInfoSection> getRuntimeInfoSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#getScreenImage(String)
-    */
-   @GET
-   @Path("/screen")
-   @Consumes(ANY_IMAGE)
-   @Fallback(NullOnNotFoundOr404.class)
-   @ResponseParser(ReturnPayloadBytes.class)
-   ListenableFuture<byte[]> getScreenImage(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#getScreenTicket(String)
-    */
-   @POST
-   @Path("/screen/action/acquireTicket")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ScreenTicket> getScreenTicket(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#getVirtualHardwareSection(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VirtualHardwareSection> getVirtualHardwareSection(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSection(String, VirtualHardwareSection)
-    */
-   @PUT
-   @Path("/virtualHardwareSection")
-   @Produces(VIRTUAL_HARDWARE_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionCpu(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/cpu")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItem> getVirtualHardwareSectionCpu(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionCpu(String, ResourceAllocationSettingData)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/cpu")
-   @Produces(OVF_RASD_ITEM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionCpu(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RasdItem rasd);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionDisks(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/disks")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionDisks(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionDisks(String, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/disks")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionDisks(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionMedia(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/media")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionMedia(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionMemory(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/memory")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItem> getVirtualHardwareSectionMemory(@EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionMemory(String, ResourceAllocationSettingData)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/memory")
-   @Produces(OVF_RASD_ITEM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionMemory(@EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RasdItem rasd);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionNetworkCards(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/networkCards")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionNetworkCards(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionNetworkCards(String, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/networkCards")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionNetworkCards(
-            @EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionSerialPorts(String)
-    */
-   @GET
-   @Path("/virtualHardwareSection/serialPorts")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionSerialPorts(
-            @EndpointParam(parser = URNToHref.class) String vmUrn);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionSerialPorts(String, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/serialPorts")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionSerialPorts(
-            @EndpointParam(parser = URNToHref.class) String vmUrn,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-
-   /**
-    * @see VmApi#get(URI)
-    */
-   @GET
-   @Consumes(VM)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Vm> get(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#edit(URI, Vm)
-    */
-   @PUT
-   @Produces(VM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) Vm vApp);
-
-   /**
-    * @see VmApi#remove(URI)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#consolidate(URI)
-    */
-   @POST
-   @Path("/action/consolidate")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> consolidate(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#deploy(URI, DeployVAppParams)
-    */
-   @POST
-   @Path("/action/deploy")
-   @Produces(DEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> deploy(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
-
-   /**
-    * @see VmApi#discardSuspendedState(URI)
-    */
-   @POST
-   @Path("/action/discardSuspendedState")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> discardSuspendedState(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#installVMwareTools(URI)
-    */
-   @POST
-   @Path("/action/installVMwareTools")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> installVMwareTools(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#relocate(URI, RelocateParams)
-    */
-   @POST
-   @Path("/action/relocate")
-   @Produces(RELOCATE_VM_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> relocate(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) RelocateParams params);
-
-   /**
-    * @see VmApi#undeploy(URI, UndeployVAppParams)
-    */
-   @POST
-   @Path("/action/undeploy")
-   @Produces(UNDEPLOY_VAPP_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> undeploy(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
-
-   /**
-    * @see VmApi#upgradeHardwareVersion(URI)
-    */
-   @POST
-   @Path("/action/upgradeHardwareVersion")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> upgradeHardwareVersion(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#powerOff(URI)
-    */
-   @POST
-   @Path("/power/action/powerOff")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOff(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#powerOn(URI)
-    */
-   @POST
-   @Path("/power/action/powerOn")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> powerOn(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#reboot(URI)
-    */
-   @POST
-   @Path("/power/action/reboot")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reboot(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#reset(URI)
-    */
-   @POST
-   @Path("/power/action/reset")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#shutdown(URI)
-    */
-   @POST
-   @Path("/power/action/shutdown")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> shutdown(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#suspend(URI)
-    */
-   @POST
-   @Path("/power/action/suspend")
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> suspend(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#getGuestCustomizationSection(URI)
-    */
-   @GET
-   @Path("/guestCustomizationSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<GuestCustomizationSection> getGuestCustomizationSection(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editGuestCustomizationSection(URI, GuestCustomizationSection)
-    */
-   @PUT
-   @Path("/guestCustomizationSection")
-   @Produces(GUEST_CUSTOMIZATION_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editGuestCustomizationSection(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
-
-   /**
-    * @see VmApi#ejectMedia(URI, MediaInsertOrEjectParams)
-    */
-   @POST
-   @Path("/media/action/ejectMedia")
-   @Produces(MEDIA_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> ejectMedia(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
-
-   /**
-    * @see VmApi#insertMedia(URI, MediaInsertOrEjectParams)
-    */
-   @POST
-   @Path("/media/action/insertMedia")
-   @Produces(MEDIA_PARAMS)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> insertMedia(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
-
-   /**
-    * @see VmApi#getNetworkConnectionSection(URI)
-    */
-   @GET
-   @Path("/networkConnectionSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConnectionSection> getNetworkConnectionSection(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editNetworkConnectionSection(URI, NetworkConnectionSection)
-    */
-   @PUT
-   @Path("/networkConnectionSection")
-   @Produces(NETWORK_CONNECTION_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editNetworkConnectionSection(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
-
-   /**
-    * @see VmApi#getOperatingSystemSection(URI)
-    */
-   @GET
-   @Path("/operatingSystemSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OperatingSystemSection> getOperatingSystemSection(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editOperatingSystemSection(URI, OperatingSystemSection)
-    */
-   @PUT
-   @Path("/operatingSystemSection")
-   @Produces(OPERATING_SYSTEM_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editOperatingSystemSection(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
-
-   /**
-    * @see VmApi#getProductSections(URI)
-    */
-   @GET
-   @Path("/productSections")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editProductSections(URI, ProductSectionList)
-    */
-   @PUT
-   @Path("/productSections")
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
-
-   /**
-    * @see VmApi#getPendingQuestion(URI)
-    */
-   @GET
-   @Path("/question")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VmPendingQuestion> getPendingQuestion(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#answerQuestion(URI, VmQuestionAnswer)
-    */
-   @POST
-   @Path("/question/action/answer")
-   @Produces(VM_PENDING_ANSWER)
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> answerQuestion(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
-
-   /**
-    * @see VmApi#getRuntimeInfoSection(URI)
-    */
-   @GET
-   @Path("/runtimeInfoSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RuntimeInfoSection> getRuntimeInfoSection(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#getScreenImage(URI)
-    */
-   @GET
-   @Path("/screen")
-   @Consumes(ANY_IMAGE)
-   @Fallback(NullOnNotFoundOr404.class)
-   @ResponseParser(ReturnPayloadBytes.class)
-   ListenableFuture<byte[]> getScreenImage(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#getScreenTicket(URI)
-    */
-   @POST
-   @Path("/screen/action/acquireTicket")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ScreenTicket> getScreenTicket(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#getVirtualHardwareSection(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VirtualHardwareSection> getVirtualHardwareSection(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSection(URI, VirtualHardwareSection)
-    */
-   @PUT
-   @Path("/virtualHardwareSection")
-   @Produces(VIRTUAL_HARDWARE_SECTION)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSection(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionCpu(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/cpu")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItem> getVirtualHardwareSectionCpu(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionCpu(URI, ResourceAllocationSettingData)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/cpu")
-   @Produces(OVF_RASD_ITEM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionCpu(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) RasdItem rasd);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionDisks(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/disks")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionDisks(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionDisks(URI, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/disks")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionDisks(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionMedia(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/media")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionMedia(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionMemory(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/memory")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItem> getVirtualHardwareSectionMemory(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionMemory(URI, ResourceAllocationSettingData)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/memory")
-   @Produces(OVF_RASD_ITEM)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionMemory(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) RasdItem rasd);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionNetworkCards(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/networkCards")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionNetworkCards(URI, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/networkCards")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-
-   /**
-    * @see VmApi#getVirtualHardwareSectionSerialPorts(URI)
-    */
-   @GET
-   @Path("/virtualHardwareSection/serialPorts")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<RasdItemsList> getVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref);
-
-   /**
-    * @see VmApi#editVirtualHardwareSectionSerialPorts(URI, RasdItemsList)
-    */
-   @PUT
-   @Path("/virtualHardwareSection/serialPorts")
-   @Produces(OVF_RASD_ITEMS_LIST)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> editVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref,
-            @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
index 72d9839..275a5b0 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogApi.java
@@ -16,19 +16,37 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_CATALOG;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
 import org.jclouds.vcloud.director.v1_5.domain.Owner;
 import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
 import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
 
-/**
- * Provides synchronous access to {@link AdminCatalog} objects.
- * 
- * @see AdminCatalogAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminCatalogApi extends CatalogApi {
 
    /**
@@ -42,9 +60,21 @@ public interface AdminCatalogApi extends CatalogApi {
     *           the urn for the org
     * @return contains a , which will point to the running asynchronous creation operation.
     */
-   AdminCatalog addCatalogToOrg(AdminCatalog catalog, String orgUrn);
+   @POST
+   @Path("/catalogs")
+   @Consumes(ADMIN_CATALOG)
+   @Produces(ADMIN_CATALOG)
+   @JAXBResponseParser
+   AdminCatalog addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
+         @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   AdminCatalog addCatalogToOrg(AdminCatalog catalog, URI catalogAdminHref);
+   @POST
+   @Path("/catalogs")
+   @Consumes(ADMIN_CATALOG)
+   @Produces(ADMIN_CATALOG)
+   @JAXBResponseParser
+   AdminCatalog addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
+         @EndpointParam URI orgHref);
 
    /**
     * Retrieves a catalog.
@@ -58,10 +88,18 @@ public interface AdminCatalogApi extends CatalogApi {
     * @return a catalog
     */
    @Override
-   AdminCatalog get(String catalogUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminCatalog get(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
    
    @Override
-   AdminCatalog get(URI catalogAdminHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminCatalog get(@EndpointParam URI orgHref);
 
    /**
     * Modifies a catalog. A catalog could be published or unpublished. The IsPublished property is
@@ -74,9 +112,19 @@ public interface AdminCatalogApi extends CatalogApi {
     * 
     * @return the edited catalog
     */
-   AdminCatalog edit(String catalogUrn, AdminCatalog catalog);
+   @PUT
+   @Consumes(ADMIN_CATALOG)
+   @Produces(ADMIN_CATALOG)
+   @JAXBResponseParser
+   AdminCatalog edit(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
+         @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
 
-   AdminCatalog edit(URI catalogAdminHref, AdminCatalog catalog);
+   @PUT
+   @Consumes(ADMIN_CATALOG)
+   @Produces(ADMIN_CATALOG)
+   @JAXBResponseParser
+   AdminCatalog edit(@EndpointParam URI catalogAdminHref,
+         @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
 
    /**
     * Deletes a catalog. The catalog could be removed if it is either published or unpublished.
@@ -85,9 +133,15 @@ public interface AdminCatalogApi extends CatalogApi {
     * DELETE /admin/catalog/{id}
     * </pre>
     */
-   void remove(String catalogUrn);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
 
-   void remove(URI catalogAdminHref);
+   @DELETE
+   @Consumes
+   @JAXBResponseParser
+   void remove(@EndpointParam URI catalogAdminHref);
 
    /**
     * Retrieves the owner of a catalog.
@@ -98,9 +152,19 @@ public interface AdminCatalogApi extends CatalogApi {
     * 
     * @return the owner or null if not found
     */
-   Owner getOwner(String catalogUrn);
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
 
-   Owner getOwner(URI catalogAdminHref);
+   @GET
+   @Path("/owner")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Owner getOwner(@EndpointParam URI catalogAdminHref);
 
    /**
     * Changes owner for catalog.
@@ -109,22 +173,40 @@ public interface AdminCatalogApi extends CatalogApi {
     * PUT /admin/catalog/{id}/owner
     * </pre>
     */
-   void setOwner(String catalogUrn, Owner newOwner);
-
-   void setOwner(URI catalogAdminHref, Owner newOwner);
+   @PUT
+   @Path("/owner")
+   @Consumes
+   @Produces(VCloudDirectorMediaType.OWNER)
+   @JAXBResponseParser
+   void setOwner(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
+         @BinderParam(BindToXMLPayload.class) Owner newOwner);
 
-   // TODO: lot of work to pass in a single boolean, would like to polymorphically include something
-   // like:
-   // void publishCatalog(String catalogUrn)
+   @PUT
+   @Path("/owner")
+   @Consumes
+   @Produces(VCloudDirectorMediaType.OWNER)
+   @JAXBResponseParser
+   void setOwner(@EndpointParam URI catalogAdminHref,
+         @BinderParam(BindToXMLPayload.class) Owner newOwner);
    
    /**
     * Publish a catalog. Publishing a catalog makes the catalog visible to all organizations in a
     * vCloud.
-    * @param orgUrn
     */
-   void publish(String catalogUrn, PublishCatalogParams params);
+   @POST
+   @Path("/action/publish")
+   @Consumes
+   @Produces(PUBLISH_CATALOG_PARAMS)
+   @JAXBResponseParser
+   void publish(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
+         @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
 
-   void publish(URI catalogAdminHref, PublishCatalogParams params);
+   @POST
+   @Path("/action/publish")
+   @Consumes
+   @Produces(PUBLISH_CATALOG_PARAMS)
+   @JAXBResponseParser
+   void publish(@EndpointParam URI catalogAdminHref, @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
 
    /**
     * Modifies a catalog control access.
@@ -135,9 +217,21 @@ public interface AdminCatalogApi extends CatalogApi {
     *
     * @return the control access information
     */
-   ControlAccessParams editAccessControl(String catalogUrn, ControlAccessParams params);
+   @POST
+   @Path("/action/controlAccess")
+   @Produces(CONTROL_ACCESS)
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   ControlAccessParams editAccessControl(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
+         @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
 
-   ControlAccessParams editAccessControl(URI catalogAdminHref, ControlAccessParams params);
+   @POST
+   @Path("/action/controlAccess")
+   @Produces(CONTROL_ACCESS)
+   @Consumes(CONTROL_ACCESS)
+   @JAXBResponseParser
+   ControlAccessParams editAccessControl(@EndpointParam URI catalogAdminHref,
+         @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
 
    /**
     * Retrieves the catalog control access information.
@@ -148,7 +242,17 @@ public interface AdminCatalogApi extends CatalogApi {
     *
     * @return the control access information
     */
-   ControlAccessParams getAccessControl(String catalogUrn);
-   
-   ControlAccessParams getAccessControl(URI catalogAdminHref);
+   @GET
+   @Path("/controlAccess")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ControlAccessParams getAccessControl(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
+
+   @GET
+   @Path("/controlAccess")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ControlAccessParams getAccessControl(@EndpointParam URI catalogAdminHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
deleted file mode 100644
index 8344902..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminCatalogAsyncApi.java
+++ /dev/null
@@ -1,238 +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.features.admin;
-
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CONTROL_ACCESS;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
-import org.jclouds.vcloud.director.v1_5.domain.Owner;
-import org.jclouds.vcloud.director.v1_5.domain.params.ControlAccessParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.PublishCatalogParams;
-import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see AdminCatalogApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface AdminCatalogAsyncApi extends CatalogAsyncApi {
-
-   /**
-    * @see AdminCatalogApi#addCatalogToOrg(AdminCatalog, String)
-    */
-   @POST
-   @Path("/catalogs")
-   @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @JAXBResponseParser
-   ListenableFuture<AdminCatalog> addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminCatalogApi#addCatalogToOrg(AdminCatalog, URI)
-    */
-   @POST
-   @Path("/catalogs")
-   @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @JAXBResponseParser
-   ListenableFuture<AdminCatalog> addCatalogToOrg(@BinderParam(BindToXMLPayload.class) AdminCatalog catalog,
-            @EndpointParam URI orgHref);
-
-   /**
-    * @see AdminCatalogApi#get(String)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminCatalog> get(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
-
-   /**
-    * @see AdminCatalogApi#get(URI)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminCatalog> get(@EndpointParam URI orgHref);
-
-   /**
-    * @see AdminCatalogApi#edit(String, AdminCatalog)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @JAXBResponseParser
-   ListenableFuture<AdminCatalog> edit(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
-            @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
-
-   /**
-    * @see AdminCatalogApi#edit(URI, AdminCatalog)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @Produces(VCloudDirectorMediaType.ADMIN_CATALOG)
-   @JAXBResponseParser
-   ListenableFuture<AdminCatalog> edit(@EndpointParam URI catalogAdminHref,
-            @BinderParam(BindToXMLPayload.class) AdminCatalog catalog);
-
-   /**
-    * @see AdminCatalogApi#remove(String)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
-
-   /**
-    * @see AdminCatalogApi#remove(URI)
-    */
-   @DELETE
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Void> remove(@EndpointParam URI catalogAdminHref);
-
-   /**
-    * @see AdminCatalogApi#getOwner(String)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
-
-   /**
-    * @see AdminCatalogApi#getOwner(URI)
-    */
-   @GET
-   @Path("/owner")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam URI catalogAdminHref);
-
-   /**
-    * @see AdminCatalogApi#setOwner(String, Owner)
-    */
-   @PUT
-   @Path("/owner")
-   @Consumes
-   @Produces(VCloudDirectorMediaType.OWNER)
-   @JAXBResponseParser
-   ListenableFuture<Void> setOwner(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
-            @BinderParam(BindToXMLPayload.class) Owner newOwner);
-
-   /**
-    * @see AdminCatalogApi#setOwner(URI, Owner)
-    */
-   @PUT
-   @Path("/owner")
-   @Consumes
-   @Produces(VCloudDirectorMediaType.OWNER)
-   @JAXBResponseParser
-   ListenableFuture<Void> setOwner(@EndpointParam URI catalogAdminHref,
-            @BinderParam(BindToXMLPayload.class) Owner newOwner);
-
-   /**
-    * @see AdminCatalogApi#publish(String, PublishCatalogParams)
-    */
-   @POST
-   @Path("/action/publish")
-   @Consumes
-   @Produces(VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Void> publish(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
-            @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
-
-   /**
-    * @see AdminCatalogApi#publish(URI, PublishCatalogParams)
-    */
-   @POST
-   @Path("/action/publish")
-   @Consumes
-   @Produces(VCloudDirectorMediaType.PUBLISH_CATALOG_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Void> publish(@EndpointParam URI catalogAdminHref,
-            @BinderParam(BindToXMLPayload.class) PublishCatalogParams params);
-
-   /**
-    * @see AdminCatalogApi#editAccessControl(String, ControlAccessParams)
-    */
-   @POST
-   @Path("/action/controlAccess")
-   @Produces(CONTROL_ACCESS)
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   ListenableFuture<ControlAccessParams> editAccessControl(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn,
-      @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
-
-   /**
-    * @see AdminCatalogApi#editAccessControl(URI, ControlAccessParams)
-    */
-   @POST
-   @Path("/action/controlAccess")
-   @Produces(CONTROL_ACCESS)
-   @Consumes(CONTROL_ACCESS)
-   @JAXBResponseParser
-   ListenableFuture<ControlAccessParams> editAccessControl(@EndpointParam URI catalogAdminHref,
-      @BinderParam(BindToXMLPayload.class) ControlAccessParams params);
-   
-   /**
-    * @see AdminCatalogApi#getAccessControl(String)
-    */
-   @GET
-   @Path("/controlAccess")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam(parser = URNToAdminHref.class) String catalogUrn);
-   
-   /**
-    * @see AdminCatalogApi#getAccessControl(URI)
-    */
-   @GET
-   @Path("/controlAccess")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ControlAccessParams> getAccessControl(@EndpointParam URI catalogAdminHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
index 4a1903d..67b9024 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkApi.java
@@ -16,18 +16,33 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ADMIN_ORG_NETWORK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.Task;
 import org.jclouds.vcloud.director.v1_5.domain.network.Network;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
 import org.jclouds.vcloud.director.v1_5.features.NetworkApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
 
-/**
- * Provides synchronous access to admin {@link Network} objects.
- * 
- * @see AdminNetworkAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminNetworkApi extends NetworkApi {
 
    /**
@@ -43,10 +58,18 @@ public interface AdminNetworkApi extends NetworkApi {
     * @return the network
     */
    @Override
-   Network get(String networkUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Network get(@EndpointParam(parser = URNToAdminHref.class) String networkUrn);
 
    @Override
-   Network get(URI networkAdminHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Network get(@EndpointParam URI networkAdminHref);
 
    /**
     * Modifies an org network
@@ -62,9 +85,19 @@ public interface AdminNetworkApi extends NetworkApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task
     *         status in order to check when it is completed.
     */
-   Task edit(String networkUrn, OrgNetwork network);
+   @PUT
+   @Consumes(TASK)
+   @Produces(ADMIN_ORG_NETWORK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToAdminHref.class) String networkUrn,
+         @BinderParam(BindToXMLPayload.class) OrgNetwork network);
 
-   Task edit(URI networkAdminHref, OrgNetwork network);
+   @PUT
+   @Consumes(TASK)
+   @Produces(ADMIN_ORG_NETWORK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI networkAdminHref,
+         @BinderParam(BindToXMLPayload.class) OrgNetwork network);
 
    /**
     * Reset(undeploy & redeploy) networking services on a logical network. The reset operation can
@@ -80,7 +113,15 @@ public interface AdminNetworkApi extends NetworkApi {
     * @return a task. This operation is asynchronous and the user should monitor the returned task
     *         status in order to check when it is completed.
     */
-   Task reset(String networkUrn);
-   
-   Task reset(URI networkAdminHref);
+   @POST
+   @Path("/action/reset")
+   @Consumes
+   @JAXBResponseParser
+   Task reset(@EndpointParam(parser = URNToAdminHref.class) String networkUrn);
+
+   @POST
+   @Path("/action/reset")
+   @Consumes
+   @JAXBResponseParser
+   Task reset(@EndpointParam URI networkAdminHref);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
deleted file mode 100644
index 573050b..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminNetworkAsyncApi.java
+++ /dev/null
@@ -1,108 +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.features.admin;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.network.Network;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgNetwork;
-import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see AdminNetworkApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface AdminNetworkAsyncApi extends NetworkAsyncApi {
-
-   /**
-    * @see AdminNetworkApi#get(String)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Network> get(@EndpointParam(parser = URNToAdminHref.class) String networkUrn);
-
-   /**
-    * @see AdminNetworkApi#get(URI)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Network> get(@EndpointParam URI networkAdminHref);
-
-   /**
-    * @see AdminNetworkApi#edit(String, OrgNetwork)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToAdminHref.class) String networkUrn,
-            @BinderParam(BindToXMLPayload.class) OrgNetwork network);
-
-   /**
-    * @see AdminNetworkApi#edit(URI, OrgNetwork)
-    */
-   @PUT
-   @Consumes(VCloudDirectorMediaType.TASK)
-   @Produces(VCloudDirectorMediaType.ADMIN_ORG_NETWORK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI networkAdminHref,
-            @BinderParam(BindToXMLPayload.class) OrgNetwork network);
-
-   /**
-    * @see AdminNetworkApi#reset(String)
-    */
-   @POST
-   @Path("/action/reset")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam(parser = URNToAdminHref.class) String networkUrn);
-
-   /**
-    * @see AdminNetworkApi#reset(URI)
-    */
-   @POST
-   @Path("/action/reset")
-   @Consumes
-   @JAXBResponseParser
-   ListenableFuture<Task> reset(@EndpointParam URI networkAdminHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
index 3fc7739..f8831f4 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgApi.java
@@ -16,8 +16,28 @@
  */
 package org.jclouds.vcloud.director.v1_5.features.admin;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_EMAIL_SETTINGS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_GENERAL_SETTINGS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_LEASE_SETTINGS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_SETTINGS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
 import org.jclouds.vcloud.director.v1_5.domain.org.OrgGeneralSettings;
@@ -27,12 +47,10 @@ 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.features.OrgApi;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
 
-/**
- * Provides synchronous access to {@link Org} objects.
- * 
- * @see AdminOrgAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface AdminOrgApi extends OrgApi {
 
    /**
@@ -48,10 +66,18 @@ public interface AdminOrgApi extends OrgApi {
     * @return the admin org
     */
    @Override
-   AdminOrg get(String orgUrn);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminOrg get(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
    @Override
-   AdminOrg get(URI orgAdminHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   AdminOrg get(@EndpointParam URI adminOrgHref);
 
    /**
     * Gets organizational settings for this organization.
@@ -64,9 +90,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the settings
     */
-   OrgSettings getSettings(String orgUrn);
+   @GET
+   @Path("/settings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgSettings getSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgSettings getSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgSettings getSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates organizational settings for this organization.
@@ -77,13 +113,25 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgSettings editSettings(String orgUrn, OrgSettings newSettings);
+   @PUT
+   @Path("/settings")
+   @Consumes(ORG_SETTINGS)
+   @Produces(ORG_SETTINGS)
+   @JAXBResponseParser
+   OrgSettings editSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgSettings settings);
 
-   OrgSettings editSettings(URI orgAdminHref, OrgSettings newSettings);
+   @PUT
+   @Path("/settings")
+   @Consumes(ORG_SETTINGS)
+   @Produces(ORG_SETTINGS)
+   @JAXBResponseParser
+   OrgSettings editSettings(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgSettings settings);
 
    /**
     * Retrieves email settings for an organization.
@@ -96,9 +144,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the email settings
     */
-   OrgEmailSettings getEmailSettings(String orgUrn);
+   @GET
+   @Path("/settings/email")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgEmailSettings getEmailSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgEmailSettings getEmailSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings/email")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgEmailSettings getEmailSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates email policy settings for organization.
@@ -109,13 +167,25 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgEmailSettings editEmailSettings(String orgUrn, OrgEmailSettings newSettings);
+   @PUT
+   @Path("/settings/email")
+   @Consumes(ORG_EMAIL_SETTINGS)
+   @Produces(ORG_EMAIL_SETTINGS)
+   @JAXBResponseParser
+   OrgEmailSettings editEmailSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
 
-   OrgEmailSettings editEmailSettings(URI orgAdminHref, OrgEmailSettings newSettings);
+   @PUT
+   @Path("/settings/email")
+   @Consumes(ORG_EMAIL_SETTINGS)
+   @Produces(ORG_EMAIL_SETTINGS)
+   @JAXBResponseParser
+   OrgEmailSettings editEmailSettings(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
 
    /**
     * Gets general organization settings.
@@ -128,9 +198,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the lease settings
     */
-   OrgGeneralSettings getGeneralSettings(String orgUrn);
+   @GET
+   @Path("/settings/general")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgGeneralSettings getGeneralSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgGeneralSettings getGeneralSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings/general")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgGeneralSettings getGeneralSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates general organization settings.
@@ -141,13 +221,25 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgGeneralSettings editGeneralSettings(String orgUrn, OrgGeneralSettings newSettings);
+   @PUT
+   @Path("/settings/general")
+   @Consumes(ORG_GENERAL_SETTINGS)
+   @Produces(ORG_GENERAL_SETTINGS)
+   @JAXBResponseParser
+   OrgGeneralSettings editGeneralSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
 
-   OrgGeneralSettings editGeneralSettings(URI orgAdminHref, OrgGeneralSettings newSettings);
+   @PUT
+   @Path("/settings/general")
+   @Consumes(ORG_GENERAL_SETTINGS)
+   @Produces(ORG_GENERAL_SETTINGS)
+   @JAXBResponseParser
+   OrgGeneralSettings editGeneralSettings(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
 
    /**
     * Retrieves LDAP settings for an organization.
@@ -160,9 +252,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the ldap settings
     */
-   OrgLdapSettings getLdapSettings(String orgUrn);
+   @GET
+   @Path("/settings/ldap")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgLdapSettings getLdapSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgLdapSettings getLdapSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings/ldap")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgLdapSettings getLdapSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Retrieves password policy settings for an organization.
@@ -175,9 +277,20 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the lease settings
     */
-   OrgPasswordPolicySettings getPasswordPolicy(String orgUrn);
+   @GET
+   @Path("/settings/passwordPolicy")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgPasswordPolicySettings getPasswordPolicy(
+         @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgPasswordPolicySettings getPasswordPolicy(URI orgAdminHref);
+   @GET
+   @Path("/settings/passwordPolicy")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgPasswordPolicySettings getPasswordPolicy(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates password policy settings for organization.
@@ -188,13 +301,25 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgPasswordPolicySettings editPasswordPolicy(String orgUrn, OrgPasswordPolicySettings newSettings);
+   @PUT
+   @Path("/settings/passwordPolicy")
+   @Consumes(ORG_PASSWORD_POLICY_SETTINGS)
+   @Produces(ORG_PASSWORD_POLICY_SETTINGS)
+   @JAXBResponseParser
+   OrgPasswordPolicySettings editPasswordPolicy(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
 
-   OrgPasswordPolicySettings editPasswordPolicy(URI orgAdminHref, OrgPasswordPolicySettings newSettings);
+   @PUT
+   @Path("/settings/passwordPolicy")
+   @Consumes(ORG_PASSWORD_POLICY_SETTINGS)
+   @Produces(ORG_PASSWORD_POLICY_SETTINGS)
+   @JAXBResponseParser
+   OrgPasswordPolicySettings editPasswordPolicy(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
 
    /**
     * Gets organization resource cleanup settings on the level of vApp.
@@ -207,9 +332,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the lease settings
     */
-   OrgLeaseSettings getVAppLeaseSettings(String orgUrn);
+   @GET
+   @Path("/settings/vAppLeaseSettings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgLeaseSettings getVAppLeaseSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgLeaseSettings getVAppLeaseSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings/vAppLeaseSettings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgLeaseSettings getVAppLeaseSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates organization resource cleanup settings on the level of vApp.
@@ -220,13 +355,25 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgLeaseSettings editVAppLeaseSettings(String orgUrn, OrgLeaseSettings newSettings);
+   @PUT
+   @Path("/settings/vAppLeaseSettings")
+   @Consumes(ORG_LEASE_SETTINGS)
+   @Produces(ORG_LEASE_SETTINGS)
+   @JAXBResponseParser
+   OrgLeaseSettings editVAppLeaseSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
 
-   OrgLeaseSettings editVAppLeaseSettings(URI orgAdminHref, OrgLeaseSettings newSettings);
+   @PUT
+   @Path("/settings/vAppLeaseSettings")
+   @Consumes(ORG_LEASE_SETTINGS)
+   @Produces(ORG_LEASE_SETTINGS)
+   @JAXBResponseParser
+   OrgLeaseSettings editVAppLeaseSettings(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
 
    /**
     * Retrieves expiration and storage policy for vApp templates in an organization.
@@ -239,9 +386,19 @@ public interface AdminOrgApi extends OrgApi {
     *           the reference for the admin org
     * @return the lease settings
     */
-   OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(String orgUrn);
+   @GET
+   @Path("/settings/vAppTemplateLeaseSettings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
 
-   OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(URI orgAdminHref);
+   @GET
+   @Path("/settings/vAppTemplateLeaseSettings")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OrgVAppTemplateLeaseSettings getVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref);
 
    /**
     * Updates vApp template policy settings for organization.
@@ -252,11 +409,23 @@ public interface AdminOrgApi extends OrgApi {
     * 
     * @param orgUrn
     *           the reference for the admin org
-    * @param newSettings
+    * @param settings
     *           the requested edited settings
     * @return the resultant settings
     */
-   OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(String orgUrn, OrgVAppTemplateLeaseSettings newSettings);
+   @PUT
+   @Path("/settings/vAppTemplateLeaseSettings")
+   @Consumes(ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+   @Produces(ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+   @JAXBResponseParser
+   OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
+         @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
 
-   OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(URI orgAdminHref, OrgVAppTemplateLeaseSettings newSettings);
+   @PUT
+   @Path("/settings/vAppTemplateLeaseSettings")
+   @Consumes(ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+   @Produces(ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
+   @JAXBResponseParser
+   OrgVAppTemplateLeaseSettings editVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref,
+         @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
deleted file mode 100644
index a0ee52c..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/admin/AdminOrgAsyncApi.java
+++ /dev/null
@@ -1,355 +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.features.admin;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.org.AdminOrg;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgEmailSettings;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgGeneralSettings;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgLdapSettings;
-import org.jclouds.vcloud.director.v1_5.domain.org.OrgLeaseSettings;
-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.features.OrgAsyncApi;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see AdminOrgApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface AdminOrgAsyncApi extends OrgAsyncApi {
-
-   /**
-    * @see AdminOrgApi#get(String)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminOrg> get(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#get(URI)
-    */
-   @Override
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<AdminOrg> get(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#getSettings(String)
-    */
-   @GET
-   @Path("/settings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgSettings> getSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getSettings(URI)
-    */
-   @GET
-   @Path("/settings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgSettings> getSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editSettings(String, OrgSettings)
-    */
-   @PUT
-   @Path("/settings")
-   @Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgSettings> editSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgSettings settings);
-
-   /**
-    * @see AdminOrgApi#editSettings(URI, OrgSettings)
-    */
-   @PUT
-   @Path("/settings")
-   @Consumes(VCloudDirectorMediaType.ORG_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgSettings> editSettings(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgSettings settings);
-
-   /**
-    * @see AdminOrgApi#getEmailSettings(String)
-    */
-   @GET
-   @Path("/settings/email")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getEmailSettings(URI)
-    */
-   @GET
-   @Path("/settings/email")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgEmailSettings> getEmailSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editEmailSettings(String, OrgEmailSettings)
-    */
-   @PUT
-   @Path("/settings/email")
-   @Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgEmailSettings> editEmailSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
-
-   /**
-    * @see AdminOrgApi#editEmailSettings(URI, OrgEmailSettings)
-    */
-   @PUT
-   @Path("/settings/email")
-   @Consumes(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_EMAIL_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgEmailSettings> editEmailSettings(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgEmailSettings settings);
-
-   /**
-    * @see AdminOrgApi#getGeneralSettings(String)
-    */
-   @GET
-   @Path("/settings/general")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgGeneralSettings> getGeneralSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getGeneralSettings(URI)
-    */
-   @GET
-   @Path("/settings/general")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgGeneralSettings> getGeneralSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editGeneralSettings(String, OrgGeneralSettings)
-    */
-   @PUT
-   @Path("/settings/general")
-   @Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgGeneralSettings> editGeneralSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
-
-   /**
-    * @see AdminOrgApi#editGeneralSettings(URI, OrgGeneralSettings)
-    */
-   @PUT
-   @Path("/settings/general")
-   @Consumes(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_GENERAL_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgGeneralSettings> editGeneralSettings(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgGeneralSettings settings);
-
-   /**
-    * @see AdminOrgApi#getPasswordPolicy(String)
-    */
-   @GET
-   @Path("/settings/ldap")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getPasswordPolicy(URI)
-    */
-   @GET
-   @Path("/settings/ldap")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgLdapSettings> getLdapSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#getPasswordPolicy(String)
-    */
-   @GET
-   @Path("/settings/passwordPolicy")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getPasswordPolicy(URI)
-    */
-   @GET
-   @Path("/settings/passwordPolicy")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgPasswordPolicySettings> getPasswordPolicy(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editPasswordPolicy(String, OrgPasswordPolicySettings)
-    */
-   @PUT
-   @Path("/settings/passwordPolicy")
-   @Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgPasswordPolicySettings> editPasswordPolicy(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
-
-   /**
-    * @see AdminOrgApi#editPasswordPolicy(URI, OrgPasswordPolicySettings)
-    */
-   @PUT
-   @Path("/settings/passwordPolicy")
-   @Consumes(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_PASSWORD_POLICY_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgPasswordPolicySettings> editPasswordPolicy(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgPasswordPolicySettings settings);
-
-   /**
-    * @see AdminOrgApi#getVAppLeaseSettings(String)
-    */
-   @GET
-   @Path("/settings/vAppLeaseSettings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getVAppLeaseSettings(URI)
-    */
-   @GET
-   @Path("/settings/vAppLeaseSettings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgLeaseSettings> getVAppLeaseSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editVAppLeaseSettings(String, OrgVAppLeaseSettings)
-    */
-   @PUT
-   @Path("/settings/vAppLeaseSettings")
-   @Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgLeaseSettings> editVAppLeaseSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
-
-   /**
-    * @see AdminOrgApi#editVAppLeaseSettings(URI, OrgVAppLeaseSettings)
-    */
-   @PUT
-   @Path("/settings/vAppLeaseSettings")
-   @Consumes(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_LEASE_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgLeaseSettings> editVAppLeaseSettings(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgLeaseSettings settings);
-
-   /**
-    * @see AdminOrgApi#getVAppTemplateLeaseSettings(String)
-    */
-   @GET
-   @Path("/settings/vAppTemplateLeaseSettings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn);
-
-   /**
-    * @see AdminOrgApi#getVAppTemplateLeaseSettings(URI)
-    */
-   @GET
-   @Path("/settings/vAppTemplateLeaseSettings")
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgVAppTemplateLeaseSettings> getVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref);
-
-   /**
-    * @see AdminOrgApi#editVAppTemplateLeaseSettings(String, OrgVAppTemplateLeaseSettings)
-    */
-   @PUT
-   @Path("/settings/vAppTemplateLeaseSettings")
-   @Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgVAppTemplateLeaseSettings> editVAppTemplateLeaseSettings(
-            @EndpointParam(parser = URNToAdminHref.class) String orgUrn,
-            @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
-
-   /**
-    * @see AdminOrgApi#editVAppTemplateLeaseSettings(URI, OrgVAppTemplateLeaseSettings)
-    */
-   @PUT
-   @Path("/settings/vAppTemplateLeaseSettings")
-   @Consumes(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
-   @Produces(VCloudDirectorMediaType.ORG_VAPP_TEMPLATE_LEASE_SETTINGS)
-   @JAXBResponseParser
-   ListenableFuture<OrgVAppTemplateLeaseSettings> editVAppTemplateLeaseSettings(@EndpointParam URI adminOrgHref,
-            @BinderParam(BindToXMLPayload.class) OrgVAppTemplateLeaseSettings settings);
-}


[3/5] JCLOUDS-40 unasync vcloud-director

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
deleted file mode 100644
index 6915539..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncApi.java
+++ /dev/null
@@ -1,363 +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.features;
-
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CUSTOMIZATION_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_SECTION;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
-import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.dmtf.ovf.NetworkSection;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.domain.Owner;
-import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
-import org.jclouds.vcloud.director.v1_5.domain.References;
-import org.jclouds.vcloud.director.v1_5.domain.Task;
-import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
-import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
-import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
-import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see VAppTemplateApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VAppTemplateAsyncApi {
-
-   /**
-    * @see VAppTemplateApi#get(String)
-    */
-   @GET
-   @Consumes(VAPP_TEMPLATE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VAppTemplate> get(@EndpointParam(parser = URNToHref.class) String reference);
-
-   /**
-    * @see VAppTemplateApi#edit(String, VAppTemplate)
-    */
-   @PUT
-   @Produces(VAPP_TEMPLATE)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam(parser = URNToHref.class) String templateUrn,
-            @BinderParam(BindToXMLPayload.class) VAppTemplate template);
-
-   /**
-    * @see VAppTemplateApi#remove(String)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam String templateUri);
-
-   /**
-    * @see VAppTemplateApi#disableDownload(String)
-    */
-   @POST
-   @Path("/action/disableDownload")
-   @JAXBResponseParser
-   ListenableFuture<Void> disableDownload(@EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#enableDownload(String)
-    */
-   @POST
-   @Consumes(TASK)
-   @Path("/action/enableDownload")
-   @JAXBResponseParser
-   ListenableFuture<Task> enableDownload(@EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getCustomizationSection(String)
-    */
-   @GET
-   @Consumes(CUSTOMIZATION_SECTION)
-   @Path("/customizationSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<CustomizationSection> getCustomizationSection(
-            @EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getLeaseSettingsSection(String)
-    */
-   @GET
-   @Consumes(LEASE_SETTINGS_SECTION)
-   @Path("/leaseSettingsSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(
-            @EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#editLeaseSettingsSection(String, LeaseSettingsSection)
-    */
-   @PUT
-   @Produces(LEASE_SETTINGS_SECTION)
-   @Consumes(TASK)
-   @Path("/leaseSettingsSection")
-   @JAXBResponseParser
-   ListenableFuture<Task> editLeaseSettingsSection(
-            @EndpointParam(parser = URNToHref.class) String templateUrn,
-            @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
-
-   /**
-    * @see VAppTemplateApi#getNetworkConfigSection(String)
-    */
-   @GET
-   @Consumes(NETWORK_CONFIG_SECTION)
-   @Path("/networkConfigSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConfigSection> getNetworkConfigSection(
-            @EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getNetworkSection(String)
-    */
-   @GET
-   @Consumes(NETWORK_SECTION)
-   @Path("/networkSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkSection> getNetworkSection(
-            @EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getOvf(String)
-    */
-   @GET
-   @Consumes
-   @Path("/ovf")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Envelope> getOvf(@EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getOwnerOfVAppTemplate(String)
-    */
-   @GET
-   @Consumes(OWNER)
-   @Path("/owner")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#getProductSectionsForVAppTemplate(String)
-    */
-   @GET
-   @Consumes(PRODUCT_SECTION_LIST)
-   @Path("/productSections")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(
-            @EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#editProductSections(String, ProductSectionList)
-    */
-   @PUT
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @Path("/productSections")
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam(parser = URNToHref.class) String templateUrn,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
-
-   /**
-    * @see VAppTemplateApi#getShadowVms(String)
-    */
-   @GET
-   @Consumes
-   @Path("/shadowVms")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<References> getShadowVms(@EndpointParam(parser = URNToHref.class) String templateUrn);
-
-   /**
-    * @see VAppTemplateApi#get(URI)
-    */
-   @GET
-   @Consumes(VAPP_TEMPLATE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VAppTemplate> get(@EndpointParam URI reference);
-
-   /**
-    * @see VAppTemplateApi#edit(URI, VAppTemplate)
-    */
-   @PUT
-   @Produces(VAPP_TEMPLATE)
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> edit(@EndpointParam URI templateHref,
-            @BinderParam(BindToXMLPayload.class) VAppTemplate template);
-
-   /**
-    * @see VAppTemplateApi#remove(URI)
-    */
-   @DELETE
-   @Consumes(TASK)
-   @JAXBResponseParser
-   ListenableFuture<Task> remove(@EndpointParam URI templateUri);
-
-   /**
-    * @see VAppTemplateApi#disableDownload(URI)
-    */
-   @POST
-   @Path("/action/disableDownload")
-   @JAXBResponseParser
-   ListenableFuture<Void> disableDownload(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#enableDownload(URI)
-    */
-   @POST
-   @Consumes(TASK)
-   @Path("/action/enableDownload")
-   @JAXBResponseParser
-   ListenableFuture<Task> enableDownload(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getCustomizationSection(URI)
-    */
-   @GET
-   @Consumes(CUSTOMIZATION_SECTION)
-   @Path("/customizationSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<CustomizationSection> getCustomizationSection(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getLeaseSettingsSection(URI)
-    */
-   @GET
-   @Consumes(LEASE_SETTINGS_SECTION)
-   @Path("/leaseSettingsSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<LeaseSettingsSection> getLeaseSettingsSection(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#editLeaseSettingsSection(URI, LeaseSettingsSection)
-    */
-   @PUT
-   @Produces(LEASE_SETTINGS_SECTION)
-   @Consumes(TASK)
-   @Path("/leaseSettingsSection")
-   @JAXBResponseParser
-   ListenableFuture<Task> editLeaseSettingsSection(@EndpointParam URI templateHref,
-            @BinderParam(BindToXMLPayload.class) LeaseSettingsSection settingsSection);
-
-   /**
-    * @see VAppTemplateApi#getNetworkConfigSection(URI)
-    */
-   @GET
-   @Consumes(NETWORK_CONFIG_SECTION)
-   @Path("/networkConfigSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getNetworkSection(URI)
-    */
-   @GET
-   @Consumes(NETWORK_SECTION)
-   @Path("/networkSection")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<NetworkSection> getNetworkSection(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getOvf(URI)
-    */
-   @GET
-   @Consumes
-   @Path("/ovf")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Envelope> getOvf(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getOwnerOfVAppTemplate(URI)
-    */
-   @GET
-   @Consumes(OWNER)
-   @Path("/owner")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Owner> getOwner(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#getProductSectionsForVAppTemplate(URI)
-    */
-   @GET
-   @Consumes(PRODUCT_SECTION_LIST)
-   @Path("/productSections")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<ProductSectionList> getProductSections(@EndpointParam URI templateHref);
-
-   /**
-    * @see VAppTemplateApi#editProductSections(URI, ProductSectionList)
-    */
-   @PUT
-   @Produces(PRODUCT_SECTION_LIST)
-   @Consumes(TASK)
-   @Path("/productSections")
-   @JAXBResponseParser
-   ListenableFuture<Task> editProductSections(@EndpointParam URI templateHref,
-            @BinderParam(BindToXMLPayload.class) ProductSectionList sections);
-
-   /**
-    * @see VAppTemplateApi#getShadowVms(URI)
-    */
-   @GET
-   @Consumes
-   @Path("/shadowVms")
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<References> getShadowVms(@EndpointParam URI templateHref);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
index d48e400..ae850e3 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcApi.java
@@ -16,8 +16,31 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CLONE_MEDIA_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CLONE_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.MEDIA;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.binders.BindToXMLPayload;
+import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
 import org.jclouds.vcloud.director.v1_5.domain.Media;
 import org.jclouds.vcloud.director.v1_5.domain.VApp;
 import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
@@ -29,12 +52,10 @@ import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppTemplateParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
 import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to a vDC.
- * 
- * @see VdcAsyncApi
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VdcApi {
 
    /**
@@ -42,9 +63,17 @@ public interface VdcApi {
     * 
     * @return the vdc or null if not found
     */
-   Vdc get(String vdcUrn);
-   
-   Vdc get(URI vdcHref);
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Vdc get(@EndpointParam(parser = URNToHref.class) String vdcUrn);
+
+   @GET
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Vdc get(@EndpointParam URI vdcHref);
    
    /**
     * Captures a vApp into vApp template.
@@ -56,9 +85,20 @@ public interface VdcApi {
     * @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
     *         to use the vApp.
     */
-   VAppTemplate captureVApp(String vdcUrn, CaptureVAppParams params);
-   
-   VAppTemplate captureVApp(URI vdcHref, CaptureVAppParams params);
+   @POST
+   @Path("/action/captureVApp")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(CAPTURE_VAPP_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate captureVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
+
+   @POST
+   @Path("/action/captureVApp")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(CAPTURE_VAPP_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate captureVApp(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
 
    /**
     * Clones a media into new one.
@@ -70,9 +110,20 @@ public interface VdcApi {
     * @return a Media resource which will contain a task. The user should monitor the contained task status in order to
     *         check when it is completed.
     */
-   Media cloneMedia(String vdcUrn, CloneMediaParams params);
-   
-   Media cloneMedia(URI vdcHref, CloneMediaParams params);
+   @POST
+   @Path("/action/cloneMedia")
+   @Consumes(MEDIA)
+   @Produces(CLONE_MEDIA_PARAMS)
+   @JAXBResponseParser
+   Media cloneMedia(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
+
+   @POST
+   @Path("/action/cloneMedia")
+   @Consumes(MEDIA)
+   @Produces(CLONE_MEDIA_PARAMS)
+   @JAXBResponseParser
+   Media cloneMedia(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
 
    /**
     * Clones a vApp into new one.
@@ -83,9 +134,22 @@ public interface VdcApi {
     * @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
     *         to use the vApp.
     */
-   VApp cloneVApp(String vdcUrn, CloneVAppParams params);
-   
-   VApp cloneVApp(URI vdcHref, CloneVAppParams params);
+   @POST
+   @Path("/action/cloneVApp")
+   @Consumes(VAPP)
+   @Produces(CLONE_VAPP_PARAMS)
+   // TODO fix these etc.
+   @JAXBResponseParser
+   VApp cloneVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
+
+   @POST
+   @Path("/action/cloneVApp")
+   @Consumes(VAPP)
+   @Produces(CLONE_VAPP_PARAMS)
+   // TODO fix these etc.
+   @JAXBResponseParser
+   VApp cloneVApp(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
 
    /**
     * Clones a vApp template into new one.
@@ -97,9 +161,21 @@ public interface VdcApi {
     * @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
     *         be able to use the VAppTemplate.
     */
-   VAppTemplate cloneVAppTemplate(String vdcUrn, CloneVAppTemplateParams params);
-   
-   VAppTemplate cloneVAppTemplate(URI vdcHref, CloneVAppTemplateParams params);
+   @POST
+   @Path("/action/cloneVAppTemplate")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate cloneVAppTemplate(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
+
+   @POST
+   @Path("/action/cloneVAppTemplate")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate cloneVAppTemplate(@EndpointParam URI vdcHref,
+         @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
 
    /**
     * Composes a new vApp using VMs from other vApps or vApp templates.
@@ -131,9 +207,21 @@ public interface VdcApi {
     * @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
     *         to use the vApp.
     */
-   VApp composeVApp(String vdcUrn, ComposeVAppParams params);
-   
-   VApp composeVApp(URI vdcHref, ComposeVAppParams params);
+   @POST
+   @Path("/action/composeVApp")
+   @Consumes(VAPP)
+   @Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
+   @JAXBResponseParser
+   VApp composeVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
+
+   @POST
+   @Path("/action/composeVApp")
+   @Consumes(VAPP)
+   @Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
+   @JAXBResponseParser
+   VApp composeVApp(@EndpointParam URI vdcHref,
+         @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
 
    /**
     * Instantiate a vApp template into a new vApp.
@@ -148,9 +236,21 @@ public interface VdcApi {
     * @return a VApp resource which will contain a task. The user should should wait for this task to finish to be able
     *         to use the vApp.
     */
-   VApp instantiateVApp(String vdcUrn, InstantiateVAppParams params);
-   
-   VApp instantiateVApp(URI vdcHref, InstantiateVAppParams params);
+   @POST
+   @Path("/action/instantiateVAppTemplate")
+   @Consumes(VAPP)
+   @Produces(INSTANTIATE_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VApp instantiateVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
+
+   @POST
+   @Path("/action/instantiateVAppTemplate")
+   @Consumes(VAPP)
+   @Produces(INSTANTIATE_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VApp instantiateVApp(@EndpointParam URI vdcHref,
+         @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
 
    /**
     * Uploading vApp template to a vDC.
@@ -171,16 +271,39 @@ public interface VdcApi {
     * @return a VAppTemplate resource which will contain a task. The user should should wait for this task to finish to
     *         be able to use the VAppTemplate.
     */
-   VAppTemplate uploadVAppTemplate(String vdcUrn, UploadVAppTemplateParams params);
-   
-   VAppTemplate uploadVAppTemplate(URI vdcHref, UploadVAppTemplateParams params);
+   @POST
+   @Path("/action/uploadVAppTemplate")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(UPLOAD_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate uploadVAppTemplate(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
+
+   @POST
+   @Path("/action/uploadVAppTemplate")
+   @Consumes(VAPP_TEMPLATE)
+   @Produces(UPLOAD_VAPP_TEMPLATE_PARAMS)
+   @JAXBResponseParser
+   VAppTemplate uploadVAppTemplate(@EndpointParam URI vdcHref,
+         @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
 
    /**
     * Creates a media (and present upload link for the floppy/iso file).
     * 
     * @return The response will return a link to transfer site to be able to continue with uploading the media.
     */
-   Media addMedia(String vdcUrn, Media media);
-   
-   Media addMedia(URI vdcHref, Media media);
+   @POST
+   @Path("/media")
+   @Consumes(MEDIA)
+   @Produces(MEDIA)
+   @JAXBResponseParser
+   Media addMedia(@EndpointParam(parser = URNToHref.class) String vdcUrn,
+         @BinderParam(BindToXMLPayload.class) Media media);
+
+   @POST
+   @Path("/media")
+   @Consumes(MEDIA)
+   @Produces(MEDIA)
+   @JAXBResponseParser
+   Media addMedia(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) Media media);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
deleted file mode 100644
index 626e4e8..0000000
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VdcAsyncApi.java
+++ /dev/null
@@ -1,252 +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.features;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.binders.BindToXMLPayload;
-import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
-import org.jclouds.vcloud.director.v1_5.domain.Media;
-import org.jclouds.vcloud.director.v1_5.domain.VApp;
-import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
-import org.jclouds.vcloud.director.v1_5.domain.Vdc;
-import org.jclouds.vcloud.director.v1_5.domain.params.CaptureVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppTemplateParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.ComposeVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.InstantiateVAppParams;
-import org.jclouds.vcloud.director.v1_5.domain.params.UploadVAppTemplateParams;
-import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * @see VdcApi
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VdcAsyncApi {
-
-   /**
-    * @see VdcApi#get(String)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Vdc> get(@EndpointParam(parser = URNToHref.class) String vdcUrn);
-
-   /**
-    * @see VdcApi#captureVApp(String, CaptureVAppParams)
-    */
-   @POST
-   @Path("/action/captureVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> captureVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
-
-   /**
-    * @see VdcApi#cloneMedia(String, CloneMediaParams)
-    */
-   @POST
-   @Path("/action/cloneMedia")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Media> cloneMedia(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
-   /**
-    * @see VdcApi#cloneVApp(String, CloneVAppParams)
-    */
-   @POST
-   @Path("/action/cloneVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
-   // TODO fix these etc.
-   @JAXBResponseParser
-   ListenableFuture<VApp> cloneVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
-
-   /**
-    * @see VdcApi#cloneVAppTemplate(String, CloneVAppTemplateParams)
-    */
-   @POST
-   @Path("/action/cloneVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
-
-   /**
-    * @see VdcApi#composeVApp(String, ComposeVAppParams)
-    */
-   @POST
-   @Path("/action/composeVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VApp> composeVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
-
-   /**
-    * @see VdcApi#instantiateVApp(String, InstantiateVAppParamsType)
-    */
-   @POST
-   @Path("/action/instantiateVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VApp> instantiateVApp(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
-
-   /**
-    * @see VdcApi#uploadVAppTemplate(String, UploadVAppTemplateParams)
-    */
-   @POST
-   @Path("/action/uploadVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
-
-   /**
-    * @see VdcApi#addMedia(String, Media)
-    */
-   @POST
-   @Path("/media")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.MEDIA)
-   @JAXBResponseParser
-   ListenableFuture<Media> addMedia(@EndpointParam(parser = URNToHref.class) String vdcUrn,
-            @BinderParam(BindToXMLPayload.class) Media media);
-
-   /**
-    * @see VdcApi#get(URI)
-    */
-   @GET
-   @Consumes
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<? extends Vdc> get(@EndpointParam URI vdcHref);
-
-   /**
-    * @see VdcApi#captureVApp(URI, CaptureVAppParams)
-    */
-   @POST
-   @Path("/action/captureVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.CAPTURE_VAPP_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> captureVApp(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) CaptureVAppParams params);
-
-   /**
-    * @see VdcApi#cloneMedia(URI, CloneMediaParams)
-    */
-   @POST
-   @Path("/action/cloneMedia")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<Media> cloneMedia(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) CloneMediaParams params);
-
-   /**
-    * @see VdcApi#cloneVApp(URI, CloneVAppParams)
-    */
-   @POST
-   @Path("/action/cloneVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.CLONE_VAPP_PARAMS)
-   // TODO fix these etc.
-   @JAXBResponseParser
-   ListenableFuture<VApp> cloneVApp(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) CloneVAppParams params);
-
-   /**
-    * @see VdcApi#cloneVAppTemplate(URI, CloneVAppTemplateParams)
-    */
-   @POST
-   @Path("/action/cloneVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.CLONE_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> cloneVAppTemplate(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) CloneVAppTemplateParams params);
-
-   /**
-    * @see VdcApi#composeVApp(URI, ComposeVAppParams)
-    */
-   @POST
-   @Path("/action/composeVApp")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.COMPOSE_VAPP_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VApp> composeVApp(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) ComposeVAppParams params);
-
-   /**
-    * @see VdcApi#instantiateVApp(URI, InstantiateVAppParamsType)
-    */
-   @POST
-   @Path("/action/instantiateVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP)
-   @Produces(VCloudDirectorMediaType.INSTANTIATE_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VApp> instantiateVApp(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) InstantiateVAppParams params);
-
-   /**
-    * @see VdcApi#uploadVAppTemplate(URI, UploadVAppTemplateParams)
-    */
-   @POST
-   @Path("/action/uploadVAppTemplate")
-   @Consumes(VCloudDirectorMediaType.VAPP_TEMPLATE)
-   @Produces(VCloudDirectorMediaType.UPLOAD_VAPP_TEMPLATE_PARAMS)
-   @JAXBResponseParser
-   ListenableFuture<VAppTemplate> uploadVAppTemplate(@EndpointParam URI vdcHref,
-            @BinderParam(BindToXMLPayload.class) UploadVAppTemplateParams params);
-
-   /**
-    * @see VdcApi#addMedia(URI, Media)
-    */
-   @POST
-   @Path("/media")
-   @Consumes(VCloudDirectorMediaType.MEDIA)
-   @Produces(VCloudDirectorMediaType.MEDIA)
-   @JAXBResponseParser
-   ListenableFuture<Media> addMedia(@EndpointParam URI vdcHref, @BinderParam(BindToXMLPayload.class) Media media);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
----------------------------------------------------------------------
diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
index 61b700a..5b14541 100644
--- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
+++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VmApi.java
@@ -16,8 +16,40 @@
  */
 package org.jclouds.vcloud.director.v1_5.features;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.ANY_IMAGE;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.DEPLOY_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.MEDIA_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OPERATING_SYSTEM_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OVF_RASD_ITEM;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OVF_RASD_ITEMS_LIST;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RELOCATE_VM_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.UNDEPLOY_VAPP_PARAMS;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VIRTUAL_HARDWARE_SECTION;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VM;
+import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VM_PENDING_ANSWER;
+
 import java.net.URI;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.JAXBResponseParser;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.rest.binders.BindToXMLPayload;
 import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
 import org.jclouds.vcloud.director.v1_5.domain.RasdItemsList;
 import org.jclouds.vcloud.director.v1_5.domain.ScreenTicket;
@@ -35,13 +67,11 @@ import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.OperatingSystemSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.RuntimeInfoSection;
 import org.jclouds.vcloud.director.v1_5.domain.section.VirtualHardwareSection;
+import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.director.v1_5.functions.ReturnPayloadBytes;
+import org.jclouds.vcloud.director.v1_5.functions.URNToHref;
 
-/**
- * Provides synchronous access to {@link Vm} objects.
- * 
- * @see VmAsyncApi
- * @version 1.5
- */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
 public interface VmApi {
 
    /**
@@ -50,19 +80,35 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#get(String)
     */
-   Vm get(String vmUrn);
-
-   Vm get(URI vmHref);
+   @GET
+   @Consumes(VM)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Vm get(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Consumes(VM)
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   Vm get(@EndpointParam URI vmHref);
 
    /**
     * Modifies the name/description of a {@link Vm}.
     * 
     * @since 0.9
-    * @see VAppApi#edit(String, VApp)
     */
-   Task edit(String vmUrn, Vm vm);
-
-   Task edit(URI vmHref, Vm vm);
+   @PUT
+   @Produces(VM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) Vm vApp);
+
+   @PUT
+   @Produces(VM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task edit(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) Vm vApp);
 
    /**
     * Deletes a {@link Vm}.
@@ -70,9 +116,15 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#remove(String)
     */
-   Task remove(String vmUrn);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam(parser = URNToHref.class) String vmUrn);
 
-   Task remove(URI vmHref);
+   @DELETE
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task remove(@EndpointParam URI vmHref);
 
    /**
     * Consolidates a {@link Vm}.
@@ -83,9 +135,17 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   Task consolidate(String vmUrn);
-
-   Task consolidate(URI vmHref);
+   @POST
+   @Path("/action/consolidate")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task consolidate(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/action/consolidate")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task consolidate(@EndpointParam URI vmHref);
 
    /**
     * Deploys a {@link Vm}.
@@ -93,9 +153,20 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#deploy(String, DeployVAppParams)
     */
-   Task deploy(String vmUrn, DeployVAppParams params);
-
-   Task deploy(URI vmHref, DeployVAppParams params);
+   @POST
+   @Path("/action/deploy")
+   @Produces(DEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task deploy(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
+
+   @POST
+   @Path("/action/deploy")
+   @Produces(DEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task deploy(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) DeployVAppParams params);
 
    /**
     * Discard suspended state of a {@link Vm}.
@@ -103,9 +174,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#discardSuspendedState(String)
     */
-   Task discardSuspendedState(String vmUrn);
-
-   Task discardSuspendedState(URI vmHref);
+   @POST
+   @Path("/action/discardSuspendedState")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task discardSuspendedState(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/action/discardSuspendedState")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task discardSuspendedState(@EndpointParam URI vmHref);
 
    /**
     * Installs VMware tools to the virtual machine.
@@ -118,9 +197,17 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   Task installVMwareTools(String vmUrn);
-
-   Task installVMwareTools(URI vmHref);
+   @POST
+   @Path("/action/installVMwareTools")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task installVMwareTools(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/action/installVMwareTools")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task installVMwareTools(@EndpointParam URI vmHref);
 
    /**
     * Relocates a {@link Vm}.
@@ -131,9 +218,20 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   Task relocate(String vmUrn, RelocateParams params);
-
-   Task relocate(URI vmHref, RelocateParams params);
+   @POST
+   @Path("/action/relocate")
+   @Produces(RELOCATE_VM_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task relocate(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RelocateParams params);
+
+   @POST
+   @Path("/action/relocate")
+   @Produces(RELOCATE_VM_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task relocate(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) RelocateParams params);
 
    /**
     * Undeploy a {@link Vm}.
@@ -141,9 +239,21 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#undeploy(String, UndeployVAppParams)
     */
-   Task undeploy(String vmUrn, UndeployVAppParams params);
-
-   Task undeploy(URI vmHref, UndeployVAppParams params);
+   @POST
+   @Path("/action/undeploy")
+   @Produces(UNDEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task undeploy(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
+
+   @POST
+   @Path("/action/undeploy")
+   @Produces(UNDEPLOY_VAPP_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task undeploy(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) UndeployVAppParams params);
 
    /**
     * Upgrade virtual hardware version of a VM to the highest supported virtual hardware version of
@@ -155,9 +265,17 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   Task upgradeHardwareVersion(String vmUrn);
-
-   Task upgradeHardwareVersion(URI vmHref);
+   @POST
+   @Path("/action/upgradeHardwareVersion")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task upgradeHardwareVersion(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/action/upgradeHardwareVersion")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task upgradeHardwareVersion(@EndpointParam URI vmHref);
 
    /**
     * Powers off a {@link Vm}.
@@ -165,9 +283,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#powerOff(String)
     */
-   Task powerOff(String vmUrn);
-
-   Task powerOff(URI vmHref);
+   @POST
+   @Path("/power/action/powerOff")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOff(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/powerOff")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOff(@EndpointParam URI vmHref);
 
    /**
     * Powers on a {@link Vm}.
@@ -175,9 +301,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#powerOn(String)
     */
-   Task powerOn(String vmUrn);
-
-   Task powerOn(URI vmHref);
+   @POST
+   @Path("/power/action/powerOn")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOn(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/powerOn")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task powerOn(@EndpointParam URI vmHref);
 
    /**
     * Reboots a {@link Vm}.
@@ -185,9 +319,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#reboot(String)
     */
-   Task reboot(String vmUrn);
-
-   Task reboot(URI vmHref);
+   @POST
+   @Path("/power/action/reboot")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reboot(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/reboot")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reboot(@EndpointParam URI vmHref);
 
    /**
     * Resets a {@link Vm}.
@@ -195,9 +337,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#reset(String)
     */
-   Task reset(String vmUrn);
-
-   Task reset(URI vmHref);
+   @POST
+   @Path("/power/action/reset")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reset(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/reset")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task reset(@EndpointParam URI vmHref);
 
    /**
     * Shuts down a {@link Vm}.
@@ -205,9 +355,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#shutdown(String)
     */
-   Task shutdown(String vmUrn);
-
-   Task shutdown(URI vmHref);
+   @POST
+   @Path("/power/action/shutdown")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task shutdown(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/shutdown")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task shutdown(@EndpointParam URI vmHref);
 
    /**
     * Suspends a {@link Vm}.
@@ -215,9 +373,17 @@ public interface VmApi {
     * @since 0.9
     * @see VAppApi#suspend(String)
     */
-   Task suspend(String vmUrn);
-
-   Task suspend(URI vmHref);
+   @POST
+   @Path("/power/action/suspend")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task suspend(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/power/action/suspend")
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task suspend(@EndpointParam URI vmHref);
 
    /**
     * Retrieves the guest customization section of a {@link Vm}.
@@ -228,9 +394,19 @@ public interface VmApi {
     * 
     * @since 1.0
     */
-   GuestCustomizationSection getGuestCustomizationSection(String vmUrn);
-
-   GuestCustomizationSection getGuestCustomizationSection(URI vmHref);
+   @GET
+   @Path("/guestCustomizationSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   GuestCustomizationSection getGuestCustomizationSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/guestCustomizationSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   GuestCustomizationSection getGuestCustomizationSection(@EndpointParam URI vmHref);
 
    /**
     * Modifies the guest customization section of a {@link Vm}.
@@ -241,9 +417,21 @@ public interface VmApi {
     * 
     * @since 1.0
     */
-   Task editGuestCustomizationSection(String vmUrn, GuestCustomizationSection section);
-
-   Task editGuestCustomizationSection(URI vmHref, GuestCustomizationSection section);
+   @PUT
+   @Path("/guestCustomizationSection")
+   @Produces(GUEST_CUSTOMIZATION_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editGuestCustomizationSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
+
+   @PUT
+   @Path("/guestCustomizationSection")
+   @Produces(GUEST_CUSTOMIZATION_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editGuestCustomizationSection(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) GuestCustomizationSection section);
 
    /**
     * Ejects media from a {@link Vm}.
@@ -254,9 +442,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task ejectMedia(String vmUrn, MediaInsertOrEjectParams mediaParams);
-
-   Task ejectMedia(URI vmHref, MediaInsertOrEjectParams mediaParams);
+   @POST
+   @Path("/media/action/ejectMedia")
+   @Produces(MEDIA_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task ejectMedia(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+
+   @POST
+   @Path("/media/action/ejectMedia")
+   @Produces(MEDIA_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task ejectMedia(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
 
    /**
     * Insert media into a {@link Vm}.
@@ -267,9 +467,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task insertMedia(String vmUrn, MediaInsertOrEjectParams mediaParams);
-
-   Task insertMedia(URI vmHref, MediaInsertOrEjectParams mediaParams);
+   @POST
+   @Path("/media/action/insertMedia")
+   @Produces(MEDIA_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task insertMedia(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
+
+   @POST
+   @Path("/media/action/insertMedia")
+   @Produces(MEDIA_PARAMS)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task insertMedia(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) MediaInsertOrEjectParams mediaParams);
 
    /**
     * Retrieves the network connection section of a {@link Vm}.
@@ -280,9 +492,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   NetworkConnectionSection getNetworkConnectionSection(String vmUrn);
-
-   NetworkConnectionSection getNetworkConnectionSection(URI vmHref);
+   @GET
+   @Path("/networkConnectionSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConnectionSection getNetworkConnectionSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/networkConnectionSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   NetworkConnectionSection getNetworkConnectionSection(@EndpointParam URI vmHref);
 
    /**
     * Modifies the network connection section of a {@link Vm}.
@@ -293,9 +515,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editNetworkConnectionSection(String vmUrn, NetworkConnectionSection section);
-
-   Task editNetworkConnectionSection(URI vmHref, NetworkConnectionSection section);
+   @PUT
+   @Path("/networkConnectionSection")
+   @Produces(NETWORK_CONNECTION_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editNetworkConnectionSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
+
+   @PUT
+   @Path("/networkConnectionSection")
+   @Produces(NETWORK_CONNECTION_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editNetworkConnectionSection(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
 
    /**
     * Retrieves the operating system section of a {@link Vm}.
@@ -306,9 +540,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   OperatingSystemSection getOperatingSystemSection(String vmUrn);
-
-   OperatingSystemSection getOperatingSystemSection(URI vmHref);
+   @GET
+   @Path("/operatingSystemSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OperatingSystemSection getOperatingSystemSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/operatingSystemSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   OperatingSystemSection getOperatingSystemSection(@EndpointParam URI vmHref);
 
    /**
     * Modifies the operating system section of a {@link Vm}.
@@ -319,9 +563,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editOperatingSystemSection(String vmUrn, OperatingSystemSection section);
-
-   Task editOperatingSystemSection(URI vmHref, OperatingSystemSection section);
+   @PUT
+   @Path("/operatingSystemSection")
+   @Produces(OPERATING_SYSTEM_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editOperatingSystemSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
+
+   @PUT
+   @Path("/operatingSystemSection")
+   @Produces(OPERATING_SYSTEM_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editOperatingSystemSection(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) OperatingSystemSection section);
 
    /**
     * Retrieves {@link Vm} product sections.
@@ -329,9 +585,19 @@ public interface VmApi {
     * @since 1.5
     * @see VAppApi#getProductSections(String)
     */
-   ProductSectionList getProductSections(String vmUrn);
-
-   ProductSectionList getProductSections(URI vmHref);
+   @GET
+   @Path("/productSections")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/productSections")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ProductSectionList getProductSections(@EndpointParam URI vmHref);
 
    /**
     * Modifies the product section information of a {@link Vm}.
@@ -339,9 +605,21 @@ public interface VmApi {
     * @since 1.5
     * @see VAppApi#editProductSections(String, ProductSectionList)
     */
-   Task editProductSections(String vmUrn, ProductSectionList sectionList);
-
-   Task editProductSections(URI vmHref, ProductSectionList sectionList);
+   @PUT
+   @Path("/productSections")
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
+
+   @PUT
+   @Path("/productSections")
+   @Produces(PRODUCT_SECTION_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editProductSections(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) ProductSectionList sectionList);
 
    /**
     * Retrieves a pending question for a {@link Vm}.
@@ -356,9 +634,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   VmPendingQuestion getPendingQuestion(String vmUrn);
-
-   VmPendingQuestion getPendingQuestion(URI vmHref);
+   @GET
+   @Path("/question")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VmPendingQuestion getPendingQuestion(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/question")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VmPendingQuestion getPendingQuestion(@EndpointParam URI vmHref);
 
    /**
     * Answer a pending question on a {@link Vm}.
@@ -372,9 +660,20 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   void answerQuestion(String vmUrn, VmQuestionAnswer answer);
-
-   void answerQuestion(URI vmHref, VmQuestionAnswer answer);
+   @POST
+   @Path("/question/action/answer")
+   @Produces(VM_PENDING_ANSWER)
+   @Consumes
+   @JAXBResponseParser
+   void answerQuestion(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
+
+   @POST
+   @Path("/question/action/answer")
+   @Produces(VM_PENDING_ANSWER)
+   @Consumes
+   @JAXBResponseParser
+   void answerQuestion(@EndpointParam URI vmHref, @BinderParam(BindToXMLPayload.class) VmQuestionAnswer answer);
 
    /**
     * Retrieves the runtime info section of a {@link Vm}.
@@ -385,9 +684,19 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   RuntimeInfoSection getRuntimeInfoSection(String vmUrn);
-
-   RuntimeInfoSection getRuntimeInfoSection(URI vmHref);
+   @GET
+   @Path("/runtimeInfoSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RuntimeInfoSection getRuntimeInfoSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/runtimeInfoSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RuntimeInfoSection getRuntimeInfoSection(@EndpointParam URI vmHref);
 
    /**
     * Retrieves the thumbnail of the screen of a {@link Vm}.
@@ -400,9 +709,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   byte[] getScreenImage(String vmUrn);
-
-   byte[] getScreenImage(URI vmHref);
+   @GET
+   @Path("/screen")
+   @Consumes(ANY_IMAGE)
+   @Fallback(NullOnNotFoundOr404.class)
+   @ResponseParser(ReturnPayloadBytes.class)
+   byte[] getScreenImage(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/screen")
+   @Consumes(ANY_IMAGE)
+   @Fallback(NullOnNotFoundOr404.class)
+   @ResponseParser(ReturnPayloadBytes.class)
+   byte[] getScreenImage(@EndpointParam URI vmHref);
 
    /**
     * Retrieve a screen ticket for remote console connection to a {@link Vm}.
@@ -420,9 +739,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   ScreenTicket getScreenTicket(String vmUrn);
-
-   ScreenTicket getScreenTicket(URI vmHref);
+   @POST
+   @Path("/screen/action/acquireTicket")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ScreenTicket getScreenTicket(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @POST
+   @Path("/screen/action/acquireTicket")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   ScreenTicket getScreenTicket(@EndpointParam URI vmHref);
 
    /**
     * Retrieves the virtual hardware section of a {@link Vm}.
@@ -433,9 +762,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   VirtualHardwareSection getVirtualHardwareSection(String vmUrn);
-
-   VirtualHardwareSection getVirtualHardwareSection(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VirtualHardwareSection getVirtualHardwareSection(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   VirtualHardwareSection getVirtualHardwareSection(@EndpointParam URI vmHref);
 
    /**
     * Modifies the virtual hardware section of a {@link Vm}.
@@ -446,9 +785,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editVirtualHardwareSection(String vmUrn, VirtualHardwareSection section);
-
-   Task editVirtualHardwareSection(URI vmHref, VirtualHardwareSection section);
+   @PUT
+   @Path("/virtualHardwareSection")
+   @Produces(VIRTUAL_HARDWARE_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSection(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
+
+   @PUT
+   @Path("/virtualHardwareSection")
+   @Produces(VIRTUAL_HARDWARE_SECTION)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSection(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) VirtualHardwareSection section);
 
    /**
     * Retrieves the CPU properties in virtual hardware section of a {@link Vm}.
@@ -459,9 +810,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   RasdItem getVirtualHardwareSectionCpu(String vmUrn);
-
-   RasdItem getVirtualHardwareSectionCpu(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/cpu")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItem getVirtualHardwareSectionCpu(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/cpu")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItem getVirtualHardwareSectionCpu(@EndpointParam URI vmHref);
 
    /**
     * Modifies the CPU properties in virtual hardware section of a {@link Vm}.
@@ -472,9 +833,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editVirtualHardwareSectionCpu(String vmUrn, RasdItem rasd);
-
-   Task editVirtualHardwareSectionCpu(URI vmHref, RasdItem rasd);
+   @PUT
+   @Path("/virtualHardwareSection/cpu")
+   @Produces(OVF_RASD_ITEM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionCpu(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+
+   @PUT
+   @Path("/virtualHardwareSection/cpu")
+   @Produces(OVF_RASD_ITEM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionCpu(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) RasdItem rasd);
 
    /**
     * Retrieves a list of items for disks from virtual hardware section of a {@link Vm}.
@@ -485,9 +858,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   RasdItemsList getVirtualHardwareSectionDisks(String vmUrn);
-
-   RasdItemsList getVirtualHardwareSectionDisks(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/disks")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionDisks(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/disks")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionDisks(@EndpointParam URI vmHref);
 
    /**
     * Modifies the disks list in virtual hardware section of a {@link Vm}.
@@ -498,9 +881,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editVirtualHardwareSectionDisks(String vmUrn, RasdItemsList rasdItemsList);
-
-   Task editVirtualHardwareSectionDisks(URI vmHref, RasdItemsList rasdItemsList);
+   @PUT
+   @Path("/virtualHardwareSection/disks")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionDisks(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+   @PUT
+   @Path("/virtualHardwareSection/disks")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionDisks(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
 
    /**
     * Retrieves the list of items that represents the floppies and CD/DVD drives in a {@link Vm}.
@@ -511,9 +906,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   RasdItemsList getVirtualHardwareSectionMedia(String vmUrn);
-
-   RasdItemsList getVirtualHardwareSectionMedia(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/media")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionMedia(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/media")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionMedia(@EndpointParam URI vmHref);
 
    /**
     * Retrieves the item that contains memory information from virtual hardware section of a
@@ -525,9 +930,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   RasdItem getVirtualHardwareSectionMemory(String vmUrn);
-
-   RasdItem getVirtualHardwareSectionMemory(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/memory")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItem getVirtualHardwareSectionMemory(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/memory")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItem getVirtualHardwareSectionMemory(@EndpointParam URI vmHref);
 
    /**
     * Modifies the memory properties in virtual hardware section of a {@link Vm}.
@@ -538,9 +953,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editVirtualHardwareSectionMemory(String vmUrn, RasdItem rasd);
-
-   Task editVirtualHardwareSectionMemory(URI vmHref, RasdItem rasd);
+   @PUT
+   @Path("/virtualHardwareSection/memory")
+   @Produces(OVF_RASD_ITEM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionMemory(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RasdItem rasd);
+
+   @PUT
+   @Path("/virtualHardwareSection/memory")
+   @Produces(OVF_RASD_ITEM)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionMemory(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) RasdItem rasd);
 
    /**
     * Retrieves a list of items for network cards from virtual hardware section of a {@link Vm}.
@@ -551,9 +978,19 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   RasdItemsList getVirtualHardwareSectionNetworkCards(String vmUrn);
-
-   RasdItemsList getVirtualHardwareSectionNetworkCards(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/networkCards")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionNetworkCards(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/networkCards")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref);
 
    /**
     * Modifies the network cards list in virtual hardware section of a {@link Vm}.
@@ -564,9 +1001,21 @@ public interface VmApi {
     * 
     * @since 0.9
     */
-   Task editVirtualHardwareSectionNetworkCards(String vmUrn, RasdItemsList rasdItemsList);
-
-   Task editVirtualHardwareSectionNetworkCards(URI vmHref, RasdItemsList rasdItemsList);
+   @PUT
+   @Path("/virtualHardwareSection/networkCards")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionNetworkCards(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+   @PUT
+   @Path("/virtualHardwareSection/networkCards")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionNetworkCards(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
 
    /**
     * Retrieves a list of items for serial ports from virtual hardware section of a {@link Vm}.
@@ -577,9 +1026,19 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   RasdItemsList getVirtualHardwareSectionSerialPorts(String vmUrn);
-
-   RasdItemsList getVirtualHardwareSectionSerialPorts(URI vmHref);
+   @GET
+   @Path("/virtualHardwareSection/serialPorts")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionSerialPorts(@EndpointParam(parser = URNToHref.class) String vmUrn);
+
+   @GET
+   @Path("/virtualHardwareSection/serialPorts")
+   @Consumes
+   @JAXBResponseParser
+   @Fallback(NullOnNotFoundOr404.class)
+   RasdItemsList getVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref);
 
    /**
     * Modifies the serial ports list in virtual hardware section of a {@link Vm}.
@@ -590,7 +1049,19 @@ public interface VmApi {
     * 
     * @since 1.5
     */
-   Task editVirtualHardwareSectionSerialPorts(String vmUrn, RasdItemsList rasdItemsList);
-
-   Task editVirtualHardwareSectionSerialPorts(URI vmHref, RasdItemsList rasdItemsList);
+   @PUT
+   @Path("/virtualHardwareSection/serialPorts")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionSerialPorts(@EndpointParam(parser = URNToHref.class) String vmUrn,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
+
+   @PUT
+   @Path("/virtualHardwareSection/serialPorts")
+   @Produces(OVF_RASD_ITEMS_LIST)
+   @Consumes(TASK)
+   @JAXBResponseParser
+   Task editVirtualHardwareSectionSerialPorts(@EndpointParam URI vmHref,
+         @BinderParam(BindToXMLPayload.class) RasdItemsList rasdItemsList);
 }