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.CATALOGITEM_XML;
22  import static org.jclouds.vcloud.VCloudMediaType.CATALOG_XML;
23  import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
24  import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
25  import static org.jclouds.vcloud.VCloudMediaType.TASKSLIST_XML;
26  import static org.jclouds.vcloud.VCloudMediaType.TASK_XML;
27  import static org.jclouds.vcloud.VCloudMediaType.VDC_XML;
28  
29  import java.net.URI;
30  
31  import javax.annotation.Nullable;
32  import javax.ws.rs.Consumes;
33  import javax.ws.rs.GET;
34  import javax.ws.rs.POST;
35  import javax.ws.rs.Path;
36  
37  import org.jclouds.rest.annotations.EndpointParam;
38  import org.jclouds.rest.annotations.ExceptionParser;
39  import org.jclouds.rest.annotations.RequestFilters;
40  import org.jclouds.rest.annotations.XMLResponseParser;
41  import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
42  import org.jclouds.vcloud.domain.Catalog;
43  import org.jclouds.vcloud.domain.CatalogItem;
44  import org.jclouds.vcloud.domain.Org;
45  import org.jclouds.vcloud.domain.Task;
46  import org.jclouds.vcloud.domain.TasksList;
47  import org.jclouds.vcloud.domain.VDC;
48  import org.jclouds.vcloud.domain.network.OrgNetwork;
49  import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
50  import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint;
51  import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint;
52  import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint;
53  import org.jclouds.vcloud.functions.OrgNameToEndpoint;
54  import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint;
55  import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
56  import org.jclouds.vcloud.xml.CatalogHandler;
57  import org.jclouds.vcloud.xml.CatalogItemHandler;
58  import org.jclouds.vcloud.xml.OrgHandler;
59  import org.jclouds.vcloud.xml.OrgNetworkHandler;
60  import org.jclouds.vcloud.xml.TaskHandler;
61  import org.jclouds.vcloud.xml.TasksListHandler;
62  import org.jclouds.vcloud.xml.VDCHandler;
63  
64  import com.google.common.util.concurrent.ListenableFuture;
65  
66  /**
67   * Provides access to VCloud resources via their REST API.
68   * <p/>
69   * 
70   * @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
71   * @author Adrian Cole
72   */
73  @RequestFilters(SetVCloudTokenCookie.class)
74  public interface CommonVCloudAsyncClient {
75  
76     /**
77      * @see CommonVCloudClient#getOrg
78      */
79     @GET
80     @XMLResponseParser(OrgHandler.class)
81     @ExceptionParser(ReturnNullOnNotFoundOr404.class)
82     @Consumes(ORG_XML)
83     ListenableFuture<? extends Org> getOrg(@EndpointParam URI orgId);
84  
85     /**
86      * @see CommonVCloudClient#getOrgNamed
87      */
88     @GET
89     @XMLResponseParser(OrgHandler.class)
90     @ExceptionParser(ReturnNullOnNotFoundOr404.class)
91     @Consumes(ORG_XML)
92     ListenableFuture<? extends Org> findOrgNamed(
93              @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
94  
95     /**
96      * @see CommonVCloudClient#getCatalog
97      */
98     @GET
99     @XMLResponseParser(CatalogHandler.class)
100    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
101    @Consumes(CATALOG_XML)
102    ListenableFuture<? extends Catalog> getCatalog(@EndpointParam URI catalogId);
103 
104    /**
105     * @see CommonVCloudClient#findCatalogInOrgNamed
106     */
107    @GET
108    @XMLResponseParser(CatalogHandler.class)
109    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
110    @Consumes(CATALOG_XML)
111    ListenableFuture<? extends Catalog> findCatalogInOrgNamed(
112             @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName,
113             @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName);
114 
115    /**
116     * @see CommonVCloudClient#getCatalogItem
117     */
118    @GET
119    @Consumes(CATALOGITEM_XML)
120    @XMLResponseParser(CatalogItemHandler.class)
121    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
122    ListenableFuture<? extends CatalogItem> getCatalogItem(@EndpointParam URI catalogItem);
123 
124    /**
125     * @see CommonVCloudClient#getCatalogItemInOrg
126     */
127    @GET
128    @Consumes(CATALOGITEM_XML)
129    @XMLResponseParser(CatalogItemHandler.class)
130    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
131    ListenableFuture<? extends CatalogItem> findCatalogItemInOrgCatalogNamed(
132             @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName,
133             @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName,
134             @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName);
135 
136    /**
137     * @see CommonVCloudClient#findNetworkInOrgVDCNamed
138     */
139    @GET
140    @Consumes(NETWORK_XML)
141    @XMLResponseParser(OrgNetworkHandler.class)
142    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
143    ListenableFuture<? extends OrgNetwork> findNetworkInOrgVDCNamed(
144             @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
145             @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
146             @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
147 
148    /**
149     * @see CommonVCloudClient#getNetwork
150     */
151    @GET
152    @Consumes(NETWORK_XML)
153    @XMLResponseParser(OrgNetworkHandler.class)
154    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
155    ListenableFuture<? extends OrgNetwork> getNetwork(@EndpointParam URI network);
156 
157    /**
158     * @see CommonVCloudClient#getVDC(URI)
159     */
160    @GET
161    @XMLResponseParser(VDCHandler.class)
162    @Consumes(VDC_XML)
163    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
164    ListenableFuture<? extends VDC> getVDC(@EndpointParam URI vdc);
165 
166    /**
167     * @see CommonVCloudClient#findVDCInOrgNamed(String, String)
168     */
169    @GET
170    @XMLResponseParser(VDCHandler.class)
171    @Consumes(VDC_XML)
172    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
173    ListenableFuture<? extends VDC> findVDCInOrgNamed(
174             @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName,
175             @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName);
176 
177    /**
178     * @see CommonVCloudClient#getTasksList
179     */
180    @GET
181    @Consumes(TASKSLIST_XML)
182    @XMLResponseParser(TasksListHandler.class)
183    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
184    ListenableFuture<? extends TasksList> getTasksList(@EndpointParam URI tasksListId);
185 
186    /**
187     * @see CommonVCloudClient#findTasksListInOrgNamed
188     */
189    @GET
190    @Consumes(TASKSLIST_XML)
191    @XMLResponseParser(TasksListHandler.class)
192    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
193    ListenableFuture<? extends TasksList> findTasksListInOrgNamed(
194             @Nullable @EndpointParam(parser = OrgNameToTasksListEndpoint.class) String orgName);
195 
196    /**
197     * @see CommonVCloudClient#getTask
198     */
199    @GET
200    @Consumes(TASK_XML)
201    @XMLResponseParser(TaskHandler.class)
202    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
203    ListenableFuture<? extends Task> getTask(@EndpointParam URI taskId);
204 
205    /**
206     * @see CommonVCloudClient#cancelTask
207     */
208    @POST
209    @Path("/action/cancel")
210    ListenableFuture<Void> cancelTask(@EndpointParam URI taskId);
211 
212 }