blob: d118ac2019319e59d1d5f5a9efeba19369f543c9 [file] [log] [blame]
package de.ids_mannheim.korap.web;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import de.ids_mannheim.korap.auditing.AuditRecord;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.interfaces.db.AuditingIface;
import de.ids_mannheim.korap.response.Notifications;
/**
* @author hanl, margaretha
* @date 29/01/2014
* @last 04/12/2017
*/
public class CoreResponseHandler {
private AuditingIface auditing;
public CoreResponseHandler (AuditingIface iface) {
this.auditing = iface;
}
private void register (List<AuditRecord> records) {
if (auditing != null && !records.isEmpty())
auditing.audit(records);
else if (auditing == null)
throw new RuntimeException("Auditing handler must be set!");
}
public WebApplicationException throwit (KustvaktException e) {
Response s;
if (e.hasNotification()){
s = Response.status(getStatus(e.getStatusCode()))
.entity(e.getNotification()).build();
}
else{
s = Response.status(getStatus(e.getStatusCode()))
.entity(buildNotification(e)).build();
}
return new WebApplicationException(s);
}
public WebApplicationException throwit (int code) {
return new WebApplicationException(Response.status(getStatus(code))
.entity(buildNotification(code, "", "")).build());
}
public WebApplicationException throwit (int code, String message,
String entity) {
return new WebApplicationException(Response.status(getStatus(code))
.entity(buildNotification(code, message, entity)).build());
}
public WebApplicationException throwit (int code, String notification) {
return new WebApplicationException(Response.status(getStatus(code))
.entity(notification).build());
}
protected String buildNotification (KustvaktException e) {
register(e.getRecords());
return buildNotification(e.getStatusCode(), e.getMessage(),
e.getEntity());
}
public static String buildNotification (int code, String message,
String entity) {
Notifications notif = new Notifications();
notif.addError(code, message, entity);
return notif.toJsonString() + "\n";
}
protected Response.Status getStatus (int code) {
Response.Status status = Response.Status.BAD_REQUEST;
switch (code) {
// case StatusCodes.NO_VALUE_FOUND:
// status = Response.Status.NO_CONTENT;
// break;
case StatusCodes.ILLEGAL_ARGUMENT:
status = Response.Status.NOT_ACCEPTABLE;
break;
case StatusCodes.STATUS_OK:
status = Response.Status.OK;
break;
}
return status;
}
}