/** * <p>Copyright: Copyright (c) 2009</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.engin.format; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.hundsun.ares.studio.engin.trace.EngineTraceFlagHelper; //import com.hundsun.hdt.internal.generate.procedure.util.CodeUtil; /** *�����ʽ������ * */ public class CodeFormater { private final static Logger logger = Logger.getLogger(CodeFormater.class); final public static int CODE_PROC = 0; final public static String procBegin = "EXEC SQL EXECUTE\r\n"; final public static String procEnd = "END-EXEC;\r\n"; final public static String procReplace = "//proc�����滻������"; final public static String PROC_CMT = "--"; final public static String PROC_CMT_REPLACE = "//sqlע���滻������"; public static String commandString = "format/Uncrustify.exe -q -c format/default.cfg -l c "; public static void format(StringBuffer sb, int type){ switch (type) { case CODE_PROC: formatProc(sb); break; default: break; } } public static StringBuffer formatProc(StringBuffer sb) { // return sb; List<String> replaceList = new ArrayList<String>(); Runtime rt = Runtime.getRuntime(); //��proc����������滻 ��ֹ��ʽ�����ߺ��Ҳ��� while(sb.indexOf(procBegin) != -1){ if(sb.indexOf(procEnd) != -1){ int start = sb.indexOf(procBegin); int end = sb.indexOf(procEnd); replaceList.add(sb.substring(start, end+procEnd.length())); sb.replace(start, end+procEnd.length(), procReplace); }else{ break; } } //Ŀǰ�Ƚ�ע�ͷ�--�滻����ʽ����֮�����滻��--���Ժ����Ѱ��һ��sql��ʽ�����ߣ� while(sb.indexOf(PROC_CMT) != -1){ int start = sb.indexOf(PROC_CMT); sb.replace(start, start + PROC_CMT.length(), PROC_CMT_REPLACE); } StringBuffer buffer = new StringBuffer(); try { Process ps = rt.exec(commandString);//"astyle --style=ansi"); ps.getOutputStream().write(sb.toString().getBytes()); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); ps.getOutputStream().close(); String s = br.readLine(); while(s != null) { if(s.indexOf(procReplace) != -1){ buffer.append(FormaterUtil.getFirstBlank(s)); buffer.append(replaceList.get(0).replaceAll("\n", "\n"+FormaterUtil.getFirstBlank(s))); replaceList.remove(0); }else if(s.indexOf(PROC_CMT_REPLACE) != -1){ //�����滻Ϊ--ע�ͷ� buffer.append(s.replaceAll(PROC_CMT_REPLACE, PROC_CMT)); }else{ buffer.append(s); } buffer.append("\n"); s = br.readLine(); } br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error(e); } catch (Exception e) { e.printStackTrace(); logger.error(e); } return buffer; } //�߼���ʹ�����ָ�ʽ������ //���ô���PROC�����ʽ�� //��������һЩʱ�� public static StringBuffer formatCByForce(StringBuffer sb) { Runtime rt = Runtime.getRuntime(); StringBuffer buffer = new StringBuffer(); try { Process ps = rt.exec(commandString);//"astyle --style=ansi"); ps.getOutputStream().write(sb.toString().getBytes()); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); ps.getOutputStream().close(); String s = br.readLine(); while(s != null) { buffer.append(s); buffer.append("\n"); s = br.readLine(); } br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error(e); } catch (Exception e) { e.printStackTrace(); logger.error(e); } return buffer; } /** * * @param sb * @param isNeedFormat * @return */ public static StringBuffer formatC(StringBuffer sb) { //�����ʽ�� if(EngineTraceFlagHelper.getDebugTraceFlag()){ return sb; }else{ return CodeFormater.formatCByForce(sb); } } }