package com.yunspace.dropwizard.xml.example.resources;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.google.common.base.Optional;
import com.yunspace.dropwizard.xml.example.core.Pirate;
import com.yunspace.dropwizard.xml.example.db.PirateDAO;
import io.dropwizard.hibernate.UnitOfWork;
import io.dropwizard.jersey.params.LongParam;
@Path("/pirates")
public class PirateResource {
private final PirateDAO pirateDAO;
public PirateResource(PirateDAO peopleDAO) {
this.pirateDAO = peopleDAO;
}
@POST
@UnitOfWork
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Pirate createPirate(Pirate pirate) {
Pirate newPirate = pirateDAO.create(pirate);
return newPirate;
}
@GET
@Path("{pirateId}")
@UnitOfWork
@Produces(MediaType.APPLICATION_XML)
public Optional<Pirate> getPirate(@PathParam("pirateId") LongParam pirateId) {
return pirateDAO.findById(pirateId.get());
}
@GET
@UnitOfWork
@Produces(MediaType.APPLICATION_XML)
public List<Pirate> listPirates() {
return pirateDAO.findAll();
}
@PUT
@Path("{pirateId}")
@UnitOfWork
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Optional<Pirate> updatePirate(@PathParam("pirateId") LongParam pirateId, Pirate pirate) {
pirate.setPirateId(pirateId.get());
pirateDAO.update(pirate);
return pirateDAO.findById(pirate.getPirateId());
}
@DELETE
@Path("{pirateId}")
@UnitOfWork
public void deletePirate(@PathParam("pirateId") LongParam pirateId) {
Optional<Pirate> pirateOptional = pirateDAO.findById(pirateId.get());
if (pirateOptional.isPresent()) {
pirateDAO.delete(pirateOptional.get());
}
}
}