/**
*
*/
package com.hundsun.ares.studio.usermacro.compiler.handlers;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.engin.constant.IEngineContextConstant;
import com.hundsun.ares.studio.engin.token.ICodeToken;
import com.hundsun.ares.studio.usermacro.UserMacroItem;
/**
* @author yanwj06282
*
*/
public class UserMacroToken implements ICodeToken {
private Map<String,String> businessType;
private IARESProject project;
private String cur;
private String lastResId;
private List<String> inoutParams;
private String[] umParams;
private String[] varFlags;
private List<String> vars;
private UserMacroItem item;
private UserMacroHandler parent;
public UserMacroToken(UserMacroHandler parent ,UserMacroItem item ,Map<String,String> businessType, Map<Object, Object> context ,String cur,String lastResId ,String[] umParams ,List<String> inoutParams) {
this.businessType = businessType;
this.umParams = umParams;
this.inoutParams = inoutParams;
this.cur = cur;
this.lastResId = lastResId;
this.item = item;
this.parent = parent;
project = (IARESProject)context.get("��ǰ��Ŀ");
}
public String getCur(){
return cur;
}
public UserMacroHandler getParent(){
return parent;
}
/**
* @return the item
*/
public UserMacroItem getItem() {
return item;
}
public IARESProject getProject(){
return project;
}
public Map<String, String> getBusinessType() {
return businessType;
}
public List<String> getInoutParams(){
return inoutParams;
}
public String[] getUmParams() {
return umParams;
}
public void setUmParams(String[] umParams){
this.umParams = umParams;
}
@Override
public String getContent() {
return null;
}
@Override
public int getType() {
return 0;
}
public String[] getVarFlags(){
return varFlags;
}
public String[] getVars(){
return vars.toArray(new String[0]);
}
@Override
public String genCode(Map<Object, Object> context) throws Exception {
String content = item.getSequence();
Set<String> paraIndex = UserMacroUtil.getParamSet(content);
vars = new ArrayList<String>();
vars.addAll(paraIndex);
String str = UserMacroUtil.getFormatStr(item.getContent(), vars);
List<String> tlist = (List<String>) context.get(IEngineContextConstant.PSEUDO_CODE_PARA_LIST);
if(parent.inProc){
str = UserMacroUtil.handleParams(":", str, tlist.toArray(new String[tlist.size()]), inoutParams);
}
checkParams(item.getName(), str, getUmParams(), vars);
if(StringUtils.indexOfIgnoreCase(str,"lpResultSet") > -1) {
if(StringUtils.isNotBlank(lastResId)){
str = str.replaceAll("lpResultSet", "lpResultSet"+lastResId);
}
}
//�ҳ��û��������еı��
varFlags = UserMacroUtil.getFormatFlag(str);
//�������еı�ǣ�T��ǵ�һ�������
for (String v : varFlags) {
IUserMacroFlagHelper helper = UserMacroFlagHelperFactory.getInstance(v);
str = helper.genFlag(this,context, str);
}
return UserMacroUtil.genCode(str, vars, getUmParams()) + "\r\n";
}
/**
* �û��꣬����У��
*
* @param userMacroName
* @param str
* @param paras
* @param params
*/
private void checkParams(String userMacroName ,String str ,String[] paras ,List<String> params){
boolean status_ok = false;
if (StringUtils.indexOfIgnoreCase(str, "<SP>") > -1) {
if (paras.length >= params.size() || paras.length+1 >= params.size()) {
status_ok = true;
}
}else {
if (paras.length >= params.size()) {
status_ok = true;
}
}
if (!status_ok) {
throw new RuntimeException("�Զ���꣺["+userMacroName+"] ,������Ϣ��ƥ��!");
}
}
}