package com.sun.jersey.samples.hypermedia;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ViewResource;
import com.sun.jersey.api.client.WebResourceLinkHeaders;
import com.sun.jersey.client.view.annotation.Status;
import com.sun.jersey.samples.hypermedia.client.model.Address;
import com.sun.jersey.samples.hypermedia.client.model.Order;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.core.Context;
public class OrderView {
private Order order;
private Client c;
private ViewResource r;
private WebResourceLinkHeaders links;
@GET
@Status(200)
@Consumes("*/*")
public void build(Order order,
@Context Client c,
@Context ViewResource r,
@Context WebResourceLinkHeaders links) {
this.order = order;
this.c = c;
this.r = r;
this.links = links;
}
public Order getOrder() {
return order;
}
// operations
public OrderView update(Order o) {
return r.put(new Update<OrderView>(OrderView.class, r), o).
view();
}
// relation
public CustomerView getCustomer() {
return c.view(getOrder().getCustomer(), CustomerView.class);
}
// actions
public OrderView review(String notes) {
return links.viewResource("review").
header("notes", notes).
post(new Refresh<OrderView>(OrderView.class)).
view();
}
public OrderView pay(String newCardNumber) {
return links.viewResource("pay").
queryParam("newCardNumber", newCardNumber).
post(new Refresh<OrderView>(OrderView.class)).
view();
}
public OrderView ship(Address newShippingAddress) {
return links.viewResource("ship").
put(new Refresh<OrderView>(OrderView.class), newShippingAddress).
view();
}
public OrderView cancel(String notes) {
return links.viewResource("cancel").
queryParam("notes", notes).
post(new Refresh<OrderView>(OrderView.class)).
view();
}
}