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.terremark;
20  
21  import static javax.ws.rs.core.MediaType.APPLICATION_XML;
22  import static org.jclouds.vcloud.VCloudMediaType.NETWORK_XML;
23  import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICESLIST_XML;
24  import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.INTERNETSERVICE_XML;
25  import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.IPADDRESS_LIST_XML;
26  import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.KEYSLIST_XML;
27  import static org.jclouds.vcloud.terremark.TerremarkECloudMediaType.PUBLICIP_XML;
28  
29  import java.net.URI;
30  import java.util.Set;
31  
32  import javax.annotation.Nullable;
33  import javax.ws.rs.Consumes;
34  import javax.ws.rs.DELETE;
35  import javax.ws.rs.GET;
36  import javax.ws.rs.POST;
37  import javax.ws.rs.Path;
38  import javax.ws.rs.Produces;
39  
40  import org.jclouds.rest.annotations.EndpointParam;
41  import org.jclouds.rest.annotations.ExceptionParser;
42  import org.jclouds.rest.annotations.MapBinder;
43  import org.jclouds.rest.annotations.PayloadParam;
44  import org.jclouds.rest.annotations.RequestFilters;
45  import org.jclouds.rest.annotations.XMLResponseParser;
46  import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
47  import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
48  import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
49  import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
50  import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
51  import org.jclouds.vcloud.terremark.binders.BindCreateKeyToXmlPayload;
52  import org.jclouds.vcloud.terremark.domain.InternetService;
53  import org.jclouds.vcloud.terremark.domain.IpAddress;
54  import org.jclouds.vcloud.terremark.domain.KeyPair;
55  import org.jclouds.vcloud.terremark.domain.Protocol;
56  import org.jclouds.vcloud.terremark.domain.PublicIpAddress;
57  import org.jclouds.vcloud.terremark.domain.TerremarkNetwork;
58  import org.jclouds.vcloud.terremark.domain.TerremarkOrgNetwork;
59  import org.jclouds.vcloud.terremark.functions.OrgURIToKeysListEndpoint;
60  import org.jclouds.vcloud.terremark.functions.VDCURIToInternetServicesEndpoint;
61  import org.jclouds.vcloud.terremark.functions.VDCURIToPublicIPsEndpoint;
62  import org.jclouds.vcloud.terremark.options.AddInternetServiceOptions;
63  import org.jclouds.vcloud.terremark.xml.InternetServiceHandler;
64  import org.jclouds.vcloud.terremark.xml.InternetServicesHandler;
65  import org.jclouds.vcloud.terremark.xml.IpAddressesHandler;
66  import org.jclouds.vcloud.terremark.xml.KeyPairByNameHandler;
67  import org.jclouds.vcloud.terremark.xml.KeyPairHandler;
68  import org.jclouds.vcloud.terremark.xml.KeyPairsHandler;
69  import org.jclouds.vcloud.terremark.xml.PublicIpAddressesHandler;
70  import org.jclouds.vcloud.terremark.xml.TerremarkNetworkHandler;
71  import org.jclouds.vcloud.terremark.xml.TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler;
72  
73  import com.google.common.util.concurrent.ListenableFuture;
74  
75  /**
76   * Provides access to eCloud resources via their REST API.
77   * <p/>
78   * 
79   * @see <a href= "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID=" />
80   * @author Adrian Cole
81   */
82  @RequestFilters(SetVCloudTokenCookie.class)
83  public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
84  
85     /**
86      * @see TerremarkVCloudExpressClient#getAllInternetServices
87      */
88     @GET
89     @Consumes(INTERNETSERVICESLIST_XML)
90     @XMLResponseParser(InternetServicesHandler.class)
91     @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
92     @Override
93     ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
94              @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
95  
96     /**
97      * @see TerremarkVCloudExpressClient#activatePublicIpInVDC
98      */
99     @POST
100    @Consumes(PUBLICIP_XML)
101    @XMLResponseParser(PublicIpAddressesHandler.class)
102    @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
103    ListenableFuture<PublicIpAddress> activatePublicIpInVDC(
104             @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
105 
106    /**
107     * @see TerremarkVCloudExpressClient#addInternetServiceToExistingIp
108     */
109    @POST
110    @Path("/internetServices")
111    @Produces(INTERNETSERVICE_XML)
112    @Consumes(INTERNETSERVICE_XML)
113    @XMLResponseParser(InternetServiceHandler.class)
114    @MapBinder(AddInternetServiceOptions.class)
115    @Override
116    ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI existingIpId,
117             @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
118             @PayloadParam("port") int port, AddInternetServiceOptions... options);
119 
120    /**
121     * @see TerremarkVCloudExpressClient#getInternetServicesOnPublicIP
122     */
123    @GET
124    @Path("/internetServices")
125    @Consumes(INTERNETSERVICESLIST_XML)
126    @XMLResponseParser(InternetServicesHandler.class)
127    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
128    @Override
129    ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
130 
131    /**
132     * @see TerremarkVCloudExpressClient#getInternetService
133     */
134    @GET
135    @Consumes(INTERNETSERVICESLIST_XML)
136    @XMLResponseParser(InternetServiceHandler.class)
137    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
138    @Override
139    ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
140 
141    /**
142     * @see TerremarkVCloudExpressClient#findKeyPairInOrgNamed
143     */
144    @GET
145    @XMLResponseParser(KeyPairByNameHandler.class)
146    @Consumes(KEYSLIST_XML)
147    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
148    ListenableFuture<? extends KeyPair> findKeyPairInOrg(
149             @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, String keyName);
150 
151    /**
152     * @see TerremarkVCloudExpressClient#listKeyPairsInOrgNamed
153     */
154    @GET
155    @Consumes(KEYSLIST_XML)
156    @XMLResponseParser(KeyPairsHandler.class)
157    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
158    ListenableFuture<? extends Set<KeyPair>> listKeyPairsInOrg(
159             @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org);
160 
161    /**
162     * @see TerremarkECloudClient#listKeyPairs
163     */
164    @GET
165    @Consumes(KEYSLIST_XML)
166    @XMLResponseParser(KeyPairsHandler.class)
167    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
168    ListenableFuture<? extends Set<KeyPair>> listKeyPairs(@EndpointParam URI keysList);
169 
170    /**
171     * @see TerremarkECloudClient#generateKeyPairInOrg
172     */
173    @POST
174    @Produces(KEYSLIST_XML)
175    @Consumes(KEYSLIST_XML)
176    @XMLResponseParser(KeyPairHandler.class)
177    @MapBinder(BindCreateKeyToXmlPayload.class)
178    ListenableFuture<? extends KeyPair> generateKeyPairInOrg(
179             @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, @PayloadParam("name") String name,
180             @PayloadParam("isDefault") boolean makeDefault);
181 
182    /**
183     * @see TerremarkECloudClient#getKeyPair
184     */
185    @GET
186    @XMLResponseParser(KeyPairHandler.class)
187    @Consumes(APPLICATION_XML)
188    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
189    ListenableFuture<? extends KeyPair> getKeyPair(@EndpointParam URI keyId);
190 
191    // TODO
192    // /**
193    // * @see TerremarkVCloudClient#configureKeyPair
194    // */
195    // @PUT
196    // @Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
197    // @Path("/extensions/key/{keyId}")
198    // @Produces(APPLICATION_XML)
199    // @Consumes(APPLICATION_XML)
200    // @XMLResponseParser(KeyPairHandler.class)
201    // ListenableFuture<? extends KeyPair> configureKeyPair(
202    // @PathParam("keyId") int keyId,
203    // @BinderParam(BindKeyPairConfigurationToXmlPayload.class)
204    // KeyPairConfiguration keyConfiguration);
205 
206    /**
207     * @see TerremarkECloudClient#deleteKeyPair
208     */
209    @DELETE
210    @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
211    ListenableFuture<Void> deleteKeyPair(@EndpointParam URI keyId);
212 
213    /**
214     * @see TerremarkECloudClient#findNetworkInOrgVDCNamed
215     */
216    @Override
217    @GET
218    @Consumes(NETWORK_XML)
219    @XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class)
220    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
221    ListenableFuture<? extends TerremarkOrgNetwork> findNetworkInOrgVDCNamed(
222             @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName,
223             @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName,
224             @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
225 
226    /**
227     * @see TerremarkECloudClient#getNetwork
228     */
229    @Override
230    @GET
231    @Consumes(NETWORK_XML)
232    @XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class)
233    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
234    ListenableFuture<? extends TerremarkOrgNetwork> getNetwork(@EndpointParam URI network);
235 
236    /**
237     * @see TerremarkECloudClient#getTerremarkNetwork
238     */
239    @GET
240    @XMLResponseParser(TerremarkNetworkHandler.class)
241    @Consumes(APPLICATION_XML)
242    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
243    ListenableFuture<? extends TerremarkNetwork> getTerremarkNetwork(@EndpointParam URI network);
244    
245    /**
246     * @see TerremarkECloudClient#getIpAddresses
247     */
248    @GET
249    @Consumes(IPADDRESS_LIST_XML)
250    @XMLResponseParser(IpAddressesHandler.class)
251    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
252    ListenableFuture<? extends Set<IpAddress>> getIpAddresses(@EndpointParam URI network);
253 }