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

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

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
deleted file mode 100644
index 05682c4..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogAsyncClient.java
+++ /dev/null
@@ -1,121 +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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.CATALOGITEM_XML;
-import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
-
-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.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.binders.BindCatalogItemToXmlPayload;
-import org.jclouds.vcloud.binders.OrgNameAndCatalogNameToEndpoint;
-import org.jclouds.vcloud.binders.OrgNameCatalogNameItemNameToEndpoint;
-import org.jclouds.vcloud.domain.Catalog;
-import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.options.CatalogItemOptions;
-import org.jclouds.vcloud.xml.CatalogHandler;
-import org.jclouds.vcloud.xml.CatalogItemHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to Catalog functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface CatalogAsyncClient {
-
-   /**
-    * @see CatalogClient#getCatalog
-    */
-   @GET
-   @XMLResponseParser(CatalogHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(CATALOG_XML)
-   ListenableFuture<Catalog> getCatalog(@EndpointParam URI catalogId);
-
-   /**
-    * @see CatalogClient#findCatalogInOrgNamed
-    */
-   @GET
-   @XMLResponseParser(CatalogHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(CATALOG_XML)
-   @MapBinder(OrgNameAndCatalogNameToEndpoint.class)
-   ListenableFuture<Catalog> findCatalogInOrgNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("catalogName") String catalogName);
-
-   /**
-    * @see CatalogClient#getCatalogItem
-    */
-   @GET
-   @Consumes(CATALOGITEM_XML)
-   @XMLResponseParser(CatalogItemHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
-
-   /**
-    * @see CatalogClient#getCatalogItemInOrg
-    */
-   @GET
-   @Consumes(CATALOGITEM_XML)
-   @XMLResponseParser(CatalogItemHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameCatalogNameItemNameToEndpoint.class)
-   ListenableFuture<CatalogItem> findCatalogItemInOrgCatalogNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("catalogName") String catalogName, @PayloadParam("itemName") String itemName);
-
-   /**
-    * @see CatalogClient#addVAppTemplateOrMediaImageToCatalog
-    */
-   @POST
-   @Path("/catalogItems")
-   @Consumes(CATALOGITEM_XML)
-   @Produces(CATALOGITEM_XML)
-   @MapBinder(BindCatalogItemToXmlPayload.class)
-   @XMLResponseParser(CatalogItemHandler.class)
-   ListenableFuture<CatalogItem> addVAppTemplateOrMediaImageToCatalogAndNameItem(@PayloadParam("Entity") URI entity,
-            @EndpointParam URI catalog, @PayloadParam("name") String name, CatalogItemOptions... options);
-
-
-   /**
-    * @see CatalogClient#deleteCatalogItem
-    */
-   @DELETE
-   @Fallback(VoidOnNotFoundOr404.class)
-   ListenableFuture<Void> deleteCatalogItem(@EndpointParam URI href);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogClient.java
deleted file mode 100644
index 0e234a3..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/CatalogClient.java
+++ /dev/null
@@ -1,86 +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.features;
-
-import java.net.URI;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.domain.Catalog;
-import org.jclouds.vcloud.domain.CatalogItem;
-import org.jclouds.vcloud.options.CatalogItemOptions;
-
-/**
- * Provides access to Catalog functionality in vCloud
- * <p/>
- * 
- * @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
- * @author Adrian Cole
- */
-public interface CatalogClient {
-
-   Catalog getCatalog(URI catalogId);
-
-   /**
-    * returns the catalog in the organization associated with the specified name. Note that both
-    * parameters can be null to choose default.
-    * 
-    * @param orgName
-    *           organization name, or null for the default
-    * @param catalogName
-    *           catalog name, or null for the default
-    * @throws NoSuchElementException
-    *            if you specified an org or catalog name that isn't present
-    */
-   Catalog findCatalogInOrgNamed(@Nullable String orgName, @Nullable String catalogName);
-
-   CatalogItem getCatalogItem(URI catalogItem);
-
-   /**
-    * returns the catalog item in the catalog associated with the specified name. Note that the org
-    * and catalog parameters can be null to choose default.
-    * 
-    * @param orgName
-    *           organization name, or null for the default
-    * @param catalogName
-    *           catalog name, or null for the default
-    * @param itemName
-    *           item you wish to lookup
-    * 
-    * @throws NoSuchElementException
-    *            if you specified an org, catalog, or catalog item name that isn't present
-    */
-   CatalogItem findCatalogItemInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName, String itemName);
-
-   /**
-    * A catalog can contain references to vApp templates and media images that have been uploaded to
-    * any vDC in an organization. A vApp template or media image can be listed in at most one
-    * catalog.
-    * 
-    * @param entity
-    *           the reference to the vApp templates and media image
-    * @param catalog
-    *           URI of the catalog to add the resourceEntity from
-    * @param name
-    *           name of the entry in the catalog
-    * 
-    * @param options
-    *           options such as description or properties
-    * @return the new catalog item
-    */
-   CatalogItem addVAppTemplateOrMediaImageToCatalogAndNameItem(URI entity, URI catalog, String name, CatalogItemOptions... options);
-
-   void deleteCatalogItem(URI href);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkApi.java
new file mode 100644
index 0000000..f2a97b0
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkApi.java
@@ -0,0 +1,61 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
+
+import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.binders.OrgNameVDCNameNetworkNameToEndpoint;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.xml.OrgNetworkHandler;
+
+/**
+ * Provides access to Network functionality in vCloud
+ * <p/>
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface NetworkApi {
+
+   @GET
+   @Consumes(NETWORK_XML)
+   @XMLResponseParser(OrgNetworkHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @MapBinder(OrgNameVDCNameNetworkNameToEndpoint.class)
+   OrgNetwork findNetworkInOrgVDCNamed(@Nullable @PayloadParam("orgName") String orgName,
+                                       @Nullable @PayloadParam("vdcName") String vdcName,
+                                       @PayloadParam("resourceName") String networkName);
+
+   @GET
+   @Consumes(NETWORK_XML)
+   @XMLResponseParser(OrgNetworkHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   OrgNetwork getNetwork(@EndpointParam URI network);
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
deleted file mode 100644
index 4045e5d..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkAsyncClient.java
+++ /dev/null
@@ -1,70 +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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.binders.OrgNameVDCNameNetworkNameToEndpoint;
-import org.jclouds.vcloud.domain.network.OrgNetwork;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.xml.OrgNetworkHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to Network functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface NetworkAsyncClient {
-
-   /**
-    * @see NetworkClient#findNetworkInOrgVDCNamed
-    */
-   @GET
-   @Consumes(NETWORK_XML)
-   @XMLResponseParser(OrgNetworkHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameVDCNameNetworkNameToEndpoint.class)
-   ListenableFuture<OrgNetwork> findNetworkInOrgVDCNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("vdcName") String vdcName, @PayloadParam("resourceName") String networkName);
-
-   /**
-    * @see NetworkClient#getNetwork
-    */
-   @GET
-   @Consumes(NETWORK_XML)
-   @XMLResponseParser(OrgNetworkHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<OrgNetwork> getNetwork(@EndpointParam URI network);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkClient.java
deleted file mode 100644
index 2890c81..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/NetworkClient.java
+++ /dev/null
@@ -1,33 +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.features;
-
-import java.net.URI;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.domain.network.OrgNetwork;
-
-/**
- * Provides access to Network functionality in vCloud
- * <p/>
- * @author Adrian Cole
- */
-public interface  NetworkClient {
-
-   OrgNetwork findNetworkInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String networkName);
-
-   OrgNetwork getNetwork(URI network);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgApi.java
new file mode 100644
index 0000000..44d3bde
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgApi.java
@@ -0,0 +1,87 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
+
+import java.net.URI;
+import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.Endpoint;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.VCloudMediaType;
+import org.jclouds.vcloud.domain.Org;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.endpoints.OrgList;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.functions.OrgNameToEndpoint;
+import org.jclouds.vcloud.xml.OrgHandler;
+import org.jclouds.vcloud.xml.OrgListHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to Org functionality in vCloud
+ * <p/>
+ * 
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface OrgApi {
+
+   /**
+    * The response to a login request includes a list of the organizations to which the
+    * authenticated user has access.
+    * 
+    * @return organizations indexed by name
+    */
+   @GET
+   @Endpoint(OrgList.class)
+   @XMLResponseParser(OrgListHandler.class)
+   @Consumes(VCloudMediaType.ORGLIST_XML)
+   Map<String, ReferenceType> listOrgs();
+
+   @GET
+   @XMLResponseParser(OrgHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @Consumes(ORG_XML)
+   Org getOrg(@EndpointParam URI orgId);
+
+   /**
+    * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and task lists within
+    * the organization.
+    * 
+    * @param name
+    *           organization name, or null for the default
+    * @throws NoSuchElementException
+    *            if you specified an org name that isn't present
+    */
+   @GET
+   @XMLResponseParser(OrgHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @Consumes(ORG_XML)
+   Org findOrgNamed(@Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
deleted file mode 100644
index cc69b74..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgAsyncClient.java
+++ /dev/null
@@ -1,82 +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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
-
-import java.net.URI;
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.Endpoint;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.VCloudMediaType;
-import org.jclouds.vcloud.domain.Org;
-import org.jclouds.vcloud.domain.ReferenceType;
-import org.jclouds.vcloud.endpoints.OrgList;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.functions.OrgNameToEndpoint;
-import org.jclouds.vcloud.xml.OrgHandler;
-import org.jclouds.vcloud.xml.OrgListHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to Org functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface OrgAsyncClient {
-
-   /**
-    * 
-    * @see OrgClient#listOrgs
-    */
-   @GET
-   @Endpoint(OrgList.class)
-   @XMLResponseParser(OrgListHandler.class)
-   @Consumes(VCloudMediaType.ORGLIST_XML)
-   ListenableFuture<Map<String, ReferenceType>> listOrgs();
-
-   /**
-    * @see OrgClient#getOrg
-    */
-   @GET
-   @XMLResponseParser(OrgHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(ORG_XML)
-   ListenableFuture<Org> getOrg(@EndpointParam URI orgId);
-
-   /**
-    * @see OrgClient#getOrgNamed
-    */
-   @GET
-   @XMLResponseParser(OrgHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(ORG_XML)
-   ListenableFuture<Org> findOrgNamed(
-            @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgClient.java
deleted file mode 100644
index 356a70c..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/OrgClient.java
+++ /dev/null
@@ -1,54 +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.features;
-
-import java.net.URI;
-import java.util.Map;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.domain.Org;
-import org.jclouds.vcloud.domain.ReferenceType;
-
-/**
- * Provides access to Org functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-public interface OrgClient {
-
-   /**
-    * The response to a login request includes a list of the organizations to which the
-    * authenticated user has access.
-    * 
-    * @return organizations indexed by name
-    */
-   Map<String, ReferenceType> listOrgs();
-
-   Org getOrg(URI orgId);
-
-   /**
-    * This call returns a list of all vCloud Data Centers (vdcs), catalogs, and task lists within
-    * the organization.
-    * 
-    * @param name
-    *           organization name, or null for the default
-    * @throws NoSuchElementException
-    *            if you specified an org name that isn't present
-    */
-   Org findOrgNamed(@Nullable String name);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskApi.java
new file mode 100644
index 0000000..4fe232e
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskApi.java
@@ -0,0 +1,82 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.TASKSLIST_XML;
+import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
+
+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;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.TasksList;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
+import org.jclouds.vcloud.xml.TaskHandler;
+import org.jclouds.vcloud.xml.TasksListHandler;
+
+/**
+ * Provides access to Task functionality in vCloud
+ * <p/>
+ * 
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface TaskApi {
+
+   @GET
+   @Consumes(TASKSLIST_XML)
+   @XMLResponseParser(TasksListHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   TasksList getTasksList(@EndpointParam URI tasksListId);
+
+   @GET
+   @Consumes(TASKSLIST_XML)
+   @XMLResponseParser(TasksListHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   TasksList findTasksListInOrgNamed(@Nullable @EndpointParam(parser = OrgNameToTasksListEndpoint.class) String orgName);
+
+   /**
+    * Whenever the result of a request cannot be returned immediately, the server creates a Task
+    * object and includes it in the response, as a member of the Tasks container in the response
+    * body. Each Task has an href value, which is a URL that the client can use to retrieve the Task
+    * element alone, without the rest of the response in which it was contained. All information
+    * about the task is included in the Task element when it is returned in the response’s Tasks
+    * container, so a client does not need to make an additional request to the Task URL unless it
+    * wants to follow the progress of a task that was incomplete.
+    */
+   @GET
+   @Consumes(TASK_XML)
+   @XMLResponseParser(TaskHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Task getTask(@EndpointParam URI taskId);
+
+   @POST
+   @Path("/action/cancel")
+   void cancelTask(@EndpointParam URI taskId);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.java
deleted file mode 100644
index 375f113..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskAsyncClient.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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.TASKSLIST_XML;
-import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
-
-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.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.TasksList;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
-import org.jclouds.vcloud.xml.TaskHandler;
-import org.jclouds.vcloud.xml.TasksListHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to Task functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface TaskAsyncClient {
-
-   /**
-    * @see TaskClient#getTasksList
-    */
-   @GET
-   @Consumes(TASKSLIST_XML)
-   @XMLResponseParser(TasksListHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<TasksList> getTasksList(@EndpointParam URI tasksListId);
-
-   /**
-    * @see TaskClient#findTasksListInOrgNamed
-    */
-   @GET
-   @Consumes(TASKSLIST_XML)
-   @XMLResponseParser(TasksListHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<TasksList> findTasksListInOrgNamed(
-            @Nullable @EndpointParam(parser = OrgNameToTasksListEndpoint.class) String orgName);
-
-   /**
-    * @see TaskClient#getTask
-    */
-   @GET
-   @Consumes(TASK_XML)
-   @XMLResponseParser(TaskHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Task> getTask(@EndpointParam URI taskId);
-
-   /**
-    * @see TaskClient#cancelTask
-    */
-   @POST
-   @Path("/action/cancel")
-   ListenableFuture<Void> cancelTask(@EndpointParam URI taskId);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskClient.java
deleted file mode 100644
index 67c9743..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/TaskClient.java
+++ /dev/null
@@ -1,48 +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.features;
-
-import java.net.URI;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.TasksList;
-
-/**
- * Provides access to Task functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-public interface TaskClient {
-
-   TasksList getTasksList(URI tasksListId);
-
-   TasksList findTasksListInOrgNamed(String orgName);
-
-   /**
-    * Whenever the result of a request cannot be returned immediately, the server creates a Task
-    * object and includes it in the response, as a member of the Tasks container in the response
-    * body. Each Task has an href value, which is a URL that the client can use to retrieve the Task
-    * element alone, without the rest of the response in which it was contained. All information
-    * about the task is included in the Task element when it is returned in the response’s Tasks
-    * container, so a client does not need to make an additional request to the Task URL unless it
-    * wants to follow the progress of a task that was incomplete.
-    */
-   Task getTask(URI taskId);
-
-   void cancelTask(URI taskId);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppApi.java
new file mode 100644
index 0000000..d1d51f8
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppApi.java
@@ -0,0 +1,262 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.DEPLOYVAPPPARAMS_XML;
+import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.UNDEPLOYVAPPPARAMS_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
+
+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.Path;
+import javax.ws.rs.Produces;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.predicates.validators.DnsNameValidator;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.ParamValidators;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.PayloadParams;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindDeployVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.OrgNameVDCNameResourceEntityNameToEndpoint;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.options.CloneVAppOptions;
+import org.jclouds.vcloud.xml.TaskHandler;
+import org.jclouds.vcloud.xml.VAppHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to VApp functionality in vCloud
+ * <p/>
+ * 
+ * @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface VAppApi {
+   @GET
+   @Consumes(VAPP_XML)
+   @XMLResponseParser(VAppHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @MapBinder(OrgNameVDCNameResourceEntityNameToEndpoint.class)
+   VApp findVAppInOrgVDCNamed(@Nullable @PayloadParam("orgName") String orgName,
+                              @Nullable @PayloadParam("vdcName") String vdcName, @PayloadParam("resourceName") String vAppName);
+
+   @POST
+   @Path("/action/cloneVApp")
+   @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
+   @Consumes(TASK_XML)
+   @XMLResponseParser(TaskHandler.class)
+   @MapBinder(BindCloneVAppParamsToXmlPayload.class)
+   Task copyVAppToVDCAndName(@PayloadParam("Source") URI sourceVApp,
+                             @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
+                             CloneVAppOptions... options);
+
+   @POST
+   @Path("/action/cloneVApp")
+   @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
+   @Consumes(TASK_XML)
+   @XMLResponseParser(TaskHandler.class)
+   @PayloadParams(keys = "IsSourceDelete", values = "true")
+   @MapBinder(BindCloneVAppParamsToXmlPayload.class)
+   Task moveVAppToVDCAndRename(@PayloadParam("Source") URI sourceVApp,
+                               @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
+                               CloneVAppOptions... options);
+
+   @GET
+   @Consumes(VAPP_XML)
+   @XMLResponseParser(VAppHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   VApp getVApp(@EndpointParam URI href);
+
+   /**
+    * To deploy a vApp, the client makes a request to its action/deploy URL. Deploying a vApp
+    * automatically deploys all of the virtual machines it contains. To deploy a virtual machine,
+    * the client makes a request to its action/deploy URL.
+    * <p/>
+    * Deploying a Vm implicitly deploys the parent vApp if that vApp is not already deployed.
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Produces(DEPLOYVAPPPARAMS_XML)
+   @Path("/action/deploy")
+   @MapBinder(BindDeployVAppParamsToXmlPayload.class)
+   @XMLResponseParser(TaskHandler.class)
+   Task deployVApp(@EndpointParam URI href);
+
+   /**
+    * like {@link #deployVApp(URI)}, except deploy transitions to power on state
+    * 
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Produces(DEPLOYVAPPPARAMS_XML)
+   @Path("/action/deploy")
+   @MapBinder(BindDeployVAppParamsToXmlPayload.class)
+   @PayloadParams(keys = "powerOn", values = "true")
+   @XMLResponseParser(TaskHandler.class)
+   Task deployAndPowerOnVApp(@EndpointParam URI href);
+
+   /**
+    * Undeploying a vApp powers off or suspends any running virtual machines it contains, then frees
+    * the resources reserved for the vApp and sets the vApp’s deploy attribute to a value of false
+    * to indicate that it is not deployed.
+    * <p/>
+    * Undeploying a virtual machine powers off or suspends the virtual machine, then frees the
+    * resources reserved for it and sets the its deploy attribute to a value of false to indicate
+    * that it is not deployed. This operation has no effect on the containing vApp.
+    * <h4>NOTE</h4>
+    * Using this method will simply power off the vms. In order to save their state, use
+    * {@link #undeployAndSaveStateOf}
+    * 
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Produces(UNDEPLOYVAPPPARAMS_XML)
+   @Path("/action/undeploy")
+   @MapBinder(BindUndeployVAppParamsToXmlPayload.class)
+   @XMLResponseParser(TaskHandler.class)
+   Task undeployVApp(@EndpointParam URI href);
+
+   /**
+    * like {@link #undeployVApp(URI)}, where the undeployed virtual machines are suspended and their
+    * suspend state saved
+    * 
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Produces(UNDEPLOYVAPPPARAMS_XML)
+   @Path("/action/undeploy")
+   @MapBinder(BindUndeployVAppParamsToXmlPayload.class)
+   @PayloadParams(keys = "saveState", values = "true")
+   @XMLResponseParser(TaskHandler.class)
+   Task undeployAndSaveStateOfVApp(@EndpointParam URI href);
+
+   /**
+    * A powerOn request to a vApp URL powers on all of the virtual machines in the vApp, as
+    * specified in the vApp’s StartupSection field.
+    * <p/>
+    * A powerOn request to a virtual machine URL powers on the specified virtual machine and forces
+    * deployment of the parent vApp.
+    * <p/>
+    * <h4>NOTE</h4> A powerOn request to a vApp or virtual machine that is undeployed forces
+    * deployment.
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Path("/power/action/powerOn")
+   @XMLResponseParser(TaskHandler.class)
+   Task powerOnVApp(@EndpointParam URI href);
+
+   /**
+    * A powerOff request to a vApp URL powers off all of the virtual machines in the vApp, as
+    * specified in its StartupSection field.
+    * <p/>
+    * A powerOff request to a virtual machine URL powers off the specified virtual machine.
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Path("/power/action/powerOff")
+   @XMLResponseParser(TaskHandler.class)
+   Task powerOffVApp(@EndpointParam URI href);
+
+   /**
+    * A shutdown request to a vApp URL shuts down all of the virtual machines in the vApp, as
+    * specified in its StartupSection field.
+    * <p/>
+    * A shutdown request to a virtual machine URL shuts down the specified virtual machine.
+    * <p/>
+    * <h4>NOTE</h4Because this request sends a signal to the guest OS, the vCloud API cannot track
+    * the progress or verify the result of the requested operation. Hence, void is returned
+    */
+   @POST
+   @Path("/power/action/shutdown")
+   void shutdownVApp(@EndpointParam URI href);
+
+   /**
+    * A reset request to a vApp URL resets all of the virtual machines in the vApp, as specified in
+    * its StartupSection field.
+    * <p/>
+    * A reset request to a virtual machine URL resets the specified virtual machine.
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Path("/power/action/reset")
+   @XMLResponseParser(TaskHandler.class)
+   Task resetVApp(@EndpointParam URI href);
+
+   /**
+    * A reboot request to a vApp URL reboots all of the virtual machines in the vApp, as specified
+    * in its StartupSection field.
+    * <p/>
+    * A reboot request to a virtual machine URL reboots the specified virtual machine.
+    * <p/>
+    * <h4>NOTE</h4> Because this request sends a signal to the guest OS, the vCloud API cannot track
+    * the progress or verify the result of the requested operation. Hence, void is returned
+    */
+   @POST
+   @Path("/power/action/reboot")
+   void rebootVApp(@EndpointParam URI href);
+
+   /**
+    * A suspend request to a vApp URL suspends all of the virtual machines in the vApp, as specified
+    * in its StartupSection field.
+    * <p/>
+    * A suspend request to a virtual machine URL suspends the specified virtual machine.
+    */
+   @POST
+   @Consumes(TASK_XML)
+   @Path("/power/action/suspend")
+   @XMLResponseParser(TaskHandler.class)
+   Task suspendVApp(@EndpointParam URI href);
+
+   /**
+    * delete a vAppTemplate, vApp, or media image. You cannot delete an object if it is in use. Any
+    * object that is being copied or moved is in use. Other criteria that determine whether an
+    * object is in use depend on the object type.
+    * <ul>
+    * <li>A vApptemplate is in use if it is being instantiated. After instantiation is complete, the
+    * template is no longer in use.</li>
+    * <li>A vApp is in use if it is deployed.</li>
+    * <li>A media image is in use if it is inserted in a Vm.</li>
+    * </ul>
+    * 
+    * @param href
+    *           href of the vApp
+    * @return task of the operation in progress
+    */
+   @DELETE
+   @Consumes(TASK_XML)
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   @XMLResponseParser(TaskHandler.class)
+   Task deleteVApp(@EndpointParam URI href);
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
deleted file mode 100644
index bd332d6..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppAsyncClient.java
+++ /dev/null
@@ -1,219 +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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.DEPLOYVAPPPARAMS_XML;
-import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
-import static org.jclouds.vcloud.VCloudMediaType.UNDEPLOYVAPPPARAMS_XML;
-import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
-
-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.Path;
-import javax.ws.rs.Produces;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.predicates.validators.DnsNameValidator;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.ParamValidators;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.PayloadParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
-import org.jclouds.vcloud.binders.BindDeployVAppParamsToXmlPayload;
-import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload;
-import org.jclouds.vcloud.binders.OrgNameVDCNameResourceEntityNameToEndpoint;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.options.CloneVAppOptions;
-import org.jclouds.vcloud.xml.TaskHandler;
-import org.jclouds.vcloud.xml.VAppHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to VApp functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VAppAsyncClient {
-
-   /**
-    * @see VAppClient#copyVAppToVDCAndName
-    */
-   @POST
-   @Path("/action/cloneVApp")
-   @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
-   @Consumes(TASK_XML)
-   @XMLResponseParser(TaskHandler.class)
-   @MapBinder(BindCloneVAppParamsToXmlPayload.class)
-   ListenableFuture<Task> copyVAppToVDCAndName(@PayloadParam("Source") URI sourceVApp,
-            @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
-            CloneVAppOptions... options);
-
-   /**
-    * @see VAppClient#moveVAppToVDCAndRename
-    */
-   @POST
-   @Path("/action/cloneVApp")
-   @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
-   @Consumes(TASK_XML)
-   @XMLResponseParser(TaskHandler.class)
-   @PayloadParams(keys = "IsSourceDelete", values = "true")
-   @MapBinder(BindCloneVAppParamsToXmlPayload.class)
-   ListenableFuture<Task> moveVAppToVDCAndRename(@PayloadParam("Source") URI sourceVApp,
-            @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
-            CloneVAppOptions... options);
-
-   /**
-    * @see VAppClient#findVAppInOrgVDCNamed
-    */
-   @GET
-   @Consumes(VAPP_XML)
-   @XMLResponseParser(VAppHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameVDCNameResourceEntityNameToEndpoint.class)
-   ListenableFuture<VApp> findVAppInOrgVDCNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("vdcName") String vdcName, @PayloadParam("resourceName") String vAppName);
-
-   /**
-    * @see VAppClient#getVApp
-    */
-   @GET
-   @Consumes(VAPP_XML)
-   @XMLResponseParser(VAppHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VApp> getVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#deployVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Produces(DEPLOYVAPPPARAMS_XML)
-   @Path("/action/deploy")
-   @MapBinder(BindDeployVAppParamsToXmlPayload.class)
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> deployVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#deployAndPowerOnVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Produces(DEPLOYVAPPPARAMS_XML)
-   @Path("/action/deploy")
-   @MapBinder(BindDeployVAppParamsToXmlPayload.class)
-   @PayloadParams(keys = "powerOn", values = "true")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> deployAndPowerOnVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#undeployVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Produces(UNDEPLOYVAPPPARAMS_XML)
-   @Path("/action/undeploy")
-   @MapBinder(BindUndeployVAppParamsToXmlPayload.class)
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> undeployVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#undeployAndSaveStateOfVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Produces(UNDEPLOYVAPPPARAMS_XML)
-   @Path("/action/undeploy")
-   @MapBinder(BindUndeployVAppParamsToXmlPayload.class)
-   @PayloadParams(keys = "saveState", values = "true")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> undeployAndSaveStateOfVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#powerOnVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Path("/power/action/powerOn")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> powerOnVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#powerOffVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Path("/power/action/powerOff")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> powerOffVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#shutdownVApp
-    */
-   @POST
-   @Path("/power/action/shutdown")
-   ListenableFuture<Void> shutdownVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#resetVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Path("/power/action/reset")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> resetVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#rebootVApp
-    */
-   @POST
-   @Path("/power/action/reboot")
-   ListenableFuture<Void> rebootVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#suspendVApp
-    */
-   @POST
-   @Consumes(TASK_XML)
-   @Path("/power/action/suspend")
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> suspendVApp(@EndpointParam URI href);
-
-   /**
-    * @see VAppClient#deleteVApp
-    */
-   @DELETE
-   @Consumes(TASK_XML)
-   @Fallback(VoidOnNotFoundOr404.class)
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> deleteVApp(@EndpointParam URI href);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppClient.java
deleted file mode 100644
index 98204cd..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppClient.java
+++ /dev/null
@@ -1,152 +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.features;
-
-import java.net.URI;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.options.CloneVAppOptions;
-
-/**
- * Provides access to VApp functionality in vCloud
- * <p/>
- * 
- * @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
- * @author Adrian Cole
- */
-public interface VAppClient {
-   VApp findVAppInOrgVDCNamed(@Nullable String orgName, @Nullable String catalogName, String vAppName);
-
-   Task copyVAppToVDCAndName(URI sourceVApp, URI vDC, String newName, CloneVAppOptions... options);
-
-   Task moveVAppToVDCAndRename(URI sourceVApp, URI vDC, String newName, CloneVAppOptions... options);
-
-   VApp getVApp(URI vApp);
-
-   /**
-    * To deploy a vApp, the client makes a request to its action/deploy URL. Deploying a vApp
-    * automatically deploys all of the virtual machines it contains. To deploy a virtual machine,
-    * the client makes a request to its action/deploy URL.
-    * <p/>
-    * Deploying a Vm implicitly deploys the parent vApp if that vApp is not already deployed.
-    */
-   Task deployVApp(URI href);
-
-   /**
-    * like {@link #deployVApp(URI)}, except deploy transitions to power on state
-    * 
-    */
-   Task deployAndPowerOnVApp(URI href);
-
-   /**
-    * Undeploying a vApp powers off or suspends any running virtual machines it contains, then frees
-    * the resources reserved for the vApp and sets the vApp’s deploy attribute to a value of false
-    * to indicate that it is not deployed.
-    * <p/>
-    * Undeploying a virtual machine powers off or suspends the virtual machine, then frees the
-    * resources reserved for it and sets the its deploy attribute to a value of false to indicate
-    * that it is not deployed. This operation has no effect on the containing vApp.
-    * <h4>NOTE</h4>
-    * Using this method will simply power off the vms. In order to save their state, use
-    * {@link #undeployAndSaveStateOf}
-    * 
-    */
-   Task undeployVApp(URI href);
-
-   /**
-    * like {@link #undeployVApp(URI)}, where the undeployed virtual machines are suspended and their
-    * suspend state saved
-    * 
-    */
-   Task undeployAndSaveStateOfVApp(URI href);
-
-   /**
-    * A powerOn request to a vApp URL powers on all of the virtual machines in the vApp, as
-    * specified in the vApp’s StartupSection field.
-    * <p/>
-    * A powerOn request to a virtual machine URL powers on the specified virtual machine and forces
-    * deployment of the parent vApp.
-    * <p/>
-    * <h4>NOTE</h4> A powerOn request to a vApp or virtual machine that is undeployed forces
-    * deployment.
-    */
-   Task powerOnVApp(URI href);
-
-   /**
-    * A powerOff request to a vApp URL powers off all of the virtual machines in the vApp, as
-    * specified in its StartupSection field.
-    * <p/>
-    * A powerOff request to a virtual machine URL powers off the specified virtual machine.
-    */
-   Task powerOffVApp(URI href);
-
-   /**
-    * A shutdown request to a vApp URL shuts down all of the virtual machines in the vApp, as
-    * specified in its StartupSection field.
-    * <p/>
-    * A shutdown request to a virtual machine URL shuts down the specified virtual machine.
-    * <p/>
-    * <h4>NOTE</h4Because this request sends a signal to the guest OS, the vCloud API cannot track
-    * the progress or verify the result of the requested operation. Hence, void is returned
-    */
-   void shutdownVApp(URI href);
-
-   /**
-    * A reset request to a vApp URL resets all of the virtual machines in the vApp, as specified in
-    * its StartupSection field.
-    * <p/>
-    * A reset request to a virtual machine URL resets the specified virtual machine.
-    */
-   Task resetVApp(URI href);
-
-   /**
-    * A reboot request to a vApp URL reboots all of the virtual machines in the vApp, as specified
-    * in its StartupSection field.
-    * <p/>
-    * A reboot request to a virtual machine URL reboots the specified virtual machine.
-    * <p/>
-    * <h4>NOTE</h4> Because this request sends a signal to the guest OS, the vCloud API cannot track
-    * the progress or verify the result of the requested operation. Hence, void is returned
-    */
-   void rebootVApp(URI href);
-
-   /**
-    * A suspend request to a vApp URL suspends all of the virtual machines in the vApp, as specified
-    * in its StartupSection field.
-    * <p/>
-    * A suspend request to a virtual machine URL suspends the specified virtual machine.
-    */
-   Task suspendVApp(URI href);
-
-   /**
-    * delete a vAppTemplate, vApp, or media image. You cannot delete an object if it is in use. Any
-    * object that is being copied or moved is in use. Other criteria that determine whether an
-    * object is in use depend on the object type.
-    * <ul>
-    * <li>A vApptemplate is in use if it is being instantiated. After instantiation is complete, the
-    * template is no longer in use.</li>
-    * <li>A vApp is in use if it is deployed.</li>
-    * <li>A media image is in use if it is inserted in a Vm.</li>
-    * </ul>
-    * 
-    * @param href
-    *           href of the vApp
-    * @return task of the operation in progress
-    */
-   Task deleteVApp(URI href);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateApi.java
new file mode 100644
index 0000000..536e3df
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateApi.java
@@ -0,0 +1,181 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
+import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
+
+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.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.ovf.Envelope;
+import org.jclouds.ovf.xml.EnvelopeHandler;
+import org.jclouds.predicates.validators.DnsNameValidator;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.ParamValidators;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.PayloadParams;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.binders.BindCaptureVAppParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindCloneVAppTemplateParamsToXmlPayload;
+import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
+import org.jclouds.vcloud.binders.OrgNameCatalogNameVAppTemplateNameToEndpoint;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.options.CaptureVAppOptions;
+import org.jclouds.vcloud.options.CloneVAppTemplateOptions;
+import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
+import org.jclouds.vcloud.xml.TaskHandler;
+import org.jclouds.vcloud.xml.VAppHandler;
+import org.jclouds.vcloud.xml.VAppTemplateHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to VApp Template functionality in vCloud
+ * <p/>
+ * 
+ * @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface VAppTemplateApi {
+   /**
+    * returns the vapp template corresponding to a catalog item in the catalog associated with the
+    * specified name. Note that the org and catalog parameters can be null to choose default.
+    * 
+    * @param orgName
+    *           organization name, or null for the default
+    * @param catalogName
+    *           catalog name, or null for the default
+    * @param itemName
+    *           item you wish to lookup
+    * 
+    * @throws NoSuchElementException
+    *            if you specified an org, catalog, or catalog item name that isn't present
+    */
+   @GET
+   @Consumes(VAPPTEMPLATE_XML)
+   @XMLResponseParser(VAppTemplateHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @MapBinder(OrgNameCatalogNameVAppTemplateNameToEndpoint.class)
+   VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable @PayloadParam("orgName") String orgName,
+                                                  @Nullable @PayloadParam("catalogName") String catalogName,
+                                                  @PayloadParam("itemName") String itemName);
+
+   /**
+    */
+   @POST
+   @Path("/action/instantiateVAppTemplate")
+   @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
+   @Consumes(VAPP_XML)
+   @XMLResponseParser(VAppHandler.class)
+   @MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
+   VApp createVAppInVDCByInstantiatingTemplate(
+           @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName, @EndpointParam URI vdc,
+           @PayloadParam("template") URI template, InstantiateVAppTemplateOptions... options);
+
+   @POST
+   @Path("/action/cloneVAppTemplate")
+   @Produces("application/vnd.vmware.vcloud.cloneVAppTemplateParams+xml")
+   @Consumes(TASK_XML)
+   @XMLResponseParser(TaskHandler.class)
+   @MapBinder(BindCloneVAppTemplateParamsToXmlPayload.class)
+   Task copyVAppTemplateToVDCAndName(@PayloadParam("Source") URI sourceVAppTemplate,
+                                     @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
+                                     CloneVAppTemplateOptions... options);
+
+   @POST
+   @Path("/action/cloneVAppTemplate")
+   @Produces("application/vnd.vmware.vcloud.cloneVAppTemplateParams+xml")
+   @Consumes(TASK_XML)
+   @XMLResponseParser(TaskHandler.class)
+   @PayloadParams(keys = "IsSourceDelete", values = "true")
+   @MapBinder(BindCloneVAppTemplateParamsToXmlPayload.class)
+   Task moveVAppTemplateToVDCAndRename(@PayloadParam("Source") URI toClone,
+                                       @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
+                                       CloneVAppTemplateOptions... options);
+
+   /**
+    * The captureVApp request creates a vApp template from an instantiated vApp. <h4>Note</h4>
+    * Before it can be captured, a vApp must be undeployed
+    * 
+    * @param targetVdcHref
+    * @param sourceVAppHref
+    * @param newTemplateName
+    * @param options
+    * @return template in progress
+    */
+   @POST
+   @Path("/action/captureVApp")
+   @Produces("application/vnd.vmware.vcloud.captureVAppParams+xml")
+   @Consumes(VAPPTEMPLATE_XML)
+   @XMLResponseParser(VAppTemplateHandler.class)
+   @MapBinder(BindCaptureVAppParamsToXmlPayload.class)
+   VAppTemplate captureVAppAsTemplateInVDC(@PayloadParam("vApp") URI toCapture,
+                                           @PayloadParam("templateName") @ParamValidators(DnsNameValidator.class) String templateName,
+                                           @EndpointParam URI vdc, CaptureVAppOptions... options);
+
+   @GET
+   @Consumes(VAPPTEMPLATE_XML)
+   @XMLResponseParser(VAppTemplateHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   VAppTemplate getVAppTemplate(@EndpointParam URI vAppTemplate);
+
+   @GET
+   @Consumes(MediaType.TEXT_XML)
+   @Path("/ovf")
+   @XMLResponseParser(EnvelopeHandler.class)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Envelope getOvfEnvelopeForVAppTemplate(@EndpointParam URI href);
+
+   /**
+    * delete a vAppTemplate, vApp, or media image. You cannot delete an object if it is in use. Any
+    * object that is being copied or moved is in use. Other criteria that determine whether an
+    * object is in use depend on the object type.
+    * <ul>
+    * <li>A vApptemplate is in use if it is being instantiated. After instantiation is complete, the
+    * template is no longer in use.</li>
+    * <li>A vApp is in use if it is deployed.</li>
+    * <li>A media image is in use if it is inserted in a Vm.</li>
+    * </ul>
+    * 
+    * @param id
+    *           href of the vApp
+    * @return task of the operation in progress
+    */
+   @DELETE
+   @Consumes(TASK_XML)
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   @XMLResponseParser(TaskHandler.class)
+   Task deleteVAppTemplate(@EndpointParam URI href);
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
deleted file mode 100644
index 3ed2e28..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateAsyncClient.java
+++ /dev/null
@@ -1,165 +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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
-import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
-import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
-
-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.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.ovf.Envelope;
-import org.jclouds.ovf.xml.EnvelopeHandler;
-import org.jclouds.predicates.validators.DnsNameValidator;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.ParamValidators;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.PayloadParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.binders.BindCaptureVAppParamsToXmlPayload;
-import org.jclouds.vcloud.binders.BindCloneVAppTemplateParamsToXmlPayload;
-import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
-import org.jclouds.vcloud.binders.OrgNameCatalogNameVAppTemplateNameToEndpoint;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.options.CaptureVAppOptions;
-import org.jclouds.vcloud.options.CloneVAppTemplateOptions;
-import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
-import org.jclouds.vcloud.xml.TaskHandler;
-import org.jclouds.vcloud.xml.VAppHandler;
-import org.jclouds.vcloud.xml.VAppTemplateHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to VAppTemplate functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VAppTemplateAsyncClient {
-
-   /**
-    * @see VAppTemplateClient#createVAppInVDCByInstantiatingTemplate
-    */
-   @POST
-   @Path("/action/instantiateVAppTemplate")
-   @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
-   @Consumes(VAPP_XML)
-   @XMLResponseParser(VAppHandler.class)
-   @MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
-   ListenableFuture<VApp> createVAppInVDCByInstantiatingTemplate(
-            @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName, @EndpointParam URI vdc,
-            @PayloadParam("template") URI template, InstantiateVAppTemplateOptions... options);
-
-   /**
-    * @see VAppTemplateClient#getOvfEnvelopeForVAppTemplate
-    */
-   @GET
-   @Consumes(MediaType.TEXT_XML)
-   @Path("/ovf")
-   @XMLResponseParser(EnvelopeHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<Envelope> getOvfEnvelopeForVAppTemplate(@EndpointParam URI href);
-
-   /**
-    * @see VAppTemplateClient#captureVAppAsTemplateInVDC
-    */
-   @POST
-   @Path("/action/captureVApp")
-   @Produces("application/vnd.vmware.vcloud.captureVAppParams+xml")
-   @Consumes(VAPPTEMPLATE_XML)
-   @XMLResponseParser(VAppTemplateHandler.class)
-   @MapBinder(BindCaptureVAppParamsToXmlPayload.class)
-   ListenableFuture<VAppTemplate> captureVAppAsTemplateInVDC(@PayloadParam("vApp") URI toCapture,
-            @PayloadParam("templateName") @ParamValidators(DnsNameValidator.class) String templateName,
-            @EndpointParam URI vdc, CaptureVAppOptions... options);
-
-   /**
-    * @see VAppTemplateClient#copyVAppTemplateToVDCAndName
-    */
-   @POST
-   @Path("/action/cloneVAppTemplate")
-   @Produces("application/vnd.vmware.vcloud.cloneVAppTemplateParams+xml")
-   @Consumes(TASK_XML)
-   @XMLResponseParser(TaskHandler.class)
-   @MapBinder(BindCloneVAppTemplateParamsToXmlPayload.class)
-   ListenableFuture<Task> copyVAppTemplateToVDCAndName(@PayloadParam("Source") URI sourceVAppTemplate,
-            @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
-            CloneVAppTemplateOptions... options);
-
-   /**
-    * @see VAppTemplateClient#moveVAppTemplateToVDCAndRename
-    */
-   @POST
-   @Path("/action/cloneVAppTemplate")
-   @Produces("application/vnd.vmware.vcloud.cloneVAppTemplateParams+xml")
-   @Consumes(TASK_XML)
-   @XMLResponseParser(TaskHandler.class)
-   @PayloadParams(keys = "IsSourceDelete", values = "true")
-   @MapBinder(BindCloneVAppTemplateParamsToXmlPayload.class)
-   ListenableFuture<Task> moveVAppTemplateToVDCAndRename(@PayloadParam("Source") URI toClone,
-            @EndpointParam URI vdc, @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String newName,
-            CloneVAppTemplateOptions... options);
-
-   /**
-    * @see VAppTemplateClient#findVAppTemplateInOrgCatalogNamed
-    */
-   @GET
-   @Consumes(VAPPTEMPLATE_XML)
-   @XMLResponseParser(VAppTemplateHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameCatalogNameVAppTemplateNameToEndpoint.class)
-   ListenableFuture<VAppTemplate> findVAppTemplateInOrgCatalogNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("catalogName") String catalogName, @PayloadParam("itemName") String itemName);
-
-   /**
-    * @see VAppTemplateClient#getVAppTemplate
-    */
-   @GET
-   @Consumes(VAPPTEMPLATE_XML)
-   @XMLResponseParser(VAppTemplateHandler.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
-
-   /**
-    * @see VAppTemplateClient#deleteVAppTemplate
-    */
-   @DELETE
-   @Consumes(TASK_XML)
-   @Fallback(VoidOnNotFoundOr404.class)
-   @XMLResponseParser(TaskHandler.class)
-   ListenableFuture<Task> deleteVAppTemplate(@EndpointParam URI href);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateClient.java
deleted file mode 100644
index 49d0061..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VAppTemplateClient.java
+++ /dev/null
@@ -1,97 +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.features;
-
-import java.net.URI;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.ovf.Envelope;
-import org.jclouds.vcloud.domain.Task;
-import org.jclouds.vcloud.domain.VApp;
-import org.jclouds.vcloud.domain.VAppTemplate;
-import org.jclouds.vcloud.options.CaptureVAppOptions;
-import org.jclouds.vcloud.options.CloneVAppTemplateOptions;
-import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
-
-/**
- * Provides access to VApp Template functionality in vCloud
- * <p/>
- * 
- * @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
- * @author Adrian Cole
- */
-public interface VAppTemplateClient {
-   /**
-    * returns the vapp template corresponding to a catalog item in the catalog associated with the
-    * specified name. Note that the org and catalog parameters can be null to choose default.
-    * 
-    * @param orgName
-    *           organization name, or null for the default
-    * @param catalogName
-    *           catalog name, or null for the default
-    * @param itemName
-    *           item you wish to lookup
-    * 
-    * @throws NoSuchElementException
-    *            if you specified an org, catalog, or catalog item name that isn't present
-    */
-   VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName, String itemName);
-
-   /**
-    */
-   VApp createVAppInVDCByInstantiatingTemplate(String appName, URI vDC, URI template,
-            InstantiateVAppTemplateOptions... options);
-
-   Task copyVAppTemplateToVDCAndName(URI sourceVAppTemplate, URI vDC, String newName,
-            CloneVAppTemplateOptions... options);
-
-   Task moveVAppTemplateToVDCAndRename(URI sourceVAppTemplate, URI vDC, String newName,
-            CloneVAppTemplateOptions... options);
-
-   /**
-    * The captureVApp request creates a vApp template from an instantiated vApp. <h4>Note</h4>
-    * Before it can be captured, a vApp must be undeployed
-    * 
-    * @param targetVdcHref
-    * @param sourceVAppHref
-    * @param newTemplateName
-    * @param options
-    * @return template in progress
-    */
-   VAppTemplate captureVAppAsTemplateInVDC(URI sourceVAppHref, String newTemplateName, URI targetVdcHref,
-            CaptureVAppOptions... options);
-
-   VAppTemplate getVAppTemplate(URI vApp);
-
-   Envelope getOvfEnvelopeForVAppTemplate(URI vAppTemplate);
-
-   /**
-    * delete a vAppTemplate, vApp, or media image. You cannot delete an object if it is in use. Any
-    * object that is being copied or moved is in use. Other criteria that determine whether an
-    * object is in use depend on the object type.
-    * <ul>
-    * <li>A vApptemplate is in use if it is being instantiated. After instantiation is complete, the
-    * template is no longer in use.</li>
-    * <li>A vApp is in use if it is deployed.</li>
-    * <li>A media image is in use if it is inserted in a Vm.</li>
-    * </ul>
-    * 
-    * @param id
-    *           href of the vApp
-    * @return task of the operation in progress
-    */
-   Task deleteVAppTemplate(URI id);
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCApi.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCApi.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCApi.java
new file mode 100644
index 0000000..c33813e
--- /dev/null
+++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCApi.java
@@ -0,0 +1,74 @@
+/*
+ * 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.features;
+
+import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
+
+import java.net.URI;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.vcloud.binders.OrgNameAndVDCNameToEndpoint;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
+import org.jclouds.vcloud.xml.VDCHandler;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * Provides access to VDC functionality in vCloud
+ * <p/>
+ * 
+ * @author Adrian Cole
+ */
+@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
+public interface VDCApi {
+   @GET
+   @XMLResponseParser(VDCHandler.class)
+   @Consumes(VDC_XML)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   VDC getVDC(@EndpointParam URI vdc);
+
+   /**
+    * returns the VDC in the organization associated with the specified name. Note that both
+    * parameters can be null to choose default.
+    * 
+    * @param orgName
+    *           organization name, or null for the default
+    * @param vdcName
+    *           catalog name, or null for the default
+    * @throws NoSuchElementException
+    *            if you specified an org or vdc name that isn't present
+    */
+   @GET
+   @XMLResponseParser(VDCHandler.class)
+   @Consumes(VDC_XML)
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @MapBinder(OrgNameAndVDCNameToEndpoint.class)
+   VDC findVDCInOrgNamed(@Nullable @PayloadParam("orgName") String orgName,
+                         @Nullable @PayloadParam("vdcName") String vdcName);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.java
deleted file mode 100644
index e003325..0000000
--- a/apis/vcloud/src/main/java/org/jclouds/vcloud/features/VDCAsyncClient.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.features;
-
-import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
-
-import java.net.URI;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.vcloud.binders.OrgNameAndVDCNameToEndpoint;
-import org.jclouds.vcloud.domain.VDC;
-import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest;
-import org.jclouds.vcloud.xml.VDCHandler;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to VDC functionality in vCloud
- * <p/>
- * 
- * @author Adrian Cole
- */
-@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class)
-public interface VDCAsyncClient {
-
-   /**
-    * @see VDCClient#getVDC(URI)
-    */
-   @GET
-   @XMLResponseParser(VDCHandler.class)
-   @Consumes(VDC_XML)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VDC> getVDC(@EndpointParam URI vdc);
-
-   /**
-    * @see VDCClient#findVDCInOrgNamed(String, String)
-    */
-   @GET
-   @XMLResponseParser(VDCHandler.class)
-   @Consumes(VDC_XML)
-   @Fallback(NullOnNotFoundOr404.class)
-   @MapBinder(OrgNameAndVDCNameToEndpoint.class)
-   ListenableFuture<VDC> findVDCInOrgNamed(@Nullable @PayloadParam("orgName") String orgName,
-         @Nullable @PayloadParam("vdcName") String vdcName);
-}