// Path: src/com/qa/framework/InstanceFactory.java
// public class InstanceFactory {
// 
//     /**
//      * 用于缓存对应的实例
//      */
//     private static final Map<String, Object> cache = new ConcurrentHashMap<String, Object>();
// 
// 
//     /**
//      * 获取 ClassScanner
//      *
//      * @return the class scanner
//      */
//     public static ClassScanner getClassScanner() {
//         return getInstance("class_scanner", DefaultClassScanner.class);
//     }
// 
//     public static Global getGlobal() {
//         return getInstance("Global", Global.class);
//     }
// 
// 
//     /**
//      * Gets instance.
//      *
//      * @param <T>              the type parameter
//      * @param cacheKey         the cache key
//      * @param defaultImplClass the default impl class
//      * @return the instance
//      */
//     @SuppressWarnings("unchecked")
//     public static <T> T getInstance(String cacheKey, Class<T> defaultImplClass) {
//         // 若缓存中存在对应的实例，则返回该实例
//         if (cache.containsKey(cacheKey)) {
//             return (T) cache.get(cacheKey);
//         }
//         // 通过反射创建该实现类对应的实例
//         T instance = ReflectHelper.newInstance(defaultImplClass.getName());
//         // 若该实例不为空，则将其放入缓存
//         if (instance != null) {
//             cache.put(cacheKey, instance);
//         }
//         // 返回该实例
//         return instance;
//     }
// }
// 
// Path: src/com/qa/framework/bean/Function.java
// public class Function {
//     private String name;
//     private String clsName;
//     private String methodName;
//     private Object value;
//     private String arguments;
// 
//     public Object getValue() {
//         return value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//     }
// 
//     public String getArguments() {
//         return arguments;
//     }
// 
//     public void setArguments(String arguments) {
//         this.arguments = arguments;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Gets cls name.
//      *
//      * @return the cls name
//      */
//     public String getClsName() {
//         return clsName;
//     }
// 
//     /**
//      * Sets cls name.
//      *
//      * @param clsName the cls name
//      */
//     public void setClsName(String clsName) {
//         this.clsName = clsName;
//     }
// 
//     /**
//      * Gets method name.
//      *
//      * @return the method name
//      */
//     public String getMethodName() {
//         return methodName;
//     }
// 
//     /**
//      * Sets method name.
//      *
//      * @param methodName the method name
//      */
//     public void setMethodName(String methodName) {
//         this.methodName = methodName;
//     }
// }
// 
// Path: src/com/qa/framework/bean/Global.java
// public class Global {
//     private List<Sql> sqlList;
//     private List<Function> functionList;
// 
//     private Before before;
//     private After after;
// 
//     public Global() {
//     }
// 
//     public Before getBefore() {
//         return before;
//     }
// 
//     public void setBefore(Before before) {
//         this.before = before;
//     }
// 
//     public After getAfter() {
//         return after;
//     }
// 
//     public void setAfter(After after) {
//         this.after = after;
//     }
// 
//     public List<Sql> getSqlList() {
//         return sqlList;
//     }
// 
//     public List<Function> getFunctionList() {
//         return functionList;
//     }
// 
// 
//     public void addSql(Sql sql) {
//         if (sqlList == null) {
//             sqlList = new ArrayList<Sql>();
//         }
//         sqlList.add(sql);
//     }
// 
//     public void addFunction(Function function) {
//         if (functionList == null) {
//             functionList = new ArrayList<Function>();
//         }
//         functionList.add(function);
//     }
// 
// }


import com.library.common.IOHelper;
import com.library.common.ReflectHelper;
import com.library.common.XmlHelper;
import com.qa.framework.InstanceFactory;
import com.qa.framework.bean.Function;
import com.qa.framework.bean.Global;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import java.lang.reflect.Field;
import java.util.List;
package com.qa.framework.core;



/**
 * 将xml中的数据转化成对应的bean类
 */
public class GlobalConvertor {
    private static final Logger logger = Logger.getLogger(GlobalConvertor.class);

    public GlobalConvertor() {
        List<String> files = IOHelper.listFilesInDirectoryRecursive(System.getProperty("user.dir"), "global.xml");
        if (files.size() > 0) {
            String filePath = files.get(0);
            logger.info("convert data from xml-" + filePath);
            XmlHelper xmlHelper = new XmlHelper();
            Document document = xmlHelper.readXMLFile(filePath);
            Global global = InstanceFactory.getGlobal();
            List elements = document.getRootElement().elements();
            for (Object element : elements) {
                convert(global, (Element) element);
            }
            if(InstanceFactory.getGlobal().getBefore() != null && InstanceFactory.getGlobal().getBefore().getFunctions() != null) {
// Path: src/com/qa/framework/InstanceFactory.java
// public class InstanceFactory {
// 
//     /**
//      * 用于缓存对应的实例
//      */
//     private static final Map<String, Object> cache = new ConcurrentHashMap<String, Object>();
// 
// 
//     /**
//      * 获取 ClassScanner
//      *
//      * @return the class scanner
//      */
//     public static ClassScanner getClassScanner() {
//         return getInstance("class_scanner", DefaultClassScanner.class);
//     }
// 
//     public static Global getGlobal() {
//         return getInstance("Global", Global.class);
//     }
// 
// 
//     /**
//      * Gets instance.
//      *
//      * @param <T>              the type parameter
//      * @param cacheKey         the cache key
//      * @param defaultImplClass the default impl class
//      * @return the instance
//      */
//     @SuppressWarnings("unchecked")
//     public static <T> T getInstance(String cacheKey, Class<T> defaultImplClass) {
//         // 若缓存中存在对应的实例，则返回该实例
//         if (cache.containsKey(cacheKey)) {
//             return (T) cache.get(cacheKey);
//         }
//         // 通过反射创建该实现类对应的实例
//         T instance = ReflectHelper.newInstance(defaultImplClass.getName());
//         // 若该实例不为空，则将其放入缓存
//         if (instance != null) {
//             cache.put(cacheKey, instance);
//         }
//         // 返回该实例
//         return instance;
//     }
// }
// 
// Path: src/com/qa/framework/bean/Function.java
// public class Function {
//     private String name;
//     private String clsName;
//     private String methodName;
//     private Object value;
//     private String arguments;
// 
//     public Object getValue() {
//         return value;
//     }
// 
//     public void setValue(Object value) {
//         this.value = value;
//     }
// 
//     public String getArguments() {
//         return arguments;
//     }
// 
//     public void setArguments(String arguments) {
//         this.arguments = arguments;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Gets cls name.
//      *
//      * @return the cls name
//      */
//     public String getClsName() {
//         return clsName;
//     }
// 
//     /**
//      * Sets cls name.
//      *
//      * @param clsName the cls name
//      */
//     public void setClsName(String clsName) {
//         this.clsName = clsName;
//     }
// 
//     /**
//      * Gets method name.
//      *
//      * @return the method name
//      */
//     public String getMethodName() {
//         return methodName;
//     }
// 
//     /**
//      * Sets method name.
//      *
//      * @param methodName the method name
//      */
//     public void setMethodName(String methodName) {
//         this.methodName = methodName;
//     }
// }
// 
// Path: src/com/qa/framework/bean/Global.java
// public class Global {
//     private List<Sql> sqlList;
//     private List<Function> functionList;
// 
//     private Before before;
//     private After after;
// 
//     public Global() {
//     }
// 
//     public Before getBefore() {
//         return before;
//     }
// 
//     public void setBefore(Before before) {
//         this.before = before;
//     }
// 
//     public After getAfter() {
//         return after;
//     }
// 
//     public void setAfter(After after) {
//         this.after = after;
//     }
// 
//     public List<Sql> getSqlList() {
//         return sqlList;
//     }
// 
//     public List<Function> getFunctionList() {
//         return functionList;
//     }
// 
// 
//     public void addSql(Sql sql) {
//         if (sqlList == null) {
//             sqlList = new ArrayList<Sql>();
//         }
//         sqlList.add(sql);
//     }
// 
//     public void addFunction(Function function) {
//         if (functionList == null) {
//             functionList = new ArrayList<Function>();
//         }
//         functionList.add(function);
//     }
// 
// }


// Path: src/com/qa/framework/core/GlobalConvertor.java
import com.library.common.IOHelper;
import com.library.common.ReflectHelper;
import com.library.common.XmlHelper;
import com.qa.framework.InstanceFactory;
import com.qa.framework.bean.Function;
import com.qa.framework.bean.Global;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import java.lang.reflect.Field;
import java.util.List;

package com.qa.framework.core;



/**
 * 将xml中的数据转化成对应的bean类
 */
public class GlobalConvertor {
    private static final Logger logger = Logger.getLogger(GlobalConvertor.class);

    public GlobalConvertor() {
        List<String> files = IOHelper.listFilesInDirectoryRecursive(System.getProperty("user.dir"), "global.xml");
        if (files.size() > 0) {
            String filePath = files.get(0);
            logger.info("convert data from xml-" + filePath);
            XmlHelper xmlHelper = new XmlHelper();
            Document document = xmlHelper.readXMLFile(filePath);
            Global global = InstanceFactory.getGlobal();
            List elements = document.getRootElement().elements();
            for (Object element : elements) {
                convert(global, (Element) element);
            }
            if(InstanceFactory.getGlobal().getBefore() != null && InstanceFactory.getGlobal().getBefore().getFunctions() != null) {
                for (Function function : InstanceFactory.getGlobal().getBefore().getFunctions()) {