package org.deftserver.web.handler;
import java.lang.annotation.Annotation;
import java.util.Map;
import org.deftserver.web.Asynchronous;
import org.deftserver.web.Authenticated;
import org.deftserver.web.HttpVerb;
import org.deftserver.web.http.HttpRequest;
import org.deftserver.web.http.HttpResponse;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
public abstract class RequestHandler {
private final ImmutableMap<HttpVerb, Boolean> asynchVerbs;
private final ImmutableMap<HttpVerb, Boolean> authVerbs;
public RequestHandler() {
Map<HttpVerb, Boolean> asyncV = Maps.newHashMap();
Map<HttpVerb, Boolean> authV = Maps.newHashMap();
for (HttpVerb verb : HttpVerb.values()) {
authV.put(verb, isMethodAnnotated(verb, Authenticated.class));
asyncV.put(verb, isMethodAnnotated(verb, Asynchronous.class));
}
asynchVerbs = ImmutableMap.copyOf(asyncV);
authVerbs = ImmutableMap.copyOf(authV);
}
private boolean isMethodAnnotated(HttpVerb verb, Class<? extends Annotation> annotation) {
try {
Class<?>[] parameterTypes = {HttpRequest.class, HttpResponse.class};
return getClass().getMethod(verb.toString().toLowerCase(), parameterTypes).getAnnotation(annotation) != null;
} catch (NoSuchMethodException nsme) {
return false;
}
}
public boolean isMethodAsynchronous(HttpVerb verb) {
return asynchVerbs.get(verb);
}
public boolean isMethodAuthenticated(HttpVerb verb) {
return authVerbs.get(verb);
}
//Default implementation of HttpMethods return a 501 page
public void get(HttpRequest request, HttpResponse response) {
response.setStatusCode(501);
response.write("");
}
public void post(HttpRequest request, HttpResponse response) {
response.setStatusCode(501);
response.write("");
}
public void put(HttpRequest request, HttpResponse response) {
response.setStatusCode(501);
response.write("");
}
public void delete(HttpRequest request, HttpResponse response) {
response.setStatusCode(501);
response.write("");
}
public void head(HttpRequest request, HttpResponse response) {
response.setStatusCode(501);
response.write("");
}
public String getCurrentUser(HttpRequest request) {
return null;
}
}