package org.atomhopper.abdera.response;
import org.apache.abdera.model.Entry;
import org.apache.abdera.protocol.server.ProviderHelper;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
import org.atomhopper.abdera.filter.AdapterResponseInterceptor;
import org.atomhopper.response.AdapterResponse;
import java.util.Date;
public class EntryResponseHandler extends AbstractResponseHandler<Entry> {
private static final String XML = "application/xml";
public EntryResponseHandler(String[] allowedMethods, AdapterResponseInterceptor<Entry>... interceptors) {
super(allowedMethods, interceptors);
}
@Override
protected ResponseContext handleAdapterResponse(RequestContext rc, AdapterResponse<Entry> adapterResponse) {
final Date lastUpdated = adapterResponse.getBody() != null ? adapterResponse.getBody().getUpdated() : null;
switch (adapterResponse.getResponseStatus()) {
case OK:
case CREATED:
return ProviderHelper.returnBase(adapterResponse.getBody(), adapterResponse.getResponseStatus().value(), lastUpdated);
case NOT_FOUND:
return ProviderHelper.notfound(rc, adapterResponse.getMessage()).setContentType(XML);
case INTERNAL_SERVER_ERROR:
return ProviderHelper.servererror(rc, adapterResponse.getMessage(), new InternalServerException()).setContentType(XML);
case METHOD_NOT_ALLOWED:
return ProviderHelper.notallowed(rc, adapterResponse.getMessage(), getAllowedHttpMethods()).setContentType(XML);
case BAD_REQUEST:
return ProviderHelper.badrequest(rc, adapterResponse.getMessage()).setContentType(XML);
case CONFLICT:
return ProviderHelper.conflict(rc, adapterResponse.getMessage()).setContentType(XML);
default:
return ProviderHelper.notfound(rc).setContentType(XML);
}
}
}