blob: 76d184fbb0cbf6d281d0047899022f9badf67599 [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF 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.apache.juneau.petstore;
import static org.apache.juneau.http.HttpMethod.*;
import java.util.*;
import org.apache.juneau.jsonschema.annotation.Items;
import org.apache.juneau.petstore.dto.*;
import org.apache.juneau.*;
import org.apache.juneau.http.annotation.*;
import org.apache.juneau.http.remote.*;
import org.apache.juneau.http.exception.*;
import org.apache.juneau.http.response.*;
/**
* Defines the interface for both the server-side and client-side pet store application.
*
* <p>
* On the server side, this interface is implemented by the <c>PetStoreResource</c> class.
*
* <p>
* On the client side, this interface is instantiated as a proxy using the <c>RestClient.getRemoteProxy()</c> method.
*
* <ul class='seealso'>
* <li class='extlink'>{@source}
* </ul>
*/
@Remote(path="/petstore")
public interface PetStore {
//------------------------------------------------------------------------------------------------------------------
// Pets
//------------------------------------------------------------------------------------------------------------------
/**
* Returns all pets in the database.
*
* @return All pets in the database.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/pet")
public Collection<Pet> getPets() throws NotAcceptable;
/**
* Returns a pet from the database.
*
* @param petId The ID of the pet to retrieve.
* @return The pet.
* @throws IdNotFound Pet was not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(path="/pet/{petId}") /* method inferred from method name */
public Pet getPet(
@Path(
name="petId",
description="ID of pet to return",
example="123"
)
long petId
) throws IdNotFound, NotAcceptable;
/**
* Adds a pet to the database.
*
* @param pet The pet data to add to the database.
* @return {@link Ok} if successful.
* @throws IdConflict ID already in use.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=POST, path="/pet")
public long createPet(
@Body(
description="Pet object to add to the store"
) CreatePet pet
) throws IdConflict, NotAcceptable, UnsupportedMediaType;
/**
* Updates a pet in the database.
*
* @param pet The pet data to add to the database.
* @return {@link Ok} if successful.
* @throws IdNotFound ID not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=PUT, path="/pet/{petId}")
public Ok updatePet(
@Body(
description="Pet object that needs to be added to the store"
) UpdatePet pet
) throws IdNotFound, NotAcceptable, UnsupportedMediaType;
/**
* Find all pets with the matching statuses.
*
* @param status The statuses to match against.
* @return The pets that match the specified statuses.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/pet/findByStatus")
public Collection<Pet> findPetsByStatus(
@Query(
name="status",
description="Status values that need to be considered for filter.",
required=true,
type="array",
collectionFormat="csv",
items=@Items(
type="string",
_enum="AVAILABLE,PENDING,SOLD",
_default="AVAILABLE"
),
example="AVALIABLE,PENDING"
)
PetStatus[] status
) throws NotAcceptable;
/**
* Deletes the specified pet.
*
* @param apiKey Security key.
* @param petId ID of pet to delete.
* @return {@link Ok} if successful.
* @throws IdNotFound Pet not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=DELETE, path="/pet/{petId}")
public Ok deletePet(
@Header(
name="api_key",
description="Security API key",
required=true,
example="foobar"
)
String apiKey,
@Path(
name="petId",
description="Pet id to delete",
example="123"
)
long petId
) throws IdNotFound, NotAcceptable;
/**
* Deletes all pets in the database.
*
* @return {@link Ok} if successful.
*/
@RemoteMethod(method=DELETE, path="/pet")
public Ok deleteAllPets();
//------------------------------------------------------------------------------------------------------------------
// Orders
//------------------------------------------------------------------------------------------------------------------
/**
* Returns all orders in the database.
*
* @return All orders in the database.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/store/order")
public Collection<Order> getOrders() throws NotAcceptable;
/**
* Returns an order from the database.
*
* @param orderId The ID of the order to retreieve.
* @return The retrieved order.
* @throws InvalidId ID was invalid.
* @throws IdNotFound Order was not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/store/order/{orderId}")
public Order getOrder(
@Path(
name="orderId",
description="ID of order to fetch",
maximum="1000",
minimum="1",
example="123"
)
long orderId
) throws InvalidId, IdNotFound, NotAcceptable;
/**
* Adds an order to the database.
*
* @param petId Id of pet to order.
* @param username The username of the user placing the order.
* @return The ID of the order.
* @throws IdConflict ID was already in use.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=POST, path="/store/order")
public long placeOrder(
@FormData(
name="petId",
description="Pet ID"
)
long petId,
@FormData(
name="username",
description="The username of the user creating the order"
)
String username
) throws IdConflict, NotAcceptable, UnsupportedMediaType;
/**
* Deletes an order from the database.
*
* @param orderId The order ID.
* @return {@link Ok} if successful.
* @throws InvalidId ID not valid.
* @throws IdNotFound Order not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=DELETE, path="/store/order/{orderId}")
public Ok deleteOrder(
@Path(
name="orderId",
description="ID of the order that needs to be deleted",
minimum="1",
example="5"
)
long orderId
) throws InvalidId, IdNotFound, NotAcceptable;
/**
* Deletes all orders in the database.
*
* @return {@link Ok} if successful.
*/
@RemoteMethod(method=DELETE, path="/store/order")
public Ok deleteAllOrders();
/**
* Returns an inventory of pet statuses and counts.
*
* @return An inventory of pet statuses and counts.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/store/inventory")
public Map<PetStatus,Integer> getStoreInventory() throws NotAcceptable;
//------------------------------------------------------------------------------------------------------------------
// Users
//------------------------------------------------------------------------------------------------------------------
/**
* Returns all users in the database.
*
* @return All users in the database.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/user")
public Collection<User> getUsers() throws NotAcceptable;
/**
* Returns a user from the database.
*
* @param username The username.
* @return The user.
* @throws InvalidUsername Invalid username.
* @throws IdNotFound username not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/user/{username}")
public User getUser(
@Path(
name="username",
description="The name that needs to be fetched. Use user1 for testing."
)
String username
) throws InvalidUsername, IdNotFound, NotAcceptable;
/**
* Adds a new user to the database.
*
* @param user The user to add to the database.
* @return {@link Ok} if successful.
* @throws InvalidUsername Username was invalid.
* @throws IdConflict Username already in use.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=POST, path="/user")
public Ok createUser(
@Body(
description="Created user object"
)
User user
) throws InvalidUsername, IdConflict, NotAcceptable, UnsupportedMediaType;
/**
* Bulk creates users.
*
* @param users The users to add to the database.
* @return {@link Ok} if successful.
* @throws InvalidUsername Username was invalid.
* @throws IdConflict Username already in use.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=POST, path="/user/createWithArray")
public Ok createUsers(
@Body(
description="List of user objects"
)
User[] users
) throws InvalidUsername, IdConflict, NotAcceptable, UnsupportedMediaType;
/**
* Updates a user in the database.
*
* @param username The username.
* @param user The updated information.
* @return {@link Ok} if successful.
* @throws InvalidUsername Username was invalid.
* @throws IdNotFound User was not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
* @throws UnsupportedMediaType Unsupported <c>Content-Type</c> header specified.
*/
@RemoteMethod(method=PUT, path="/user/{username}")
public Ok updateUser(
@Path(
name="username",
description="Name that need to be updated"
)
String username,
@Body(
description="Updated user object"
)
User user
) throws InvalidUsername, IdNotFound, NotAcceptable, UnsupportedMediaType;
/**
* Deletes a user from the database.
*
* @param username The username.
* @return {@link Ok} if successful.
* @throws InvalidUsername Username was not valid.
* @throws IdNotFound User was not found.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=DELETE, path="/user/{username}")
public Ok deleteUser(
@Path(
name="username",
description="The name that needs to be deleted"
)
String username
) throws InvalidUsername, IdNotFound, NotAcceptable;
/**
* Deletes all users in the database.
*
* @return {@link Ok} if successful.
*/
@RemoteMethod(method=DELETE, path="/user")
public Ok deleteAllUsers();
/**
* User login.
*
* @param username The username for login.
* @param password The password for login in clear text.
* @param rateLimit Calls per hour allowed by the user.
* @param expiresAfter The <bc>Expires-After</bc> response header.
* @return {@link Ok} if successful.
* @throws InvalidLogin Login was unsuccessful.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/user/login")
public Ok login(
@Query(
name="username",
description="The username for login.",
required=true,
example="myuser"
)
String username,
@Query(
name="password",
description="The password for login in clear text.",
required=true,
example="abc123"
)
String password,
@ResponseHeader(
name="X-Rate-Limit",
type="integer",
format="int32",
description="Calls per hour allowed by the user.",
example="123"
)
Value<Integer> rateLimit,
Value<ExpiresAfter> expiresAfter
) throws InvalidLogin, NotAcceptable;
/**
* User logout.
*
* @return {@link Ok} if successful.
* @throws NotAcceptable Unsupported <c>Accept</c> header specified.
*/
@RemoteMethod(method=GET, path="/user/logout")
public Ok logout() throws NotAcceptable;
}