Package org.agoncal.application.petstore.rest

Source Code of org.agoncal.application.petstore.rest.CatalogRestService

package org.agoncal.application.petstore.rest;

import org.agoncal.application.petstore.domain.Category;
import org.agoncal.application.petstore.domain.Item;
import org.agoncal.application.petstore.domain.Product;
import org.agoncal.application.petstore.service.CatalogService;
import org.agoncal.application.petstore.util.Loggable;

import javax.annotation.ManagedBean;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement;
import java.io.Serializable;
import java.net.URI;
import java.util.List;

/**
* @author Antonio Goncalves
*         http://www.antoniogoncalves.org
*         --
*/

@Loggable
@Path("/catalog")
@ManagedBean
public class CatalogRestService implements Serializable {

    // ======================================
    // =             Attributes             =
    // ======================================

    @Inject
    private CatalogService catalogService;

    @Context
    private UriInfo uriInfo;

    // ======================================
    // =          Business methods          =
    // ======================================

    @GET
    @Path("/categories")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Category> findAllCategories() {
        return catalogService.findAllCategories();
    }

    @GET
    @Path("/category/{id}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Category findCategory(@PathParam("id") Long categoryId) {
        return catalogService.findCategory(categoryId);
    }

    @POST
    @Path("/category")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response createCategory(JAXBElement<Category> xmlCategory) {
        Category category = catalogService.createCategory(xmlCategory.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(category.getId().toString()).build();
        return Response.created(uri).build();
    }

    @PUT
    @Path("/category")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response updateCategory(JAXBElement<Category> xmlCategory) {
        Category category = catalogService.updateCategory(xmlCategory.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(category.getId().toString()).build();
        return Response.ok(uri).build();
    }

    @DELETE
    @Path("/category/{id}")
    public Response removeCategory(@PathParam("id") Long categoryId) {
        catalogService.removeCategory(categoryId);
        return Response.noContent().build();
    }

    @GET
    @Path("/products")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Product> findAllProducts() {
        return catalogService.findAllProducts();
    }

    @GET
    @Path("/product/{id}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Product findProduct(@PathParam("id") Long productId) {
        return catalogService.findProduct(productId);
    }

    @POST
    @Path("/product")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response createProduct(JAXBElement<Product> xmlProduct) {
        Product product = catalogService.createProduct(xmlProduct.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(product.getId().toString()).build();
        return Response.created(uri).build();
    }

    @PUT
    @Path("/product")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response updateProduct(JAXBElement<Product> xmlProduct) {
        Product product = catalogService.updateProduct(xmlProduct.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(product.getId().toString()).build();
        return Response.ok(uri).build();
    }

    @DELETE
    @Path("/product/{id}")
    public Response removeProduct(@PathParam("id") Long productId) {
        catalogService.removeProduct(productId);
        return Response.noContent().build();
    }

    @GET
    @Path("/items")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Item> findAllItems() {
        return catalogService.findAllItems();
    }

    @GET
    @Path("/item/{id}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Item findItem(@PathParam("id") Long itemId) {
        return catalogService.findItem(itemId);
    }

    @POST
    @Path("/item")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response createItem(JAXBElement<Item> xmlItem) {
        Item item = catalogService.createItem(xmlItem.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(item.getId().toString()).build();
        return Response.created(uri).build();
    }

    @PUT
    @Path("/item")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response updateItem(JAXBElement<Item> xmlItem) {
        Item item = catalogService.updateItem(xmlItem.getValue());
        URI uri = uriInfo.getAbsolutePathBuilder().path(item.getId().toString()).build();
        return Response.ok(uri).build();
    }

    @DELETE
    @Path("/item/{id}")
    public Response removeItem(@PathParam("id") Long itemId) {
        catalogService.removeItem(itemId);
        return Response.noContent().build();
    }

}
TOP

Related Classes of org.agoncal.application.petstore.rest.CatalogRestService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.