View Javadoc

1   /**
2    * Licensed to jclouds, Inc. (jclouds) under one or more
3    * contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  jclouds licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.jclouds.trmk.vcloud_0_8;
20  
21  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOGITEMCUSTOMIZATIONPARAMETERS_XML;
22  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOGITEM_XML;
23  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.CATALOG_XML;
24  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.INTERNETSERVICESLIST_XML;
25  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.INTERNETSERVICE_XML;
26  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NETWORK_XML;
27  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NODESERVICE_XML;
28  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.ORG_XML;
29  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.PUBLICIPSLIST_XML;
30  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.PUBLICIP_XML;
31  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.TASKSLIST_XML;
32  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.TASK_XML;
33  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VAPPTEMPLATE_XML;
34  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VAPP_XML;
35  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.VDC_XML;
36  
37  import java.net.URI;
38  import java.util.Map;
39  import java.util.Set;
40  
41  import org.jclouds.javax.annotation.Nullable;
42  import javax.ws.rs.Consumes;
43  import javax.ws.rs.DELETE;
44  import javax.ws.rs.GET;
45  import javax.ws.rs.POST;
46  import javax.ws.rs.PUT;
47  import javax.ws.rs.Path;
48  import javax.ws.rs.Produces;
49  
50  import org.jclouds.predicates.validators.DnsNameValidator;
51  import org.jclouds.rest.annotations.EndpointParam;
52  import org.jclouds.rest.annotations.ExceptionParser;
53  import org.jclouds.rest.annotations.MapBinder;
54  import org.jclouds.rest.annotations.ParamValidators;
55  import org.jclouds.rest.annotations.PayloadParam;
56  import org.jclouds.rest.annotations.RequestFilters;
57  import org.jclouds.rest.annotations.ResponseParser;
58  import org.jclouds.rest.annotations.XMLResponseParser;
59  import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
60  import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
61  import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
62  import org.jclouds.trmk.vcloud_0_8.binders.BindCloneVAppParamsToXmlPayload;
63  import org.jclouds.trmk.vcloud_0_8.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
64  import org.jclouds.trmk.vcloud_0_8.binders.BindNodeConfigurationToXmlPayload;
65  import org.jclouds.trmk.vcloud_0_8.binders.BindVAppConfigurationToXmlPayload;
66  import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
67  import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
68  import org.jclouds.trmk.vcloud_0_8.domain.CustomizationParameters;
69  import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
70  import org.jclouds.trmk.vcloud_0_8.domain.Network;
71  import org.jclouds.trmk.vcloud_0_8.domain.Node;
72  import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
73  import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
74  import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
75  import org.jclouds.trmk.vcloud_0_8.domain.Task;
76  import org.jclouds.trmk.vcloud_0_8.domain.TasksList;
77  import org.jclouds.trmk.vcloud_0_8.domain.VApp;
78  import org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration;
79  import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
80  import org.jclouds.trmk.vcloud_0_8.domain.VDC;
81  import org.jclouds.trmk.vcloud_0_8.endpoints.Org;
82  import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
83  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndCatalogNameToEndpoint;
84  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndTasksListNameToEndpoint;
85  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameAndVDCNameToEndpoint;
86  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameCatalogNameItemNameToEndpoint;
87  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
88  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameToEndpoint;
89  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameNetworkNameToEndpoint;
90  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
91  import org.jclouds.trmk.vcloud_0_8.functions.ParseTaskFromLocationHeader;
92  import org.jclouds.trmk.vcloud_0_8.functions.ReturnVoidOnDeleteDefaultIp;
93  import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToInternetServicesEndpoint;
94  import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToPublicIPsEndpoint;
95  import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
96  import org.jclouds.trmk.vcloud_0_8.options.AddNodeOptions;
97  import org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions;
98  import org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions;
99  import org.jclouds.trmk.vcloud_0_8.xml.CatalogHandler;
100 import org.jclouds.trmk.vcloud_0_8.xml.CatalogItemHandler;
101 import org.jclouds.trmk.vcloud_0_8.xml.CustomizationParametersHandler;
102 import org.jclouds.trmk.vcloud_0_8.xml.InternetServiceHandler;
103 import org.jclouds.trmk.vcloud_0_8.xml.InternetServicesHandler;
104 import org.jclouds.trmk.vcloud_0_8.xml.NetworkHandler;
105 import org.jclouds.trmk.vcloud_0_8.xml.NodeHandler;
106 import org.jclouds.trmk.vcloud_0_8.xml.NodesHandler;
107 import org.jclouds.trmk.vcloud_0_8.xml.OrgHandler;
108 import org.jclouds.trmk.vcloud_0_8.xml.PublicIpAddressesHandler;
109 import org.jclouds.trmk.vcloud_0_8.xml.TaskHandler;
110 import org.jclouds.trmk.vcloud_0_8.xml.TasksListHandler;
111 import org.jclouds.trmk.vcloud_0_8.xml.VAppHandler;
112 import org.jclouds.trmk.vcloud_0_8.xml.VAppTemplateHandler;
113 import org.jclouds.trmk.vcloud_0_8.xml.VDCHandler;
114 
115 import com.google.common.util.concurrent.ListenableFuture;
116 import com.google.inject.Provides;
117 
118 /**
119  * Provides access to VCloud resources via their REST API.
120  * <p/>
121  * 
122  * @see <a href=
123  *      "https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx"
124  *      />
125  * @author Adrian Cole
126  */
127 @RequestFilters(SetVCloudTokenCookie.class)
128 public interface TerremarkVCloudAsyncClient {
129 
130    /**
131     * @see TerremarkVCloudClient#getCatalogItemInOrg
132     */
133    @GET
134    @Consumes(CATALOGITEM_XML)
135    @XMLResponseParser(CatalogItemHandler.class)
136    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
137    ListenableFuture<? extends CatalogItem> findCatalogItemInOrgCatalogNamed(
138          @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
139          @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
140          @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
141 
142    /**
143     * @see TerremarkVCloudClient#getCatalogItem
144     */
145    @GET
146    @Consumes(CATALOGITEM_XML)
147    @XMLResponseParser(CatalogItemHandler.class)
148    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
149    ListenableFuture<? extends CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
150 
151    /**
152     * @see TerremarkVCloudClient#getTasksList
153     */
154    @GET
155    @Consumes(TASKSLIST_XML)
156    @XMLResponseParser(TasksListHandler.class)
157    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
158    ListenableFuture<? extends TasksList> getTasksList(@EndpointParam URI tasksListId);
159 
160    /**
161     * @see TerremarkVCloudClient#findTasksListInOrgNamed
162     */
163    @GET
164    @XMLResponseParser(TasksListHandler.class)
165    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
166    @Consumes(TASKSLIST_XML)
167    ListenableFuture<? extends TasksList> findTasksListInOrgNamed(
168          @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String orgName,
169          @Nullable @EndpointParam(parser = OrgNameAndTasksListNameToEndpoint.class) String tasksListName);
170 
171    /**
172     * @see TerremarkVCloudClient#getTask
173     */
174    @GET
175    @Consumes(TASK_XML)
176    @XMLResponseParser(TaskHandler.class)
177    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
178    ListenableFuture<? extends Task> getTask(@EndpointParam URI taskId);
179 
180    /**
181     * @see TerremarkVCloudClient#cancelTask
182     */
183    @POST
184    @Path("/action/cancel")
185    ListenableFuture<Void> cancelTask(@EndpointParam URI taskId);
186 
187    /**
188     * 
189     * @return a listing of all orgs that the current user has access to.
190     */
191    @Provides
192    @Org
193    Map<String, ReferenceType> listOrgs();
194 
195    /**
196     * @see TerremarkVCloudClient#findCatalogInOrgNamed
197     */
198    @GET
199    @XMLResponseParser(CatalogHandler.class)
200    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
201    @Consumes(CATALOG_XML)
202    ListenableFuture<? extends Catalog> findCatalogInOrgNamed(
203          @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
204          @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
205 
206    /**
207     * @see VCloudClient#getVAppTemplate
208     */
209    @GET
210    @Consumes(VAPPTEMPLATE_XML)
211    @XMLResponseParser(VAppTemplateHandler.class)
212    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
213    ListenableFuture<? extends VAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
214 
215    /**
216     * @see VCloudClient#findVAppTemplateInOrgCatalogNamed
217     */
218    @GET
219    @Consumes(VAPPTEMPLATE_XML)
220    @XMLResponseParser(VAppTemplateHandler.class)
221    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
222    ListenableFuture<? extends VAppTemplate> findVAppTemplateInOrgCatalogNamed(
223          @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName,
224          @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName,
225          @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName);
226 
227    /**
228     * @see VCloudClient#findNetworkInOrgVDCNamed
229     */
230    @GET
231    @Consumes(NETWORK_XML)
232    @XMLResponseParser(NetworkHandler.class)
233    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
234    ListenableFuture<? extends Network> findNetworkInOrgVDCNamed(
235          @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String orgName,
236          @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String catalogName,
237          @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String networkName);
238 
239    /**
240     * @see VCloudClient#getNetwork
241     */
242    @GET
243    @Consumes(NETWORK_XML)
244    @XMLResponseParser(NetworkHandler.class)
245    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
246    ListenableFuture<? extends Network> getNetwork(@EndpointParam URI network);
247 
248    /**
249     * @see TerremarkVCloudClient#cloneVAppInVDC
250     */
251    @POST
252    @Path("/action/cloneVApp")
253    @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
254    @Consumes(TASK_XML)
255    @XMLResponseParser(TaskHandler.class)
256    @MapBinder(BindCloneVAppParamsToXmlPayload.class)
257    ListenableFuture<? extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @PayloadParam("vApp") URI toClone,
258          @PayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName, CloneVAppOptions... options);
259 
260    /**
261     * @see VCloudClient#findVAppInOrgVDCNamed
262     */
263    @GET
264    @Consumes(VAPP_XML)
265    @XMLResponseParser(VAppHandler.class)
266    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
267    ListenableFuture<? extends VApp> findVAppInOrgVDCNamed(
268          @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
269          @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
270          @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName);
271 
272    /**
273     * @see VCloudClient#getVApp
274     */
275    @GET
276    @Consumes(VAPP_XML)
277    @XMLResponseParser(VAppHandler.class)
278    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
279    ListenableFuture<? extends VApp> getVApp(@EndpointParam URI vApp);
280 
281    /**
282     * @see TerremarkVCloudClient#deployVApp
283     */
284    @POST
285    @Consumes(TASK_XML)
286    @Path("/action/deploy")
287    @XMLResponseParser(TaskHandler.class)
288    ListenableFuture<? extends Task> deployVApp(@EndpointParam URI vAppId);
289 
290    /**
291     * @see TerremarkVCloudClient#undeployVApp
292     */
293    @POST
294    @Consumes(TASK_XML)
295    @Path("/action/undeploy")
296    @XMLResponseParser(TaskHandler.class)
297    ListenableFuture<? extends Task> undeployVApp(@EndpointParam URI vAppId);
298 
299    /**
300     * @see TerremarkVCloudClient#powerOnVApp
301     */
302    @POST
303    @Consumes(TASK_XML)
304    @Path("/power/action/powerOn")
305    @XMLResponseParser(TaskHandler.class)
306    ListenableFuture<? extends Task> powerOnVApp(@EndpointParam URI vAppId);
307 
308    /**
309     * @see TerremarkVCloudClient#powerOffVApp
310     */
311    @POST
312    @Consumes(TASK_XML)
313    @Path("/power/action/powerOff")
314    @XMLResponseParser(TaskHandler.class)
315    ListenableFuture<? extends Task> powerOffVApp(@EndpointParam URI vAppId);
316 
317    /**
318     * @see TerremarkVCloudClient#shutdownVApp
319     */
320    @POST
321    @Path("/power/action/shutdown")
322    ListenableFuture<Void> shutdownVApp(@EndpointParam URI vAppId);
323 
324    /**
325     * @see TerremarkVCloudClient#resetVApp
326     */
327    @POST
328    @Consumes(TASK_XML)
329    @Path("/power/action/reset")
330    @XMLResponseParser(TaskHandler.class)
331    ListenableFuture<? extends Task> resetVApp(@EndpointParam URI vAppId);
332 
333    /**
334     * @see TerremarkVCloudClient#suspendVApp
335     */
336    @POST
337    @Consumes(TASK_XML)
338    @Path("/power/action/suspend")
339    @XMLResponseParser(TaskHandler.class)
340    ListenableFuture<? extends Task> suspendVApp(@EndpointParam URI vAppId);
341 
342    /**
343     * @see TerremarkVCloudClient#deleteVApp
344     */
345    @DELETE
346    @ResponseParser(ParseTaskFromLocationHeader.class)
347    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
348    ListenableFuture<Task> deleteVApp(@EndpointParam URI vAppId);
349 
350    @GET
351    @XMLResponseParser(OrgHandler.class)
352    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
353    @Consumes(ORG_XML)
354    ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.Org> getOrg(@EndpointParam URI orgId);
355 
356    /**
357     * @see TerremarkVCloudClient#findOrgNamed
358     */
359    @GET
360    @XMLResponseParser(OrgHandler.class)
361    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
362    @Consumes(ORG_XML)
363    ListenableFuture<? extends org.jclouds.trmk.vcloud_0_8.domain.Org> findOrgNamed(
364          @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
365 
366    /**
367     * Terremark does not have multiple catalogs, so we ignore this parameter.
368     */
369    @GET
370    @XMLResponseParser(CatalogHandler.class)
371    @Consumes(CATALOG_XML)
372    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
373    ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogId);
374 
375    /**
376     * @see TerremarkTerremarkVCloudClient#getVDC
377     */
378    @GET
379    @XMLResponseParser(VDCHandler.class)
380    @Consumes(VDC_XML)
381    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
382    ListenableFuture<? extends VDC> getVDC(@EndpointParam URI vdc);
383 
384    /**
385     * @see TerremarkVCloudClient#findVDCInOrgNamed
386     */
387    @GET
388    @XMLResponseParser(VDCHandler.class)
389    @Consumes(VDC_XML)
390    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
391    ListenableFuture<? extends VDC> findVDCInOrgNamed(
392          @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
393          @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
394 
395    /**
396     * @see TerremarkVCloudClient#instantiateVAppTemplateInVDC
397     */
398    @POST
399    @Path("/action/instantiateVAppTemplate")
400    @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
401    @Consumes(VAPP_XML)
402    @XMLResponseParser(VAppHandler.class)
403    @MapBinder(BindInstantiateVAppTemplateParamsToXmlPayload.class)
404    ListenableFuture<? extends VApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
405          @PayloadParam("template") URI template,
406          @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
407          InstantiateVAppTemplateOptions... options);
408 
409    /**
410     * @see TerremarkTerremarkVCloudClient#getAllInternetServicesInVDC
411     */
412    @GET
413    @Consumes(INTERNETSERVICESLIST_XML)
414    @XMLResponseParser(InternetServicesHandler.class)
415    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
416    ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
417          @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
418 
419    /**
420     * @see TerremarkTerremarkVCloudClient#addInternetServiceToExistingIp
421     */
422    @POST
423    @Path("/internetServices")
424    @Produces(INTERNETSERVICE_XML)
425    @Consumes(INTERNETSERVICE_XML)
426    @XMLResponseParser(InternetServiceHandler.class)
427    @MapBinder(AddInternetServiceOptions.class)
428    ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI publicIpId,
429          @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
430          @PayloadParam("port") int port, AddInternetServiceOptions... options);
431 
432    /**
433     * @see TerremarkTerremarkVCloudClient#deletePublicIp
434     */
435    @DELETE
436    @ExceptionParser(ReturnVoidOnDeleteDefaultIp.class)
437    ListenableFuture<Void> deletePublicIp(@EndpointParam URI ipId);
438 
439    /**
440     * @see TerremarkTerremarkVCloudClient#getInternetServicesOnPublicIP
441     */
442    @GET
443    @Path("/internetServices")
444    @Consumes(INTERNETSERVICESLIST_XML)
445    @XMLResponseParser(InternetServicesHandler.class)
446    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
447    ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
448 
449    /**
450     * @see TerremarkTerremarkVCloudClient#getPublicIp
451     */
452    @GET
453    @Consumes(PUBLICIP_XML)
454    @XMLResponseParser(InternetServicesHandler.class)
455    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
456    ListenableFuture<? extends Set<InternetService>> getPublicIp(@EndpointParam URI ipId);
457 
458    /**
459     * @see TerremarkTerremarkVCloudClient#getPublicIpsAssociatedWithVDC
460     */
461    @GET
462    @Consumes(PUBLICIPSLIST_XML)
463    @XMLResponseParser(PublicIpAddressesHandler.class)
464    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
465    ListenableFuture<? extends Set<PublicIpAddress>> getPublicIpsAssociatedWithVDC(
466          @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
467 
468    /**
469     * @see TerremarkTerremarkVCloudClient#deleteInternetService
470     */
471    @DELETE
472    @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
473    ListenableFuture<Void> deleteInternetService(@EndpointParam URI internetServiceId);
474 
475    /**
476     * @see TerremarkTerremarkVCloudClient#getInternetService
477     */
478    @GET
479    @Consumes(INTERNETSERVICESLIST_XML)
480    @XMLResponseParser(InternetServiceHandler.class)
481    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
482    ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
483 
484    /**
485     * @see TerremarkTerremarkVCloudClient#addNode
486     */
487    @POST
488    @Path("/nodeServices")
489    @Produces(NODESERVICE_XML)
490    @Consumes(NODESERVICE_XML)
491    @XMLResponseParser(NodeHandler.class)
492    @MapBinder(AddNodeOptions.class)
493    ListenableFuture<? extends Node> addNode(@EndpointParam URI internetServiceId,
494          @PayloadParam("ipAddress") String ipAddress, @PayloadParam("name") String name,
495          @PayloadParam("port") int port, AddNodeOptions... options);
496 
497    /**
498     * @see TerremarkTerremarkVCloudClient#getNodes
499     */
500    @GET
501    @Path("/nodeServices")
502    @XMLResponseParser(NodesHandler.class)
503    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
504    @Consumes(NODESERVICE_XML)
505    ListenableFuture<? extends Set<Node>> getNodes(@EndpointParam URI internetServiceId);
506 
507    /**
508     * @see TerremarkTerremarkVCloudClient#getNode
509     */
510    @GET
511    @XMLResponseParser(NodeHandler.class)
512    @Consumes(NODESERVICE_XML)
513    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
514    ListenableFuture<? extends Node> getNode(@EndpointParam URI nodeId);
515 
516    /**
517     * @see TerremarkTerremarkVCloudClient#configureNode
518     */
519    @PUT
520    @Produces(NODESERVICE_XML)
521    @Consumes(NODESERVICE_XML)
522    @XMLResponseParser(NodeHandler.class)
523    @MapBinder(BindNodeConfigurationToXmlPayload.class)
524    ListenableFuture<? extends Node> configureNode(@EndpointParam URI nodeId, @PayloadParam("name") String name,
525          @PayloadParam("enabled") boolean enabled, @Nullable @PayloadParam("description") String description);
526 
527    /**
528     * @see TerremarkTerremarkVCloudClient#deleteNode
529     */
530    @DELETE
531    @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
532    ListenableFuture<Void> deleteNode(@EndpointParam URI nodeId);
533 
534    /**
535     * @see TerremarkTerremarkVCloudClient#configureVApp
536     */
537    @PUT
538    @Produces(VAPP_XML)
539    @Consumes(VAPP_XML)
540    @MapBinder(BindVAppConfigurationToXmlPayload.class)
541    @ResponseParser(ParseTaskFromLocationHeader.class)
542    ListenableFuture<? extends Task> configureVApp(
543          @EndpointParam(parser = BindVAppConfigurationToXmlPayload.class) VApp vApp, VAppConfiguration configuration);
544 
545    /**
546     * @see TerremarkVCloudClient#getCustomizationOptions
547     */
548    @GET
549    @XMLResponseParser(CustomizationParametersHandler.class)
550    @Consumes(CATALOGITEMCUSTOMIZATIONPARAMETERS_XML)
551    ListenableFuture<? extends CustomizationParameters> getCustomizationOptions(@EndpointParam URI customization);
552 
553 }