package org.xins.server;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.xins.common.FormattedParameters;
import org.xins.common.text.DateConverter;
public class TransactionLoggingInterceptor extends Interceptor {
private static final String NOT_MODIFIED = "-- Not Modified --";
private static final DateConverter DATE_CONVERTER = new DateConverter(true);
@Override
public HttpServletRequest beginRequest(HttpServletRequest request) {
String remoteIP = request.getRemoteAddr();
String method = request.getMethod();
String path = request.getRequestURI();
String queryString = request.getQueryString();
Log.log_3521(remoteIP, method, path, queryString);
return request;
}
@Override
public FunctionResult afterFunctionCall(FunctionRequest functionRequest, FunctionResult xinsResult, HttpServletResponse httpResponse) {
logTransaction(functionRequest, xinsResult);
return xinsResult;
}
protected void logTransaction(FunctionRequest request, FunctionResult result) throws NullPointerException {
String functionName = request.getFunctionName();
String code = result.getErrorCode();
if (code == null || code.length() < 1) {
code = "0";
}
long start = (Long) request.getBackpack().get(BackpackConstants.START);
long duration = System.currentTimeMillis() - start;
String serStart = DATE_CONVERTER.format(start);
Object inParams = new FormattedParameters(request.getParameters(), request.getDataElement());
Object outParams = null;
if (result instanceof NotModifiedResult) {
outParams = NOT_MODIFIED;
} else {
outParams = new FormattedParameters(result.getParameters(), result.getDataElement());
}
String ip = (String) request.getBackpack().get(BackpackConstants.IP);
Log.log_3540(serStart, ip, functionName, duration, code, inParams, outParams);
Log.log_3541(serStart, ip, functionName, duration, code);
}
}