1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.vcloud;
20
21 import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
22 import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
23 import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
24 import static org.jclouds.vcloud.VCloudMediaType.VAPPTEMPLATE_XML;
25 import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
26
27 import java.net.URI;
28
29 import javax.annotation.Nullable;
30 import javax.ws.rs.Consumes;
31 import javax.ws.rs.DELETE;
32 import javax.ws.rs.GET;
33 import javax.ws.rs.POST;
34 import javax.ws.rs.Path;
35 import javax.ws.rs.Produces;
36
37 import org.jclouds.predicates.validators.DnsNameValidator;
38 import org.jclouds.rest.annotations.EndpointParam;
39 import org.jclouds.rest.annotations.ExceptionParser;
40 import org.jclouds.rest.annotations.MapBinder;
41 import org.jclouds.rest.annotations.ParamValidators;
42 import org.jclouds.rest.annotations.PayloadParam;
43 import org.jclouds.rest.annotations.RequestFilters;
44 import org.jclouds.rest.annotations.ResponseParser;
45 import org.jclouds.rest.annotations.XMLResponseParser;
46 import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
47 import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
48 import org.jclouds.vcloud.binders.BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload;
49 import org.jclouds.vcloud.domain.Catalog;
50 import org.jclouds.vcloud.domain.Task;
51 import org.jclouds.vcloud.domain.VCloudExpressVApp;
52 import org.jclouds.vcloud.domain.VCloudExpressVAppTemplate;
53 import org.jclouds.vcloud.domain.network.OrgNetwork;
54 import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
55 import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
56 import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
57 import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
58 import org.jclouds.vcloud.functions.ParseTaskFromLocationHeader;
59 import org.jclouds.vcloud.options.CloneVAppOptions;
60 import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
61 import org.jclouds.vcloud.xml.OrgNetworkFromVCloudExpressNetworkHandler;
62 import org.jclouds.vcloud.xml.TaskHandler;
63 import org.jclouds.vcloud.xml.VCloudExpressCatalogHandler;
64 import org.jclouds.vcloud.xml.VCloudExpressVAppHandler;
65 import org.jclouds.vcloud.xml.VCloudExpressVAppTemplateHandler;
66
67 import com.google.common.util.concurrent.ListenableFuture;
68
69
70
71
72
73
74
75
76 @RequestFilters(SetVCloudTokenCookie.class)
77 public interface VCloudExpressAsyncClient extends CommonVCloudAsyncClient {
78
79
80
81
82 @Override
83 @GET
84 @XMLResponseParser(VCloudExpressCatalogHandler.class)
85 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
86 @Consumes(CATALOG_XML)
87 ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogId);
88
89
90
91
92 @GET
93 @XMLResponseParser(VCloudExpressCatalogHandler.class)
94 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
95 @Consumes(CATALOG_XML)
96 ListenableFuture<? extends Catalog> findCatalogInOrgNamed(
97 @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
98 @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
99
100
101
102
103 @GET
104 @Consumes(VAPPTEMPLATE_XML)
105 @XMLResponseParser(VCloudExpressVAppTemplateHandler.class)
106 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
107 ListenableFuture<? extends VCloudExpressVAppTemplate> getVAppTemplate(@EndpointParam URI vAppTemplate);
108
109
110
111
112 @GET
113 @Consumes(VAPPTEMPLATE_XML)
114 @XMLResponseParser(VCloudExpressVAppTemplateHandler.class)
115 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
116 ListenableFuture<? extends VCloudExpressVAppTemplate> findVAppTemplateInOrgCatalogNamed(
117 @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName,
118 @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName,
119 @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName);
120
121
122
123
124 @Override
125 @GET
126 @Consumes(NETWORK_XML)
127 @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
128 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
129 ListenableFuture<? extends OrgNetwork> findNetworkInOrgVDCNamed(
130 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
131 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
132 @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
133
134
135
136
137 @Override
138 @GET
139 @Consumes(NETWORK_XML)
140 @XMLResponseParser(OrgNetworkFromVCloudExpressNetworkHandler.class)
141 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
142 ListenableFuture<? extends OrgNetwork> getNetwork(@EndpointParam URI network);
143
144
145
146
147 @POST
148 @Path("/action/instantiateVAppTemplate")
149 @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml")
150 @Consumes(VAPP_XML)
151 @XMLResponseParser(VCloudExpressVAppHandler.class)
152 @MapBinder(BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload.class)
153 ListenableFuture<? extends VCloudExpressVApp> instantiateVAppTemplateInVDC(@EndpointParam URI vdc,
154 @PayloadParam("template") URI template,
155 @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName,
156 InstantiateVAppTemplateOptions... options);
157
158
159
160
161 @POST
162 @Path("/action/cloneVApp")
163 @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml")
164 @Consumes(TASK_XML)
165 @XMLResponseParser(TaskHandler.class)
166 @MapBinder(BindCloneVAppParamsToXmlPayload.class)
167 ListenableFuture<? extends Task> cloneVAppInVDC(@EndpointParam URI vdc, @PayloadParam("vApp") URI toClone,
168 @PayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName,
169 CloneVAppOptions... options);
170
171
172
173
174 @GET
175 @Consumes(VAPP_XML)
176 @XMLResponseParser(VCloudExpressVAppHandler.class)
177 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
178 ListenableFuture<? extends VCloudExpressVApp> findVAppInOrgVDCNamed(
179 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
180 @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
181 @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName);
182
183
184
185
186 @GET
187 @Consumes(VAPP_XML)
188 @XMLResponseParser(VCloudExpressVAppHandler.class)
189 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
190 ListenableFuture<? extends VCloudExpressVApp> getVApp(@EndpointParam URI vApp);
191
192
193
194
195 @POST
196 @Consumes(TASK_XML)
197 @Path("/action/deploy")
198 @XMLResponseParser(TaskHandler.class)
199 ListenableFuture<? extends Task> deployVApp(@EndpointParam URI vAppId);
200
201
202
203
204 @POST
205 @Consumes(TASK_XML)
206 @Path("/action/undeploy")
207 @XMLResponseParser(TaskHandler.class)
208 ListenableFuture<? extends Task> undeployVApp(@EndpointParam URI vAppId);
209
210
211
212
213 @POST
214 @Consumes(TASK_XML)
215 @Path("/power/action/powerOn")
216 @XMLResponseParser(TaskHandler.class)
217 ListenableFuture<? extends Task> powerOnVApp(@EndpointParam URI vAppId);
218
219
220
221
222 @POST
223 @Consumes(TASK_XML)
224 @Path("/power/action/powerOff")
225 @XMLResponseParser(TaskHandler.class)
226 ListenableFuture<? extends Task> powerOffVApp(@EndpointParam URI vAppId);
227
228
229
230
231 @POST
232 @Path("/power/action/shutdown")
233 ListenableFuture<Void> shutdownVApp(@EndpointParam URI vAppId);
234
235
236
237
238 @POST
239 @Consumes(TASK_XML)
240 @Path("/power/action/reset")
241 @XMLResponseParser(TaskHandler.class)
242 ListenableFuture<? extends Task> resetVApp(@EndpointParam URI vAppId);
243
244
245
246
247 @POST
248 @Consumes(TASK_XML)
249 @Path("/power/action/suspend")
250 @XMLResponseParser(TaskHandler.class)
251 ListenableFuture<? extends Task> suspendVApp(@EndpointParam URI vAppId);
252
253
254
255
256 @DELETE
257 @ResponseParser(ParseTaskFromLocationHeader.class)
258 @ExceptionParser(ReturnNullOnNotFoundOr404.class)
259 ListenableFuture<Task> deleteVApp(@EndpointParam URI vAppId);
260 }