View Javadoc

1   /**
2    * Licensed to jclouds, Inc. (jclouds) under one or more
3    * contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  jclouds licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  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,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.jclouds.trmk.ecloud;
20  
21  import static javax.ws.rs.core.MediaType.APPLICATION_XML;
22  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.INTERNETSERVICESLIST_XML;
23  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.INTERNETSERVICE_XML;
24  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.IPADDRESS_LIST_XML;
25  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.KEYSLIST_XML;
26  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.PUBLICIP_XML;
27  import static org.jclouds.trmk.ecloud.TerremarkECloudMediaType.VAPPEXTINFO_XML;
28  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.NETWORK_XML;
29  import static org.jclouds.trmk.vcloud_0_8.TerremarkVCloudMediaType.ORG_XML;
30  
31  import java.net.URI;
32  import java.util.Set;
33  
34  import org.jclouds.javax.annotation.Nullable;
35  import javax.ws.rs.Consumes;
36  import javax.ws.rs.DELETE;
37  import javax.ws.rs.GET;
38  import javax.ws.rs.POST;
39  import javax.ws.rs.Path;
40  import javax.ws.rs.Produces;
41  
42  import org.jclouds.rest.annotations.Delegate;
43  import org.jclouds.rest.annotations.EndpointParam;
44  import org.jclouds.rest.annotations.ExceptionParser;
45  import org.jclouds.rest.annotations.MapBinder;
46  import org.jclouds.rest.annotations.PayloadParam;
47  import org.jclouds.rest.annotations.RequestFilters;
48  import org.jclouds.rest.annotations.XMLResponseParser;
49  import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
50  import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
51  import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
52  import org.jclouds.trmk.ecloud.domain.ECloudOrg;
53  import org.jclouds.trmk.ecloud.features.DataCenterOperationsAsyncClient;
54  import org.jclouds.trmk.ecloud.features.TagOperationsAsyncClient;
55  import org.jclouds.trmk.ecloud.xml.ECloudOrgHandler;
56  import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
57  import org.jclouds.trmk.vcloud_0_8.binders.BindCreateKeyToXmlPayload;
58  import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
59  import org.jclouds.trmk.vcloud_0_8.domain.IpAddress;
60  import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
61  import org.jclouds.trmk.vcloud_0_8.domain.Network;
62  import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
63  import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
64  import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
65  import org.jclouds.trmk.vcloud_0_8.domain.VAppExtendedInfo;
66  import org.jclouds.trmk.vcloud_0_8.filters.SetVCloudTokenCookie;
67  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameToEndpoint;
68  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameNetworkNameToEndpoint;
69  import org.jclouds.trmk.vcloud_0_8.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
70  import org.jclouds.trmk.vcloud_0_8.functions.OrgURIToKeysListEndpoint;
71  import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToInternetServicesEndpoint;
72  import org.jclouds.trmk.vcloud_0_8.functions.VDCURIToPublicIPsEndpoint;
73  import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
74  import org.jclouds.trmk.vcloud_0_8.xml.InternetServiceHandler;
75  import org.jclouds.trmk.vcloud_0_8.xml.InternetServicesHandler;
76  import org.jclouds.trmk.vcloud_0_8.xml.IpAddressesHandler;
77  import org.jclouds.trmk.vcloud_0_8.xml.KeyPairByNameHandler;
78  import org.jclouds.trmk.vcloud_0_8.xml.KeyPairHandler;
79  import org.jclouds.trmk.vcloud_0_8.xml.KeyPairsHandler;
80  import org.jclouds.trmk.vcloud_0_8.xml.NetworkExtendedInfoHandler;
81  import org.jclouds.trmk.vcloud_0_8.xml.NetworkHandler;
82  import org.jclouds.trmk.vcloud_0_8.xml.PublicIpAddressHandler;
83  import org.jclouds.trmk.vcloud_0_8.xml.VAppExtendedInfoHandler;
84  
85  import com.google.common.util.concurrent.ListenableFuture;
86  
87  /**
88   * Provides access to eCloud resources via their REST API.
89   * <p/>
90   * 
91   * @see <a href=
92   *      "http://support.theenterprisecloud.com/kb/default.asp?id=645&Lang=1&SID="
93   *      />
94   * @author Adrian Cole
95   */
96  @RequestFilters(SetVCloudTokenCookie.class)
97  public interface TerremarkECloudAsyncClient extends TerremarkVCloudAsyncClient {
98     /**
99      * Provides asynchronous access to Data Center Operations.
100     * 
101     */
102    @Delegate
103    DataCenterOperationsAsyncClient getDataCenterOperationsClient();
104 
105    /**
106     * Provides asynchronous access to Tag Operations.
107     * 
108     */
109    @Delegate
110    TagOperationsAsyncClient getTagOperationsClient();
111 
112    @Override
113    @GET
114    @XMLResponseParser(ECloudOrgHandler.class)
115    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
116    @Consumes(ORG_XML)
117    ListenableFuture<? extends ECloudOrg> getOrg(@EndpointParam URI orgId);
118 
119    @Override
120    @GET
121    @XMLResponseParser(ECloudOrgHandler.class)
122    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
123    @Consumes(ORG_XML)
124    ListenableFuture<? extends ECloudOrg> findOrgNamed(
125          @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName);
126 
127    /**
128     * @see TerremarkVCloudExpressClient#getAllInternetServices
129     */
130    @GET
131    @Consumes(INTERNETSERVICESLIST_XML)
132    @XMLResponseParser(InternetServicesHandler.class)
133    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
134    @Override
135    ListenableFuture<? extends Set<InternetService>> getAllInternetServicesInVDC(
136          @EndpointParam(parser = VDCURIToInternetServicesEndpoint.class) URI vDCId);
137 
138    /**
139     * @see TerremarkVCloudExpressClient#activatePublicIpInVDC
140     */
141    @POST
142    @Consumes(PUBLICIP_XML)
143    @XMLResponseParser(PublicIpAddressHandler.class)
144    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
145    ListenableFuture<PublicIpAddress> activatePublicIpInVDC(
146          @EndpointParam(parser = VDCURIToPublicIPsEndpoint.class) URI vDCId);
147 
148    /**
149     * @see TerremarkVCloudExpressClient#addInternetServiceToExistingIp
150     */
151    @POST
152    @Path("/internetServices")
153    @Produces(INTERNETSERVICE_XML)
154    @Consumes(INTERNETSERVICE_XML)
155    @XMLResponseParser(InternetServiceHandler.class)
156    @MapBinder(AddInternetServiceOptions.class)
157    @Override
158    ListenableFuture<? extends InternetService> addInternetServiceToExistingIp(@EndpointParam URI existingIpId,
159          @PayloadParam("name") String serviceName, @PayloadParam("protocol") Protocol protocol,
160          @PayloadParam("port") int port, AddInternetServiceOptions... options);
161 
162    /**
163     * @see TerremarkVCloudExpressClient#getInternetServicesOnPublicIP
164     */
165    @GET
166    @Path("/internetServices")
167    @Consumes(INTERNETSERVICESLIST_XML)
168    @XMLResponseParser(InternetServicesHandler.class)
169    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
170    @Override
171    ListenableFuture<? extends Set<InternetService>> getInternetServicesOnPublicIp(@EndpointParam URI ipId);
172 
173    /**
174     * @see TerremarkVCloudExpressClient#getInternetService
175     */
176    @GET
177    @Consumes(INTERNETSERVICESLIST_XML)
178    @XMLResponseParser(InternetServiceHandler.class)
179    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
180    @Override
181    ListenableFuture<? extends InternetService> getInternetService(@EndpointParam URI internetServiceId);
182 
183    /**
184     * @see TerremarkVCloudExpressClient#findKeyPairInOrgNamed
185     */
186    @GET
187    @XMLResponseParser(KeyPairByNameHandler.class)
188    @Consumes(KEYSLIST_XML)
189    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
190    ListenableFuture<? extends KeyPair> findKeyPairInOrg(
191          @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, String keyName);
192 
193    /**
194     * @see TerremarkVCloudExpressClient#listKeyPairsInOrg
195     */
196    @GET
197    @Consumes(KEYSLIST_XML)
198    @XMLResponseParser(KeyPairsHandler.class)
199    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
200    ListenableFuture<? extends Set<KeyPair>> listKeyPairsInOrg(
201          @Nullable @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org);
202 
203    /**
204     * @see TerremarkECloudClient#listKeyPairs
205     */
206    @GET
207    @Consumes(KEYSLIST_XML)
208    @XMLResponseParser(KeyPairsHandler.class)
209    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
210    ListenableFuture<? extends Set<KeyPair>> listKeyPairs(@EndpointParam URI keysList);
211 
212    /**
213     * @see TerremarkECloudClient#generateKeyPairInOrg
214     */
215    @POST
216    @Produces(KEYSLIST_XML)
217    @Consumes(KEYSLIST_XML)
218    @XMLResponseParser(KeyPairHandler.class)
219    @MapBinder(BindCreateKeyToXmlPayload.class)
220    ListenableFuture<? extends KeyPair> generateKeyPairInOrg(
221          @EndpointParam(parser = OrgURIToKeysListEndpoint.class) URI org, @PayloadParam("name") String name,
222          @PayloadParam("isDefault") boolean makeDefault);
223 
224    /**
225     * @see TerremarkECloudClient#getKeyPair
226     */
227    @GET
228    @XMLResponseParser(KeyPairHandler.class)
229    @Consumes(APPLICATION_XML)
230    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
231    ListenableFuture<? extends KeyPair> getKeyPair(@EndpointParam URI keyId);
232 
233    // TODO
234    // /**
235    // * @see TerremarkVCloudClient#configureKeyPair
236    // */
237    // @PUT
238    // @Endpoint(org.jclouds.vcloud.endpoints.VCloudApi.class)
239    // @Path("/extensions/key/{keyId}")
240    // @Produces(APPLICATION_XML)
241    // @Consumes(APPLICATION_XML)
242    // @XMLResponseParser(KeyPairHandler.class)
243    // ListenableFuture<? extends KeyPair> configureKeyPair(
244    // @PathParam("keyId") int keyId,
245    // @BinderParam(BindKeyPairConfigurationToXmlPayload.class)
246    // KeyPairConfiguration keyConfiguration);
247 
248    /**
249     * @see TerremarkECloudClient#deleteKeyPair
250     */
251    @DELETE
252    @ExceptionParser(ReturnVoidOnNotFoundOr404.class)
253    ListenableFuture<Void> deleteKeyPair(@EndpointParam URI keyId);
254 
255    /**
256     * @see TerremarkECloudClient#findNetworkInOrgVDCNamed
257     */
258    @Override
259    @GET
260    @Consumes(NETWORK_XML)
261    @XMLResponseParser(NetworkHandler.class)
262    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
263    ListenableFuture<? extends Network> findNetworkInOrgVDCNamed(
264          @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String orgName,
265          @Nullable @EndpointParam(parser = OrgNameVDCNameNetworkNameToEndpoint.class) String catalogName,
266          @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName);
267 
268    /**
269     * @see TerremarkECloudClient#getNetwork
270     */
271    @Override
272    @GET
273    @Consumes(NETWORK_XML)
274    @XMLResponseParser(NetworkHandler.class)
275    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
276    ListenableFuture<? extends Network> getNetwork(@EndpointParam URI network);
277 
278    /**
279     * @see TerremarkECloudClient#getNetworkExtendedInfo
280     */
281    @GET
282    @XMLResponseParser(NetworkExtendedInfoHandler.class)
283    @Consumes(APPLICATION_XML)
284    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
285    ListenableFuture<? extends NetworkExtendedInfo> getNetworkExtendedInfo(@EndpointParam URI network);
286 
287    /**
288     * @see TerremarkECloudClient#getIpAddresses
289     */
290    @GET
291    @Consumes(IPADDRESS_LIST_XML)
292    @XMLResponseParser(IpAddressesHandler.class)
293    @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
294    ListenableFuture<? extends Set<IpAddress>> getIpAddresses(@EndpointParam URI network);
295 
296    /**
297     * @see TerremarkVCloudExpressClient#getInternetService
298     */
299    @GET
300    @Consumes(VAPPEXTINFO_XML)
301    @XMLResponseParser(VAppExtendedInfoHandler.class)
302    @ExceptionParser(ReturnNullOnNotFoundOr404.class)
303    ListenableFuture<? extends VAppExtendedInfo> getVAppExtendedInfo(@EndpointParam URI href);
304 
305 }