package com.hundsun.ares.studio.atom.compiler.macro; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler; import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandlerFactory; import com.hundsun.ares.studio.procedure.compiler.macro.handlers.InsertTableInProcBlockMacroHandler; import com.hundsun.ares.studio.procedure.compiler.macro.handlers.SelectInsertTableInProcBlockMacroHandler; 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 PackAddFieldByHandworkMacroHandler());//�ֹ����ͷ // handlerSet.add(new PackAddValueByHandworkMacroHandler());//�ֹ������ //ԭ�Ӳ���ã�����Ҫ�������ϵͳ�� 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������¼ } 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; } }