package rfx.server.http;
import io.netty.handler.codec.http.HttpHeaders;
import java.util.List;
import rfx.server.http.data.HttpRequestEvent;
import rfx.server.http.data.service.DataService;
/**
* the base class for HTTP processor, input: HttpRequest output: processed model object
*
* @author Trieu.nguyen
*
*/
public abstract class HttpProcessor {
public static final DataService EMPTY = new DataService() {
@Override
public boolean isRenderedByTemplate() {
return false;
}
@Override
public void freeResource() {}
@Override
public String getClasspath() {
return DataService.class.getName();
}
@Override
public List<HttpHeaders> getHttpHeaders() {
return null;
}
};
public static DataService redirect(String url){
return new RedirectService(url);
}
public static class RedirectService implements DataService {
String redirectedUrl;
public RedirectService(String redirectedUrl) {
super();
this.redirectedUrl = redirectedUrl;
}
public String getRedirectedUrl() {
return redirectedUrl;
}
@Override
public boolean isRenderedByTemplate() {
return false;
}
@Override
public void freeResource() {}
@Override
public String getClasspath() {
return DataService.class.getName();
}
@Override
public List<HttpHeaders> getHttpHeaders() {
return null;
}
};
/**
* always called by HttpProcessorManager
*
* @return processed model object
*/
public DataService doProcessing(HttpRequestEvent event) {
//TODO support hooking, filtering HttpRequestEvent
//call the implemented process method
return process(event);
}
///////////// for the implementation class /////////////
protected abstract DataService process(HttpRequestEvent event);
}