View Javadoc

1   /**
2    *
3    * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
4    *
5    * ====================================================================
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * 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, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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   * Provides access to VCloud resources via their REST API.
71   * <p/>
72   * 
73   * @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
74   * @author Adrian Cole
75   */
76  @RequestFilters(SetVCloudTokenCookie.class)
77  public interface VCloudExpressAsyncClient extends CommonVCloudAsyncClient {
78  
79     /**
80      * @see CommonVCloudClient#getCatalog
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      * @see CommonVCloudClient#findCatalogInOrgNamed
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     * @see VCloudClient#getVAppTemplate
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     * @see VCloudClient#findVAppTemplateInOrgCatalogNamed
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     * @see VCloudClient#findNetworkInOrgVDCNamed
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     * @see VCloudClient#getNetwork
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     * @see VCloudExpressClient#instantiateVAppTemplateInVDC
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     * @see VCloudExpressClient#cloneVAppInVDC
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     * @see VCloudClient#findVAppInOrgVDCNamed
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     * @see VCloudClient#getVApp
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     * @see VCloudExpressClient#deployVApp
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     * @see VCloudExpressClient#undeployVApp
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     * @see VCloudExpressClient#powerOnVApp
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     * @see VCloudExpressClient#powerOffVApp
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     * @see VCloudExpressClient#shutdownVApp
230     */
231    @POST
232    @Path("/power/action/shutdown")
233    ListenableFuture<Void> shutdownVApp(@EndpointParam URI vAppId);
234 
235    /**
236     * @see VCloudExpressClient#resetVApp
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     * @see VCloudExpressClient#suspendVApp
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     * @see VCloudExpressClient#deleteVApp
255     */
256    @DELETE
257    @ResponseParser(ParseTaskFromLocationHeader.class)
258    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
259    ListenableFuture<Task> deleteVApp(@EndpointParam URI vAppId);
260 }