package cn.org.rapid_framework.generator; import java.lang.reflect.Method; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.org.rapid_framework.generator.ext.MyMethod; import cn.org.rapid_framework.generator.ext.Parameter; import cn.org.rapid_framework.generator.util.StringHelper; public class GeneratorUtil { /** * 是否存在指定的配置,配置在generator.xml中,例如,<entry key="basepackage">com.company.project</entry> * @param methodName * @return */ public boolean isConfigExists(String configName) { String configValue=GeneratorProperties.props.getProperty(configName,""); if(configValue==null||"".equals(configValue.trim())){ return false; } return true; } /** * 由给定的配置名取得配置值 * @param configName * @return * @throws Exception */ public String[] getConfigValue(String configName) throws Exception { String configValue=GeneratorProperties.props.getProperty(configName,""); if(configValue==null||"".equals(configValue.trim())){ throw new Error(); } return configValue.split(","); } /** * 由给定的配置名取得配置值 * @param configName * @return * @throws Exception */ public String getConfigSingleValue(String configName) throws Exception { String configValue=GeneratorProperties.props.getProperty(configName,""); if(configValue==null||"".equals(configValue.trim())){ throw new Error(); } return configValue; } /** * 字符串第一个字母小写 * @param str * @return */ public String uncapitalize(String str){ return StringHelper.uncapitalize(str); } public String lower(String str){ return str.toLowerCase(); } /** * * @param configName * @return */ public List<MyMethod> getConfigMethods(String configName){ //检查参数 String configValue=GeneratorProperties.props.getProperty(configName,""); if(configValue==null||"".equals(configValue.trim())){ throw new Error(); } String methodsStrs[]=configValue.split(";"); List<MyMethod> methods=new LinkedList<MyMethod>(); String aMethodsStr=null; MyMethod amethod=null; for(int i=0;i<methodsStrs.length;i++){ aMethodsStr=methodsStrs[i].trim(); if("".equals(aMethodsStr)){ continue; } methods.add(getMethodFromStr(aMethodsStr)); } return methods; } /** * 从给定的字符串返回一个函数描述对象 * @param defineStr 格式为 private MyMethod getMethodFromStr(String str) * @return */ private MyMethod getMethodFromStr(String defineStr){ Pattern pattern =Pattern.compile("(\\w+)\\s+(\\w+)\\s+([\\w\\$]+)\\(([^\\)]*)\\)"); Matcher matcher=pattern.matcher(defineStr); if(matcher.find()){ MyMethod method=new MyMethod(); method.setDefineStr(matcher.group()); method.setAccessType(matcher.group(1)); method.setReturnType(matcher.group(2)); method.setMethodName(matcher.group(3)); method.setParamStr(matcher.group(4)); method.setParas(getParams(matcher.group(4))); method.setParamNames(getParamNames(method.getParas())); return method; }else{ throw new Error(); } } /** * 取得参数的名字列表 * @param params * @return */ private String getParamNames(List<Parameter> params){ StringBuilder paramNames=new StringBuilder(); for (int i = 0; i < params.size(); i++) { Parameter parameter = params.get(i); paramNames.append(parameter.getParamName()); paramNames.append(","); } if(paramNames.length()>0){ paramNames.deleteCharAt(paramNames.length()-1); } return paramNames.toString(); } /** * 从给定字符串返回参数对象集 * @param paramStr * @return */ private List<Parameter> getParams(String paramStr){ List<Parameter> params=new LinkedList<Parameter>(); String paramsStrs[]=paramStr.split(","); String aparamStr=null; for(int i=0;i<paramsStrs.length;i++){ aparamStr=paramsStrs[i].trim(); if("".equals(aparamStr)){ continue; } params.add(getAParam(aparamStr)); } return params; } /** * 解析参数对象 * @param aparamStr * @return */ private Parameter getAParam(String aparamStr){ Pattern pattern =Pattern.compile("([\\w\\_\\$]+)\\s+([\\w\\_\\$]+)"); Matcher matcher=pattern.matcher(aparamStr); if(matcher.find()){ Parameter aparam=new Parameter(); aparam.setParamType(matcher.group(1)); aparam.setParamName(matcher.group(2)); return aparam; }else{ throw new Error(); } } /** * 去掉字符串中给定的符号 * @author huber.lv * @since 2012-11-15 * @param sqlName * @param splite * @return */ public String worksUpperCase(String sqlName,String splite) { String[] strs = sqlName.toLowerCase().split(splite); String result = ""; String preStr = ""; for(int i = 0; i < strs.length; i++) { if(preStr.length() == 1) { result += strs[i]; }else { result += StringHelper.capitalize(strs[i]); } preStr = strs[i]; } return result; } public String replaceAll(String str,String regex,String replacement){ return str.replaceAll(regex, replacement); } private static boolean fromTable=true; public boolean getFromTable(){ return fromTable; } public static void setFromTable(boolean flag){ fromTable= flag; } public String getValue(Map<String,Object> map,String key){ return map.get(key).toString(); } public Object invoke(Object obj,String method){ try{ Method m=obj.getClass().getMethod(method); m.setAccessible(true); return m.invoke(obj); }catch (Exception e) { e.printStackTrace(); } return null; } }