blob: 46f5d498c8b4b6f408dd1634f4961b2d5a7f05dc [file] [log] [blame]
/**
* 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.hostedchef;
import java.util.Set;
import javax.inject.Named;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
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.Constants;
import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.chef.ChefApi;
import org.jclouds.chef.ChefAsyncApi;
import org.jclouds.chef.filters.SignedHeaderAuth;
import org.jclouds.chef.functions.ParseKeySetFromJson;
import org.jclouds.hostedchef.binders.BindGroupNameToJsonPayload;
import org.jclouds.hostedchef.binders.BindGroupToUpdateRequestJsonPayload;
import org.jclouds.hostedchef.binders.GroupName;
import org.jclouds.hostedchef.domain.Group;
import org.jclouds.hostedchef.domain.User;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.Headers;
import org.jclouds.rest.annotations.ParamParser;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.ResponseParser;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides asynchronous access to the Hosted Chef via their REST API.
*
* @see HostedChefApi
* @author Ignasi Barrera
* @deprecated please use
* {@code org.jclouds.ContextBuilder#buildApi(HostedChefApi.class)}
* as {@link HostedChefAsyncApi} interface will be removed in
* jclouds 1.7.
*/
@Deprecated
@RequestFilters(SignedHeaderAuth.class)
@Consumes(MediaType.APPLICATION_JSON)
@Headers(keys = "X-Chef-Version", values = "{" + Constants.PROPERTY_API_VERSION + "}")
public interface HostedChefAsyncApi extends ChefAsyncApi {
/**
* @see ChefApi#nodeExists(String)
*/
@Override
// Use get instead of HEAD
@Named("node:exists")
@GET
@Path("/nodes/{nodename}")
@Fallback(FalseOnNotFoundOr404.class)
ListenableFuture<Boolean> nodeExists(@PathParam("nodename") String nodename);
/**
* @see HostedChefApi#getUser(String)
*/
@Named("user:get")
@GET
@Path("/users/{name}")
@Fallback(NullOnNotFoundOr404.class)
ListenableFuture<User> getUser(@PathParam("name") String name);
/**
* @see HostedChefApi#listGroups()
*/
@Named("group:list")
@GET
@Path("/groups")
@ResponseParser(ParseKeySetFromJson.class)
ListenableFuture<Set<String>> listGroups();
/**
* @see HostedChefApi#getGroup(String)
*/
@Named("group:get")
@GET
@Path("/groups/{name}")
@Fallback(NullOnNotFoundOr404.class)
ListenableFuture<Group> getGroup(@PathParam("name") String name);
/**
* @see HostedChefApi#createGroup(String)
*/
@Named("group:create")
@POST
@Path("/groups")
ListenableFuture<Void> createGroup(@BinderParam(BindGroupNameToJsonPayload.class) String name);
/**
* @see HostedChefApi#updateGroup(Group)
*/
@Named("group:update")
@PUT
@Path("/groups/{name}")
ListenableFuture<Void> updateGroup(
@PathParam("name") @ParamParser(GroupName.class) @BinderParam(BindGroupToUpdateRequestJsonPayload.class) Group group);
/**
* @see HostedChefApi#getGroup(String)
*/
@Named("group:delete")
@DELETE
@Path("/groups/{name}")
ListenableFuture<Void> deleteGroup(@PathParam("name") String name);
}