1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.vcloud.terremark;
20
21 import static org.jclouds.vcloud.VCloudMediaType.CATALOGITEM_XML;
22 import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
23 import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
24 import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
25 import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
26 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.CATALOGITEMCUSTOMIZATIONPARAMETERS_XML;
27 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.INTERNETSERVICESLIST_XML;
28 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.INTERNETSERVICE_XML;
29 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.NODESERVICE_XML;
30 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.PUBLICIPSLIST_XML;
31 import static org.jclouds.vcloud.terremark.TerremarkVCloudMediaType.PUBLICIP_XML;
32
33 import java.net.URI;
34 import java.util.Set;
35
36 import javax.annotation.Nullable;
37 import javax.ws.rs.Consumes;
38 import javax.ws.rs.DELETE;
39 import javax.ws.rs.GET;
40 import javax.ws.rs.POST;
41 import javax.ws.rs.PUT;
42 import javax.ws.rs.Path;
43 import javax.ws.rs.Produces;
44
45 import org.jclouds.predicates.validators.DnsNameValidator;
46 import org.jclouds.rest.annotations.EndpointParam;
47 import org.jclouds.rest.annotations.ExceptionParser;
48 import org.jclouds.rest.annotations.MapBinder;
49 import org.jclouds.rest.annotations.ParamValidators;
50 import org.jclouds.rest.annotations.PayloadParam;
51 import org.jclouds.rest.annotations.RequestFilters;
52 import org.jclouds.rest.annotations.ResponseParser;
53 import org.jclouds.rest.annotations.XMLResponseParser;
54 import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
55 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
56 import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
57 import org.jclouds.vcloud.VCloudExpressAsyncClient;
58 import org.jclouds.vcloud.VCloudExpressClient;
59 import org.jclouds.vcloud.domain.Catalog;
60 import org.jclouds.vcloud.domain.Task;
61 import org.jclouds.vcloud.domain.VCloudExpressVApp;
62 import org.jclouds.vcloud.domain.VDC;
63 import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
64 import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
65 import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint;
66 import org.jclouds.vcloud.functions.OrgNameToEndpoint;
67 import org.jclouds.vcloud.functions.ParseTaskFromLocationHeader;
68 import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
69 import org.jclouds.vcloud.terremark.binders.BindNodeConfigurationToXmlPayload;
70 import org.jclouds.vcloud.terremark.binders.BindVAppConfigurationToXmlPayload;
71 import org.jclouds.vcloud.terremark.binders.TerremarkBindInstantiateVAppTemplateParamsToXmlPayload;
72 import org.jclouds.vcloud.terremark.domain.CustomizationParameters;
73 import org.jclouds.vcloud.terremark.domain.InternetService;
74 import org.jclouds.vcloud.terremark.domain.Node;
75 import org.jclouds.vcloud.terremark.domain.Protocol;
76 import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
77 import org.jclouds.vcloud.terremark.domain.TerremarkCatalogItem;
78 import org.jclouds.vcloud.terremark.domain.TerremarkOrg;
79 import org.jclouds.vcloud.terremark.domain.TerremarkVDC;
80 import org.jclouds.vcloud.terremark.domain.VAppConfiguration;
81 import org.jclouds.vcloud.terremark.functions.ReturnVoidOnDeleteDefaultIp;
82 import org.jclouds.vcloud.terremark.functions.VDCURIToInternetServicesEndpoint;
83 import org.jclouds.vcloud.terremark.functions.VDCURIToPublicIPsEndpoint;
84 import org.jclouds.vcloud.terremark.options.AddInternetServiceOptions;
85 import org.jclouds.vcloud.terremark.options.AddNodeOptions;
86 import org.jclouds.vcloud.terremark.xml.CustomizationParametersHandler;
87 import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
88 import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
89 import org.jclouds.vcloud.terremark.xml.NodeHandler;
90 import org.jclouds.vcloud.terremark.xml.NodesHandler;
91 import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
92 import org.jclouds.vcloud.terremark.xml.TerremarkCatalogItemHandler;
93 import org.jclouds.vcloud.terremark.xml.TerremarkOrgHandler;
94 import org.jclouds.vcloud.terremark.xml.TerremarkVDCHandler;
95 import org.jclouds.vcloud.xml.VCloudExpressCatalogHandler;
96 import org.jclouds.vcloud.xml.VCloudExpressVAppHandler;
97
98 import com.google.common.util.concurrent.ListenableFuture;
99
100
101
102
103
104
105
106
107 @RequestFilters(SetVCloudTokenCookie.class)
108 public interface TerremarkVCloudAsyncClient extends VCloudExpressAsyncClient {
109
110
111
112 @Override
113 @GET
114 @Consumes(CATALOGITEM_XML)
115 @XMLResponseParser(TerremarkCatalogItemHandler.class)
116 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
117 ListenableFuture<? extends TerremarkCatalogItem> findCatalogItemInOrgCatalogNamed(
118 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
119 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
120 @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
121
122
123
124
125 @Override
126 @GET
127 @Consumes(CATALOGITEM_XML)
128 @XMLResponseParser(TerremarkCatalogItemHandler.class)
129 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
130 ListenableFuture<? extends TerremarkCatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
131
132 @Override
133 @GET
134 @XMLResponseParser(TerremarkOrgHandler.class)
135 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
136 @Consumes(ORG_XML)
137 ListenableFuture<? extends TerremarkOrg> getOrg(@EndpointParam URI orgId);
138
139
140
141
142 @Override
143 @GET
144 @XMLResponseParser(TerremarkOrgHandler.class)
145 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
146 @Consumes(ORG_XML)
147 ListenableFuture<? extends TerremarkOrg> findOrgNamed(
148 @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
149
150
151
152
153 @GET
154 @Override
155 @XMLResponseParser(VCloudExpressCatalogHandler.class)
156 @Consumes(CATALOG_XML)
157 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
158 ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogId);
159
160
161
162
163 @Override
164 @GET
165 @XMLResponseParser(TerremarkVDCHandler.class)
166 @Consumes(VDC_XML)
167 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
168 ListenableFuture<? extends TerremarkVDC> getVDC(@EndpointParam URI vdc);
169
170
171
172
173 @GET
174 @Override
175 @XMLResponseParser(TerremarkVDCHandler.class)
176 @Consumes(VDC_XML)
177 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
178 ListenableFuture<? extends VDC> findVDCInOrgNamed(
179 @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
180 @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
181
182
183
184
185 @Override
186 @POST
187 @Path("/action/instantiateVAppTemplate")
188 @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
189 @Consumes(VAPP_XML)
190 @XMLResponseParser(VCloudExpressVAppHandler.class)
191 @MapBinder(TerremarkBindInstantiateVAppTemplateParamsToXmlPayload.class)
192 ListenableFuture<? extends VCloudExpressVApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
193 @PayloadParam("template") URI template,
194 @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
195 InstantiateVAppTemplateOptions... options);
196
197
198
199
200 @GET
201 @Consumes(INTERNETSERVICESLIST_XML)
202 @XMLResponseParser(InternetServicesHandler.class)
203 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
204 ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
205 @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
206
207
208
209
210 @POST
211 @Path("/internetServices")
212 @Produces(INTERNETSERVICE_XML)
213 @Consumes(INTERNETSERVICE_XML)
214 @XMLResponseParser(InternetServiceHandler.class)
215 @MapBinder(AddInternetServiceOptions.class)
216 ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI publicIpId,
217 @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
218 @PayloadParam("port") int port, AddInternetServiceOptions... options);
219
220
221
222
223 @DELETE
224 @ExceptionParser(ReturnVoidOnDeleteDefaultIp.class)
225 ListenableFuture<Void> deletePublicIp(@EndpointParam URI ipId);
226
227
228
229
230 @GET
231 @Path("/internetServices")
232 @Consumes(INTERNETSERVICESLIST_XML)
233 @XMLResponseParser(InternetServicesHandler.class)
234 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
235 ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
236
237
238
239
240 @GET
241 @Consumes(PUBLICIP_XML)
242 @XMLResponseParser(InternetServicesHandler.class)
243 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
244 ListenableFuture<? extends Set<InternetService>> getPublicIp(@EndpointParam URI ipId);
245
246
247
248
249 @GET
250 @Consumes(PUBLICIPSLIST_XML)
251 @XMLResponseParser(PublicIpAddressesHandler.class)
252 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
253 ListenableFuture<? extends Set<PublicIpAddress>> getPublicIpsAssociatedWithVDC(
254 @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
255
256
257
258
259 @DELETE
260 @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
261 ListenableFuture<Void> deleteInternetService(@EndpointParam URI internetServiceId);
262
263
264
265
266 @GET
267 @Consumes(INTERNETSERVICESLIST_XML)
268 @XMLResponseParser(InternetServiceHandler.class)
269 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
270 ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
271
272
273
274
275 @POST
276 @Path("/nodeServices")
277 @Produces(NODESERVICE_XML)
278 @Consumes(NODESERVICE_XML)
279 @XMLResponseParser(NodeHandler.class)
280 @MapBinder(AddNodeOptions.class)
281 ListenableFuture<? extends Node> addNode(@EndpointParam URI internetServiceId,
282 @PayloadParam("ipAddress") String ipAddress, @PayloadParam("name") String name,
283 @PayloadParam("port") int port, AddNodeOptions... options);
284
285
286
287
288 @GET
289 @Path("/nodeServices")
290 @XMLResponseParser(NodesHandler.class)
291 @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
292 @Consumes(NODESERVICE_XML)
293 ListenableFuture<? extends Set<Node>> getNodes(@EndpointParam URI internetServiceId);
294
295
296
297
298 @GET
299 @XMLResponseParser(NodeHandler.class)
300 @Consumes(NODESERVICE_XML)
301 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
302 ListenableFuture<? extends Node> getNode(@EndpointParam URI nodeId);
303
304
305
306
307 @PUT
308 @Produces(NODESERVICE_XML)
309 @Consumes(NODESERVICE_XML)
310 @XMLResponseParser(NodeHandler.class)
311 @MapBinder(BindNodeConfigurationToXmlPayload.class)
312 ListenableFuture<? extends Node> configureNode(@EndpointParam URI nodeId, @PayloadParam("name") String name,
313 @PayloadParam("enabled") boolean enabled, @Nullable @PayloadParam("description") String description);
314
315
316
317
318 @DELETE
319 @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
320 ListenableFuture<Void> deleteNode(@EndpointParam URI nodeId);
321
322
323
324
325 @PUT
326 @Produces(VAPP_XML)
327 @Consumes(VAPP_XML)
328 @MapBinder(BindVAppConfigurationToXmlPayload.class)
329 @ResponseParser(ParseTaskFromLocationHeader.class)
330 ListenableFuture<? extends Task> configureVApp(
331 @EndpointParam(parser = BindVAppConfigurationToXmlPayload.class) VCloudExpressVApp vApp,
332 VAppConfiguration configuration);
333
334
335
336
337 @GET
338 @XMLResponseParser(CustomizationParametersHandler.class)
339 @Consumes(CATALOGITEMCUSTOMIZATIONPARAMETERS_XML)
340 ListenableFuture<? extends CustomizationParameters> getCustomizationOptions(@EndpointParam URI customization);
341
342 }