Package br.com.caelum.vraptor.restbucks.web

Source Code of br.com.caelum.vraptor.restbucks.web.OrderingController

package br.com.caelum.vraptor.restbucks.web;

import static br.com.caelum.vraptor.view.Results.representation;
import static br.com.caelum.vraptor.view.Results.xml;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.vraptor.Consumes;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.Routes;
import br.com.caelum.vraptor.restbucks.Item;
import br.com.caelum.vraptor.restbucks.Order;
import br.com.caelum.vraptor.restbucks.OrderDatabase;
import br.com.caelum.vraptor.restbucks.Payment;
import br.com.caelum.vraptor.restfulie.hypermedia.Transition;
import br.com.caelum.vraptor.serialization.Serializer;
import br.com.caelum.vraptor.view.Status;

/**
* Ordering system provides two services: order retrieval and insertion.
*
* @author guilherme silveira
*/
@Resource
public class OrderingController {

  private final Result result;
  private final Status status;
  private final OrderDatabase database;
  private final Routes routes;

  public OrderingController(Result result, Status status, OrderDatabase database, Routes routes) {
    this.result = result;
    this.status = status;
    this.database = database;
    this.routes = routes;
  }

  @Get
  @Path("/orders/{order.id}")
  public void get(Order order) {
    order = database.getOrder(order.getId());
    if (order != null) {
      Serializer serializer = result.use(representation()).from(order);
      serializer.include("items").include("location");
      serializer.include("payment").serialize();
    } else {
      status.notFound();
    }
  }
 
  @Post
  @Path("/orders")
  @Consumes
  public void add(Order order) {
    int id = 0;
    for(Item i : order.getItems()) {
      i.use(order, ++id);
    }
    database.save(order);
    routes.uriFor(OrderingController.class).get(order);
    status.created(routes.getUri());
  }
 
  @Delete
  @Path("/orders/{order.id}")
  @Transition
  public void cancel(Order order) {
    order = database.getOrder(order.getId());
    if(order.getStatus().equals("ready")) {
      order.finish();
    } else {
      order.cancel();
      database.delete(order);
    }
    status.ok();
  }
 
  @Get
  @Path("/orders")
  public List<Order> index() throws IOException {
    return new ArrayList<Order>(database.all());
  }

  @Post
  @Path("/orders/{order.id}/pay")
  @Consumes
  @Transition
  public void pay(Order order, Payment payment) {
    order = database.getOrder(order.getId());
    if(order.pay(payment)) {
      result.use(xml()).from(order.getReceipt()).serialize();
    } else {
      status.badRequest("Invalid payment value, order costs " + order.getCost());
    }
  }

  @Get
  @Path("/orders/{order.id}/checkPaymentInfo")
  public void checkPayment(Order order) {
    order = database.getOrder(order.getId());
    if (order != null) {
      result.use(xml()).from(order.getPayment()).serialize();
    } else {
      status.notFound();
    }
  }

  @Put
  @Path("/orders/{order.id}")
  @Transition
  @Consumes
  public void update(Order order) {
    order.setStatus("unpaid");
    database.update(order);
    // we could status.ok() or return the representation
    get(order);
  }
 
}
TOP

Related Classes of br.com.caelum.vraptor.restbucks.web.OrderingController

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.