package cz.cvut.fel.adaptiverestfulapi.data.persistence;
import cz.cvut.fel.adaptiverestfulapi.core.HttpContext;
import cz.cvut.fel.adaptiverestfulapi.core.HttpHeaders;
import cz.cvut.fel.adaptiverestfulapi.core.HttpRouter;
import cz.cvut.fel.adaptiverestfulapi.core.HttpStatus;
import cz.cvut.fel.adaptiverestfulapi.data.DataException;
import cz.cvut.fel.adaptiverestfulapi.data.NotFoundException;
import cz.cvut.fel.adaptiverestfulapi.meta.configuration.Configuration;
import cz.cvut.fel.adaptiverestfulapi.meta.model.Entity;
import javax.persistence.EntityManager;
public class DeleteHandler extends cz.cvut.fel.adaptiverestfulapi.data.DeleteHandler {
protected EntityManager manager;
public DeleteHandler(EntityManager manager) {
this.manager = manager;
}
@Override
protected HttpContext delete(Entity entity, HttpContext context, Configuration configuration) throws DataException {
Object identifier = context.getRouter().getIdentifier(entity.getPrimary().getAttributeType());
if (identifier == null) {
throw new DataException("Identifier for DELETE was null.");
}
Object object = this.manager.find(entity.getEntityClass(), identifier);
if (object == null) {
throw new NotFoundException(entity.getName(), identifier.toString());
}
this.delete(entity, object);
context.response(HttpStatus.S_204, new HttpHeaders(), null);
return context;
}
protected void delete(Entity entity, Object object) throws DataException {
this.manager.getTransaction().begin();
this.manager.remove(object);
this.manager.getTransaction().commit();
}
}