*/
@Override
public Access parse(String line,String includeExtn) {
StringTokenizer tokenizer = new StringTokenizer(line, delimiter);
Iterator<String> formatItr = formatLst.iterator();
Access access = new Access();
boolean isIncludeExtn = false;
//int i = 0;
while (formatItr.hasNext()) {
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
//System.out.println(token);
String format = formatItr.next();
if ("%a".equals(format)) {
access.setRemoteIpAddr(token);
}else if ("%A".equals(format)) {
access.setLocalIpAddr(token);
}else if ("%b".equals(format)) {
access.setBytesSent(token);
}else if ("%h".equals(format)) {
access.setRemoteHostName(token);
}else if ("%H".equals(format)) {
access.setRequestProtocol(token);
}else if ("%l".equals(format)) {
access.setRemoteLogicalUserName(token);
}else if ("%m".equals(format)) {
access.setRequestMethod(token);
}else if ("%p".equals(format)) {
access.setLocalPort(token);
}else if ("%q".equals(format)) {
access.setQueryString(token);
}else if ("%r".equals(format)){
//Specific handling for url string.
access.setRequestMethod(token);
String url = tokenizer.nextToken();
if(url.contains("?")){
url = url.substring(0, url.indexOf("?"));
access.setFirstLineOfRequest(url);
}else{
access.setFirstLineOfRequest(url);
}
if(includeExtn==null || NONE.equalsIgnoreCase(includeExtn)){
//Do nothing.
}else{
StringTokenizer includeExtnTokenizer = new StringTokenizer(includeExtn,",");
while (includeExtnTokenizer.hasMoreTokens()) {
String extension = includeExtnTokenizer.nextToken();
if(url.contains(extension)){
isIncludeExtn = true;
}
}
}
access.setRequestProtocol(tokenizer.nextToken());
}else if ("%s".equals(format)) {
access.setHttpStatusCode(token);
}else if ("%S".equals(format)) {
access.setUserSessionId(token);
}else if ("%t".equals(format)) {
//Specific handling for this required since [ is used with space for timezone offset
access.setDateTime(token + tokenizer.nextToken());
}else if ("%u".equals(format)) {
access.setRemoteUser(token);
}else if ("%U".equals(format)) {
access.setRequestedUrlPath(token);
}else if ("%v".equals(format)) {
access.setLocalServerName(token);
}else if ("%D".equals(format)) {
access.setTimeTakeInMilliSec(token);
}else if ("%T".equals(format)) {
access.setTimeTakeInSec(token);
}else if ("%I".equals(format)) {
access.setCurrentRequestThreadName(token);
}
}
}
if(isIncludeExtn){
return access;