package com.hundsun.ares.studio.atom.compiler.mysql.macro; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.CommonSelectStatementMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.ErrorMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.FuncResultObjectReturnMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.FunctionResultSetGetValueHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.InsertTableInProcBlockMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.NestObjectResultsetMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.NestPackAddFieldMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.NestPackAddValueMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCBlockEndMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCCommitHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCGetRecordBeginMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCGetRecordEndMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCInserTableMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCResultSetReturnMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCResultSetStatementMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PROCStatementMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PackAddFieldByHandworkMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PackAddValueByHandworkMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.PackerDefineMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.ProcBlockBeginMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.ResultSetObjectReturnMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.ResultSetObjectSetValueMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.SelectInsertTableInProcBlockMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.UnPackerDefineMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.UnpackAddValueByHandworkMacroHandler; import com.hundsun.ares.studio.atom.compiler.mysql.macro.handlers.UnpackerInitHandler; import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler; import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandlerFactory; public class MacroHandlerFactory implements IMacroTokenHandlerFactory{ private Map<String, IMacroTokenHandler> macroMap = new ConcurrentHashMap<String, IMacroTokenHandler>(); private Set<IMacroTokenHandler> handlerSet = new HashSet<IMacroTokenHandler>(); /** * �Ƿ�Ϊԭ�ӵ��� */ private boolean isAtomCalled = true; /** * @param isAtomCalled the isAtomCalled to set */ public void setAtomCalled(boolean isAtomCalled) { this.isAtomCalled = isAtomCalled; } private static MacroHandlerFactory instance; public static MacroHandlerFactory getInstance(){ if(null == instance){ instance = new MacroHandlerFactory(); } return instance; } private MacroHandlerFactory(){ init(); } private void init(){ //Ĭ��ֻ����ֹ���� handlerSet.add(new UnpackAddValueByHandworkMacroHandler());//�ֹ������ handlerSet.add(new PackAddFieldByHandworkMacroHandler());//�ֹ����ͷ handlerSet.add(new PackAddValueByHandworkMacroHandler());//�ֹ������ handlerSet.add(new NestObjectResultsetMacroHandler());//��ȡǶ�׶������� handlerSet.add(new NestPackAddFieldMacroHandler());//Ƕ�׽�����ֹ����ͷ handlerSet.add(new NestPackAddValueMacroHandler());//Ƕ�׽�����ֹ������ handlerSet.add(new FuncResultObjectReturnMacroHandler());//������������󷵻� handlerSet.add(new FunctionResultSetGetValueHandler());//������������󷵻� handlerSet.add(new PackerDefineMacroHandler());//��������� handlerSet.add(new UnPackerDefineMacroHandler());//��������� //ԭ�Ӳ���ã�����Ҫ�������ϵͳ�� if(isAtomCalled) { handlerSet.add(new ErrorMacroHandler()); handlerSet.add(new PROCStatementMacroHandler());//Proc��� handlerSet.add(new InsertTableInProcBlockMacroHandler());//������¼ handlerSet.add(new SelectInsertTableInProcBlockMacroHandler());//select������¼ handlerSet.add(new CommonSelectStatementMacroHandler());//ͨ��select handlerSet.add(new ProcBlockBeginMacroHandler());//proc���鿪ʼ handlerSet.add(new PROCBlockEndMacroHandler());//proc������� handlerSet.add(new PROCResultSetStatementMacroHandler());//PRO*C�������� handlerSet.add(new PROCResultSetReturnMacroHandler());//PRO*C��������� handlerSet.add(new PROCGetRecordBeginMacroHandler());//PRO*C��¼��ȡ��ʼ handlerSet.add(new PROCGetRecordEndMacroHandler());//PRO*C��¼��ȡ���� handlerSet.add(new PROCInserTableMacroHandler());//PRO*C������¼ handlerSet.add(new PROCCommitHandler());//PRO*C�����ύ handlerSet.add(new ResultSetObjectReturnMacroHandler());//��������󷵻� handlerSet.add(new ResultSetObjectSetValueMacroHandler());//���������ֵ handlerSet.add(new UnpackerInitHandler());//����������ʼ�� } for(IMacroTokenHandler handler:handlerSet){ macroMap.put(handler.getKey(), handler); } } @Override public boolean canHandle(String key) { return macroMap.containsKey(key.toUpperCase()); } @Override public IMacroTokenHandler create(String key) { if(macroMap.containsKey(key.toUpperCase())){ return macroMap.get(key.toUpperCase()); } return null; } @Override public Set<IMacroTokenHandler> getHandledMacros() { return handlerSet; } }