/** * <p>Copyright: Copyright (c) 2013</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.procedure.compiler.oracle.macro; import java.util.HashMap; import java.util.List; import java.util.Map; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.procdure.Procedure; import com.hundsun.ares.studio.procdure.constants.IProcedureRefType; import com.hundsun.ares.studio.procdure.constants.IProcedureResType; import com.hundsun.ares.studio.procedure.compiler.oracle.macro.handlers.ProcedureCallMacroHandler; import com.hundsun.ares.studio.reference.ReferenceManager; /** * @author zhuyf * */ public class ProcedureMacroTokenService implements IProcedureMacroTokenService { IARESProject project; Map<String, IMacroTokenHandler> prcMap = new HashMap<String, IMacroTokenHandler>(); Map<String, IARESResource> prcResourceMap = new HashMap<String, IARESResource>(); public ProcedureMacroTokenService(IARESProject project){ this.project = project; } /* (non-Javadoc) * @see com.hundsun.ares.studio.atom.compiler.macro.procedure.IProcedureMacroTokenService#isProcedure(java.lang.String) */ @Override public boolean isProcedure(String procedureName) { loadProcedure(procedureName); return prcMap.containsKey(procedureName); } /* (non-Javadoc) * @see com.hundsun.ares.studio.atom.compiler.macro.procedure.IProcedureMacroTokenService#getHandler(java.lang.String) */ @Override public IMacroTokenHandler getHandler(String procedureName) { loadProcedure(procedureName); return prcMap.get(procedureName); } /* (non-Javadoc) * @see com.hundsun.ares.studio.atom.compiler.macro.procedure.IProcedureMacroTokenService#getProcedure(java.lang.String) */ @Override public IARESResource getProcedure(String procedureName) { loadProcedure(procedureName); return prcResourceMap.get(procedureName); } /** * �ӻ����м���ԭ�Ӻ��� * @param serviceName */ private void loadProcedure(String procedureName){ if(!prcMap.containsKey(procedureName)){ ReferenceInfo refInfo =ReferenceManager.getInstance().getFirstReferenceInfo(project, IProcedureRefType.PROCEDURE_CNAME, procedureName, true); if(refInfo!=null){ Procedure procedure = (Procedure) refInfo.getObject(); if(procedure!=null){ prcResourceMap.put(procedure.getChineseName(), refInfo.getResource()); prcMap.put(procedure.getChineseName(), new ProcedureCallMacroHandler(procedure.getChineseName(), refInfo.getResource())); } } } } }