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);
-}