/**
* <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.AtomFunction;
import com.hundsun.ares.studio.atom.compiler.constant.IAtomEngineContextConstant;
import com.hundsun.ares.studio.atom.compiler.macro.MacroConstant;
import com.hundsun.ares.studio.atom.compiler.token.PackAddFieldBodyToken;
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.skeleton.ISkeletonAttributeHelper;
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 zhuyf
*
*/
public class PackAddValueByHandworkMacroHandler implements IMacroTokenHandler {
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.macrohandler.IMacroTokenHandler#getKey()
*/
@Override
public String getKey() {
return MacroConstant.PACK_ADDVALUE_HANDWORK_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 {
/*����������
[�ֹ������]
�������̣�
1.����Ƿ���[�ֹ����ͷ]�ɶ�ƥ��
2.�ӳɶԵ�[�ֹ����ͷ]�л�ȡ�ֶ��б��������ֶΣ���ÿһ�ֶ����ɣ�
lpOutPacker->Add[�ֶ�����]([�ֶ���]); //[�ֶ�ע��]
3.[�ֹ������][client_id][@unpack_sett]����ָ�������������������䣺
v_unpack_sett->Add[�ֶ�����]([�ֶ���]); //[�ֶ�ע��]
v_unpack_sett->EndPack();
4.[�ֹ������][client_id][@unpack_sett][N]��������v_unpack_sett->EndPack();
*
*/
List<ICodeToken> tokens = new ArrayList<ICodeToken>();
ISkeletonAttributeHelper helper = (ISkeletonAttributeHelper)context.get(IAtomEngineContextConstant.SKELETON_ATTRIBUTE_HELPER);
helper.addAttribute(IAtomEngineContextConstant.IS_ALREADY_RETURN_RESULTSET, "true");
IDomainHandler handler = (IDomainHandler) context.get(IEngineContextConstant.DOMAIN_HANDLER);
ITokenDomain packAddFieldHead =handler.getDomain(MacroConstant.PACK_ADDFIELD_HANDWORK_MACRONAME);
AtomFunction atomFunction = (AtomFunction) context.get(IAtomEngineContextConstant.ResourceModel);
helper.addAttribute(IAtomEngineContextConstant.ATTR_ACK_ADDVALUE_HANDWORK_LIST,atomFunction.getObjectId());//�ֹ�������б�
if (packAddFieldHead == null) {
//throw new RuntimeException(getKey() + " �����ڴ��ͷ");
//������������֧�У����ͷ������δ�سɶԳ��֣���ȥ���ü�顣
}
String param_0 = "";
String param_1 = "";
String param_2 = "";
if (token.getParameters().length > 1) {
param_0 = StringUtils.trim(token.getParameters()[1]);
if(!StringUtils.endsWith(param_0, "ResultSet")){
param_0+="ResultSet";
}
}
if (token.getParameters().length > 2) {
param_2 = StringUtils.trim(token.getParameters()[2]);
}
if (token.getParameters().length > 0) {
param_1 = StringUtils.trim(token.getParameters()[0]);
}
String headFeilds = "";
if (packAddFieldHead != null && packAddFieldHead.getArgs()!=null) {
headFeilds = (String) packAddFieldHead.getArgs()[0];
}
String[] params = {};
if(StringUtils.isNotBlank(param_1)){
params = param_1.split(",");
}
String[] fields = headFeilds.split(",");
tokens.add(new PackAddFieldBodyToken(param_0, params,param_2,fields));
checkFieldAndValue(context,token,params,fields);
//ɾ����
handler.removeDomain(MacroConstant.PACK_ADDFIELD_HANDWORK_MACRONAME);
return tokens.iterator();
}
/**
* ����
* @param context
*/
private void checkFieldAndValue(Map<Object, Object> context,IMacroToken token,String[] params,String[] fields){
ITokenListenerManager manager = (ITokenListenerManager)context.get(IEngineContextConstant.TOKEN_LISTENER_MANAGER);
String message = "";
if(params.length>0 && params.length >fields.length){
message ="��:"+token.getLineNo()+MacroConstant.PACK_ADDVALUE_HANDWORK_MACRONAME+"��"+"�ֶ�ֵ����:"+params.length+"����"+MacroConstant.PACK_ADDFIELD_HANDWORK_MACRONAME+"���ֶ�����:"+fields.length;
manager.fireEvent(new DefaultTokenEvent(ITokenConstant.EVENT_ENGINE_WARNNING,message));
}
}
}