/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jclouds.ibm.smartcloud; import java.util.Date; import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.MediaType; import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.ibm.smartcloud.domain.Address; import org.jclouds.ibm.smartcloud.domain.Image; import org.jclouds.ibm.smartcloud.domain.Instance; import org.jclouds.ibm.smartcloud.domain.Key; import org.jclouds.ibm.smartcloud.domain.Location; import org.jclouds.ibm.smartcloud.domain.Offering; import org.jclouds.ibm.smartcloud.domain.StorageOffering; import org.jclouds.ibm.smartcloud.domain.Volume; import org.jclouds.ibm.smartcloud.functions.ParseLongFromDate; import org.jclouds.ibm.smartcloud.options.CreateInstanceOptions; import org.jclouds.ibm.smartcloud.options.RestartInstanceOptions; import org.jclouds.ibm.smartcloud.xml.LocationHandler; import org.jclouds.ibm.smartcloud.xml.LocationsHandler; import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.FormParams; import org.jclouds.rest.annotations.ParamParser; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.SkipEncoding; import org.jclouds.rest.annotations.Unwrap; import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404; import com.google.common.util.concurrent.ListenableFuture; /** * Provides asynchronous access to IBMSmartCloud via their REST API. * <p/> * * @see IBMSmartCloudClient * @see <a href="http://www-180.ibm.com/cloud/enterprise/beta/support" /> * @author Adrian Cole */ @RequestFilters(BasicAuthentication.class) @SkipEncoding( { '{', '}' }) public interface IBMSmartCloudAsyncClient { public static final String VERSION = "20100331"; /** * @see IBMSmartCloudClient#listImages() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/image") @Consumes(MediaType.APPLICATION_JSON) @Unwrap @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Image>> listImages(); /** * @see IBMSmartCloudClient#getImage(long) */ @GET @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/image/{imageId}") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Image> getImage(@PathParam("imageId") String id); /** * @see IBMSmartCloudClient#getManifestOfImage */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/image/{imageId}/manifest") @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Consumes(MediaType.TEXT_XML) ListenableFuture<String> getManifestOfImage(@PathParam("imageId") String id); /** * @see IBMSmartCloudClient#deleteImage */ @DELETE @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/image/{imageId}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) ListenableFuture<Void> deleteImage(@PathParam("imageId") String id); /** * @see IBMSmartCloudClient#setImageVisibility(long, Image.Visibility) */ @PUT @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/image/{imageId}") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Image> setImageVisibility(@PathParam("imageId") String id, @FormParam("visibility") Image.Visibility visibility); /** * @see IBMSmartCloudClient#listInstancesFromRequest(long) */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/requests/{requestId}") @Unwrap @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Set<? extends Instance>> listInstancesFromRequest(@PathParam("requestId") String requestId); /** * @see IBMSmartCloudClient#listInstances() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/instances") @Consumes(MediaType.APPLICATION_JSON) @Unwrap @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Instance>> listInstances(); /** * @see IBMSmartCloudClient#getInstance(long) */ @GET @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/instances/{instanceId}") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Instance> getInstance(@PathParam("instanceId") String id); /** * * @see IBMSmartCloudClient#extendReservationForInstance(long,Date) */ @PUT @Path(IBMSmartCloudAsyncClient.VERSION + "/instances/{instanceId}") @Consumes(MediaType.APPLICATION_JSON) @Unwrap ListenableFuture<Date> extendReservationForInstance(@PathParam("instanceId") String id, @FormParam("expirationTime") @ParamParser(ParseLongFromDate.class) Date expirationTime); /** * @see IBMSmartCloudClient#restartInstance */ @PUT @Path(IBMSmartCloudAsyncClient.VERSION + "/instances/{instanceId}") @FormParams(keys = "state", values = "restart") ListenableFuture<Void> restartInstance(@PathParam("instanceId") String id, RestartInstanceOptions... options); /** * @see IBMSmartCloudClient#saveInstanceToImage */ @PUT @Path(IBMSmartCloudAsyncClient.VERSION + "/instances/{instanceId}") @Consumes(MediaType.APPLICATION_JSON) @FormParams(keys = "state", values = "save") ListenableFuture<Image> saveInstanceToImage(@PathParam("instanceId") String id, @FormParam("name") String toImageName, @FormParam("description") String toImageDescription); /** * @see IBMSmartCloudClient#createInstanceInLocation */ @POST @Path(IBMSmartCloudAsyncClient.VERSION + "/instances") @Consumes(MediaType.APPLICATION_JSON) @Unwrap(depth = 2, edgeCollection = Set.class) ListenableFuture<Instance> createInstanceInLocation(@FormParam("location") String location, @FormParam("name") String name, @FormParam("imageID") String imageID, @FormParam("instanceType") String instanceType, CreateInstanceOptions... options); /** * @see IBMSmartCloudClient#deleteInstance */ @DELETE @Path(IBMSmartCloudAsyncClient.VERSION + "/instances/{instanceId}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) ListenableFuture<Void> deleteInstance(@PathParam("instanceId") String id); /** * @see IBMSmartCloudClient#listKeys() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/keys") @Consumes(MediaType.APPLICATION_JSON) @Unwrap @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Key>> listKeys(); /** * @see IBMSmartCloudClient#generateKeyPair(String) */ @POST @Path(IBMSmartCloudAsyncClient.VERSION + "/keys") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Key> generateKeyPair(@FormParam("name") String name); /** * @see IBMSmartCloudClient#addPublicKey(String, String) */ @POST @Path(IBMSmartCloudAsyncClient.VERSION + "/keys") ListenableFuture<Void> addPublicKey(@FormParam("name") String name, @FormParam("publicKey") String publicKey); /** * @see IBMSmartCloudClient#updatePublicKey(String, String) */ @PUT @Path(IBMSmartCloudAsyncClient.VERSION + "/keys/{keyName}") ListenableFuture<Void> updatePublicKey(@PathParam("keyName") String name, @FormParam("publicKey") String publicKey); /** * @see IBMSmartCloudClient#setDefaultStatusOfKey(String, boolean) */ @PUT @Path(IBMSmartCloudAsyncClient.VERSION + "/keys/{keyName}") ListenableFuture<Void> setDefaultStatusOfKey(@PathParam("keyName") String name, @FormParam("default") boolean isDefault); /** * @see IBMSmartCloudClient#getKey(String) */ @GET @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/keys/{keyName}") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Key> getKey(@PathParam("keyName") String name); /** * @see IBMSmartCloudClient#deleteKey */ @DELETE @Path(IBMSmartCloudAsyncClient.VERSION + "/keys/{keyName}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) ListenableFuture<Void> deleteKey(@PathParam("keyName") String name); /** * @see IBMSmartCloudClient#listStorageOfferings() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/storage") @Unwrap @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends StorageOffering>> listStorageOfferings(); /** * @see IBMSmartCloudClient#listVolumes() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/storage") @Unwrap @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Volume>> listVolumes(); /** * @see IBMSmartCloudClient#createVolumeInLocation */ @POST @Path(IBMSmartCloudAsyncClient.VERSION + "/storage") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Volume> createVolumeInLocation(@FormParam("location") String location, @FormParam("name") String name, @FormParam("format") String format, @FormParam("size") String size, @FormParam("offeringID") String offeringID); /** * @see IBMSmartCloudClient#getVolume(long) */ @GET @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/storage/{volumeId}") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Volume> getVolume(@PathParam("volumeId") String id); /** * @see IBMSmartCloudClient#deleteVolume */ @DELETE @Path(IBMSmartCloudAsyncClient.VERSION + "/storage/{volumeId}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) ListenableFuture<Void> deleteVolume(@PathParam("volumeId") String id); /** * @see IBMSmartCloudClient#listLocations() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/locations") @Consumes(MediaType.TEXT_XML) @XMLResponseParser(LocationsHandler.class) @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Location>> listLocations(); /** * @see IBMSmartCloudClient#getLocation */ @GET @ExceptionParser(ReturnNullOnNotFoundOr404.class) @Path(IBMSmartCloudAsyncClient.VERSION + "/locations/{locationId}") @Consumes(MediaType.TEXT_XML) @XMLResponseParser(LocationHandler.class) ListenableFuture<Location> getLocation(@PathParam("locationId") String id); /** * @see IBMSmartCloudClient#listAddressOfferings() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/offerings/address") @Unwrap @Consumes(MediaType.APPLICATION_JSON) @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Offering>> listAddressOfferings(); /** * @see IBMSmartCloudClient#listAddresses() */ @GET @Path(IBMSmartCloudAsyncClient.VERSION + "/addresses") @Consumes(MediaType.APPLICATION_JSON) @Unwrap @ExceptionParser(ReturnEmptySetOnNotFoundOr404.class) ListenableFuture<Set<? extends Address>> listAddresses(); /** * @see IBMSmartCloudClient#allocateAddressInLocation */ @POST @Path(IBMSmartCloudAsyncClient.VERSION + "/addresses") @Consumes(MediaType.APPLICATION_JSON) ListenableFuture<Address> allocateAddressInLocation(@FormParam("location") String locationId, @FormParam("offeringID") String offeringID); /** * @see IBMSmartCloudClient#releaseAddress */ @DELETE @Path(IBMSmartCloudAsyncClient.VERSION + "/addresses/{addressId}") @ExceptionParser(ReturnVoidOnNotFoundOr404.class) ListenableFuture<Void> releaseAddress(@PathParam("addressId") String id); }