/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.atom.compiler.macro.handlers;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.hundsun.ares.studio.atom.compiler.constant.DomainConstant;
import com.hundsun.ares.studio.atom.compiler.macro.MacroConstant;
import com.hundsun.ares.studio.atom.compiler.token.FuncResultObjectReturnToken;
import com.hundsun.ares.studio.engin.constant.IEngineContextConstant;
import com.hundsun.ares.studio.engin.constant.ITokenConstant;
import com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler;
import com.hundsun.ares.studio.engin.token.DefaultTokenEvent;
import com.hundsun.ares.studio.engin.token.ICodeToken;
import com.hundsun.ares.studio.engin.token.IDomainHandler;
import com.hundsun.ares.studio.engin.token.ITokenDomain;
import com.hundsun.ares.studio.engin.token.ITokenListenerManager;
import com.hundsun.ares.studio.engin.token.macro.IMacroToken;
/**
* @author liaogc
* �������������
*/
public class FuncResultObjectReturnMacroHandler implements IMacroTokenHandler{
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler#getKey()
*/
@Override
public String getKey() {
return MacroConstant.FUNC_RESULT_OBJECT_RETURN_MACRONAME;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler#handle(com.hundsun.ares.studio.engin.token.macro.IMacroToken, java.util.Map)
*/
@Override
public Iterator<ICodeToken> handle(IMacroToken token,
Map<Object, Object> context) throws Exception {
List<ICodeToken> codeTokens= new ArrayList<ICodeToken>();
if (token.getParameters().length !=1) {
ITokenListenerManager manager =(ITokenListenerManager) context.get(IEngineContextConstant.TOKEN_LISTENER_MANAGER);
String message = String.format("��[%s]ȱ�ٲ�����", MacroConstant.FUNC_RESULT_OBJECT_RETURN_MACRONAME);
manager.fireEvent(new DefaultTokenEvent(ITokenConstant.EVENT_ENGINE_WARNNING,message));
}else{
ITokenDomain domain = getDomain(context);
if(domain!=null){
String objectId = (String)domain.getArgs()[0];//��Դ�����
String objectParamName = StringUtils.trim(token.getParameters()[0]);//������(��������)
codeTokens.add(new FuncResultObjectReturnToken(objectId,objectParamName));//���token
removeDomain(context);//ɾ����
}else{
ITokenListenerManager manager =(ITokenListenerManager) context.get(IEngineContextConstant.TOKEN_LISTENER_MANAGER);
String message = MacroConstant.FUNC_RESULT_OBJECT_RETURN_MACRONAME+"��:ǰ��ĺ������������õĺ��������Ƿ��ؽ����";
manager.fireEvent(new DefaultTokenEvent(ITokenConstant.EVENT_ENGINE_WARNNING,message));
}
}
return codeTokens.iterator();
}
/**
* ������
*/
private ITokenDomain getDomain(Map<Object, Object> context){
IDomainHandler handler = (IDomainHandler) context.get(IEngineContextConstant.DOMAIN_HANDLER);
return handler.getDomain(DomainConstant.FUNC_RESULT_OBJECT_RETURN_DOMAIN);
}
/**
* ɾ����
*/
private void removeDomain(Map<Object, Object> context){
IDomainHandler handler = (IDomainHandler) context.get(IEngineContextConstant.DOMAIN_HANDLER);
handler.removeDomain(DomainConstant.FUNC_RESULT_OBJECT_RETURN_DOMAIN);
}
}