com.google.sitebricks.example.RestfulWebServiceWithCRUDConversions Maven / Gradle / Ivy
The newest version!
package com.google.sitebricks.example;
import com.google.inject.name.Named;
import com.google.sitebricks.At;
import com.google.sitebricks.client.transport.Json;
import com.google.sitebricks.headless.Reply;
import com.google.sitebricks.headless.Request;
import com.google.sitebricks.headless.Service;
import com.google.sitebricks.http.Delete;
import com.google.sitebricks.http.Get;
import com.google.sitebricks.http.Patch;
import com.google.sitebricks.http.Post;
import com.google.sitebricks.http.Put;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@At(RestfulWebServiceWithCRUDConversions.AT_ME)
@Service
public class RestfulWebServiceWithCRUDConversions {
public static final String AT_ME = "/jsonConversion";
public static List widgets = new ArrayList();
static {
populate();
}
private static void populate() {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
try {
addWidget(new Widget(1, "Widget 1", sdf.parse("01-JAN-1990 12:00"), 1.50));
addWidget(new Widget(2, "Widget 2", sdf.parse("02-FEB-2000 18:00"), 21.75));
addWidget(new Widget(3, "Widget 3", sdf.parse("03-MAR-2010 23:00"), 19.99));
} catch (Exception e) {
}
}
@Post
public Reply post(Request request) {
Widget widget = request.read(Widget.class).as(Json.class);
addWidget(widget);
return Reply.with(widget).as(Json.class).type("application/json");
}
@Put
public Reply> put(Request request) {
Widget widget = request.read(Widget.class).as(Json.class);
addWidget(widget);
return Reply.with(widget).as(Json.class).type("application/json");
}
@Patch
public Reply> patch(Request request) {
Widget widget = request.read(Widget.class).as(Json.class);
updateWidget(widget);
return Reply.with(widget).as(Json.class).type("application/json");
}
@Get
public Reply> getAll() {
return Reply.with(widgets).as(Json.class).type("application/json");
}
@At("/:id")
@Get
public Reply> get(@Named("id") int id) {
Widget widget = findWidget(id);
if (widget != null)
return Reply.with(widget).as(Json.class).type("application/json");
return Reply.saying().error();
}
@At("/:id")
@Delete
public Reply> delete(@Named("id") int id) {
Widget widget = removeWidget(id);
if (widget != null)
return Reply.with(widget).as(Json.class).type("application/json");
return Reply.saying().error();
}
public static Widget removeWidget(Widget widget) {
return removeWidget(widget.getId());
}
public static Widget removeWidget(int id) {
Widget oldWidget = findWidget(id);
if (oldWidget != null)
widgets.remove(oldWidget);
return oldWidget;
}
public static void addWidget(Widget widget) {
Widget oldWidget = findWidget(widget.getId());
if (oldWidget != null)
widgets.remove(oldWidget);
widgets.add(widget);
}
public static void updateWidget(Widget widget) {
Widget staleWidget = findWidget(widget.getId());
if (staleWidget != null) {
staleWidget.setName(widget.getName());
staleWidget.setAvailable(widget.getAvailable());
staleWidget.setPrice(widget.getPrice());
}
}
public static Widget findWidget(int id) {
for (Widget widget : widgets) {
if (widget.getId() == id)
return widget;
}
return null;
}
public static class Widget implements Serializable {
int id;
String name;
Date available;
double price;
public Widget() {
}
public Widget(int id, String name, Date available, double price) {
this.id = id;
this.name = name;
this.available = available;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getAvailable() {
return available;
}
public void setAvailable(Date available) {
this.available = available;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Widget clone() {
return new Widget (id, name, available, price);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((available == null) ? 0 : available.hashCode());
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
long temp;
temp = Double.doubleToLongBits(price);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Widget other = (Widget) obj;
if (available == null) {
if (other.available != null)
return false;
} else if (!available.equals(other.available))
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
return false;
return true;
}
}
}