com.github.andyshaox.servlet.mapping.GenericFindingMappingEngine Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of GearEE Show documentation
Show all versions of GearEE Show documentation
Enhance and formating the coding of JDK
package com.github.andyshaox.servlet.mapping;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.github.andyshao.data.structure.Bitree;
import com.github.andyshao.data.structure.Bitree.BitreeNode;
import com.github.andyshao.reflect.ArrayOperation;
import com.github.andyshaox.servlet.ServeltOperation;
/**
*
* Title:
* Descript:
* Copyright: Copryright(c) Jan 21, 2016
* Encoding:UNIX UTF-8
*
* @author Andy.Shao
*
*/
public class GenericFindingMappingEngine implements FindingMappingEngine {
static final String buildUrl(HttpServletRequest request) {
String url = request.getRequestURI();
url = url.substring(request.getContextPath().length());
return ServeltOperation.removeFileType(url);
}
private FindingMappingEngine otherOperation = (conf , req , resp , bitree , result) -> {
};
@Override
public void search(ServletConfig config , HttpServletRequest request , HttpServletResponse response , Bitree bitree , List result) throws ServletException , IOException {
String url = GenericFindingMappingEngine.buildUrl(request);
BitreeNode classNode = bitree.root();
//check root
do
if (url.startsWith(classNode.data().getUrl())) break;
while ((classNode = classNode.left()) != null);
if (classNode == null) return;
BitreeNode methodNode = classNode.right();
//search doPost, doGet, doPut, doDelete methods
if (url.equals(classNode.data().getUrl())) do
switch (methodNode.data().getProcessMethod().getName()) {
case "doGet":
case "doPost":
case "doPut":
case "doDelete":
result.add(methodNode.data());
break;
default:
String methodUrl = methodNode.data().getUrl();
if (methodUrl.isEmpty() || methodUrl.equals("/")) result.add(methodNode.data());
break;
}
while ((methodNode = methodNode.left()) != null);
else {
url = url.substring(classNode.data().getUrl().length());
//check method
do {
String methodUrl = methodNode.data().getUrl();
if (methodUrl.isEmpty() || methodUrl.equals("/")) continue;
if (url.startsWith(methodUrl)) result.add(methodNode.data());
} while ((methodNode = methodNode.left()) != null);
}
MethodType methodType = MethodType.covert(request.getMethod());
for (int i = 0 ; i < result.size() ; i++)
if (ArrayOperation.indexOf(result.get(i).getMethodType() , methodType) == -1) result.remove(i);
this.otherOperation.search(config , request , response , bitree , result);
}
public void setOtherOperation(FindingMappingEngine otherOperation) {
this.otherOperation = otherOperation;
}
}