package com.highway2urhell.transformer;
import javassist.CtClass;
import javassist.CtMethod;
public class Struts1WithSpringTransformer extends AbstractLeechTransformer {
public Struts1WithSpringTransformer() {
super("org/springframework/web/struts/ContextLoaderPlugIn");
addImportPackage(collectPackages());
}
public static String[] collectPackages() {
return new String[]{
"com.highway2urhell",
"com.highway2urhell.domain",
"java.lang.reflect",
"java.util",
"org.apache.struts.action",
"org.springframework.web.context"
};
}
@Override
protected void doTransform(CtClass cc) throws Exception {
CtMethod m = cc.getMethod("init", "(Lorg/apache/struts/action/ActionServlet;Lorg/apache/struts/config/ModuleConfig;)V");
m.insertAfter(collectBody());
}
public static String collectBody() {
return "{\n" +
" List listEntryPath = new ArrayList();\n" +
" if (webApplicationContext != null && webApplicationContext.getBeanDefinitionNames() != null && webApplicationContext.getBeanDefinitionNames().length > 0) {\n" +
" for (int i = 0; i < webApplicationContext.getBeanDefinitionNames().length; i++) {\n" +
" String tmp = webApplicationContext.getBeanDefinitionNames()[i];\n" +
" if (tmp.startsWith(\"/\")) {\n" +
" Action toAdd = (Action) webApplicationContext.getBean(tmp, Action.class);\n" +
" try {\n" +
" Class c = Class.forName(toAdd.getClass().getName());\n" +
" Method[] tabDeclared = c.getDeclaredMethods();\n" +
" for (int m = 0; i < tabDeclared.length; i++) {\n" +
" EntryPathData entry = new EntryPathData();\n" +
" String resSignature = org.objectweb.asm.Type.getMethodDescriptor(tabDeclared[i]);\n" +
" entry.setUri(tmp);\n" +
" entry.setClassName(toAdd.getClass().getName());\n" +
" entry.setMethodName(tabDeclared[m].getName());\n" +
" entry.setSignatureName(resSignature);\n" +
" List listEntryPathData = new ArrayList();\n" +
" for (int j = 0; j < tabDeclared[m].getParameterTypes().length; j++) {\n" +
" EntryPathParam param = new EntryPathParam();\n" +
" param.setKey(\"\");\n" +
" param.setTypeParam(TypeParam.PARAM_DATA);\n" +
" param.setValue(tabDeclared[m].getParameterTypes()[j].getName());\n" +
" listEntryPathData.add(param);\n" +
" }\n" +
" entry.setListEntryPathData(listEntryPathData);\n" +
" System.err.println(entry.toString());\n" +
" listEntryPath.add(entry);\n" +
" }\n" +
" } catch (ClassNotFoundException e) {\n" +
" System.err.println(\"Error on invoke \" + toAdd.getClass().getName());\n" +
" e.printStackTrace();\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" CoreEngine.getInstance().getFramework(\"STRUTS_SPRING_1\").receiveData(listEntryPath);\n" +
"}";
}
}