/** * */ package com.hundsun.ares.studio.usermacro.compiler.handlers; import java.util.Map; import org.apache.commons.lang.StringUtils; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.metadata.ErrorNoItem; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * SP��ǵĴ��� * ��SP��Ǵ������Ϣ��ƴ���ϲ�����ƴ�ӵĽṹ��ȡ�����Ƿ������PROC���� * * @author yanwj06282 * */ public class FlagSPHelper implements IUserMacroFlagHelper { private String prefix = "@"; @Override public String genFlag(UserMacroToken token ,Map<Object, Object> context ,String content) { //ȡ�î��������±�λ�����磺<SP>%1$s������Ҫȡ������ġ�1������ʾ��ǰ�ı����ǵ�һλ int index = Integer.parseInt(StringUtils.substring(content, StringUtils.indexOfIgnoreCase(content, "<SP>")+5, StringUtils.indexOfIgnoreCase(content, "<SP>")+6)); //α�����еIJ��� int paramsSize = token.getUmParams().length; //�û����ж���IJ��� int varSize = token.getVars().length; if (paramsSize > 1) { String errorCons = token.getUmParams()[paramsSize - 2]; ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(token.getProject(), IMetadataRefType.ErrNo, errorCons, true); if (info != null && info.getObject() != null) { ErrorNoItem noItem = (ErrorNoItem) info.getObject(); if (noItem != null) { token.getUmParams()[paramsSize - 1] = noItem.getMessage(); } } } //�������proc������ if (token.getParent().inProc) { prefix = "p_"; //��α����������������û��궨��IJ�����������һһ��Ӧ if(paramsSize > varSize){ StringBuffer sb = new StringBuffer(); sb.append("["); for(String param : token.getUmParams()[varSize].split(",")){ param = StringUtils.replace(param.trim(), "@", ""); if (token.getInoutParams().contains(param)) { sb.append(":p_"); prefix = ":p_"; }else { sb.append(":v_"); prefix = ":v_"; } sb.append(param); sb.append("='||"); sb.append(prefix + param); sb.append("||'"); } //'��ѯ�û���������ʧ��[p_operator_no='||p_operator_no||',v_limit_type='||v_limit_type||']', 1, 500); String param1 = sb.substring(0, sb.length() -1); param1 = param1 + "']"; if (index<=token.getUmParams().length && StringUtils.indexOf(token.getUmParams()[index-1], param1) > -1) { content = content.substring(0, StringUtils.indexOf(content, "<SP>")) + content.substring(StringUtils.indexOf(content, "<SP>")+4, content.length()); return content; } if(index<=token.getUmParams().length){ token.getUmParams()[index-1] = "'" + token.getUmParams()[index-1]+param1 + "'"; }else{ throw new RuntimeException("�Զ���꣺["+token.getItem().getName()+"] ,������Ϣ��ƥ��!"); } }else {//���α��������������û��������ƥ�� token.getUmParams()[index-1] = "'" + token.getUmParams()[index-1] + "'"; } content = content.substring(0, StringUtils.indexOf(content, "<SP>")) + content.substring(StringUtils.indexOf(content, "<SP>")+4, content.length()); }else {//����PROC������ if(paramsSize > varSize){ StringBuffer sb = new StringBuffer(); StringBuffer sb1 = new StringBuffer(); sb.append("["); for(String param : token.getUmParams()[varSize].split(",")){ param = StringUtils.replace(param.trim(), "@", ""); sb1.append(prefix + param); sb.append(param); sb.append("="); if (token.getBusinessType() != null) { sb.append(UserMacroUtil.getDataType(token.getProject() , token.getBusinessType(), param)); }else { sb.append("%s"); } sb.append(","); sb1.append(","); } String param1 = sb.substring(0, sb.length() -1); String param2 = sb1.substring(0, sb1.length() -1); param1 = param1 + "]"; if (index<=token.getUmParams().length && StringUtils.indexOf(token.getUmParams()[index-1], param1) > -1) { content = content.substring(0, StringUtils.indexOf(content, "<SP>")) + content.substring(StringUtils.indexOf(content, "<SP>")+4, content.length()); return content; } token.getUmParams()[index-1] = "\"" + token.getUmParams()[index-1]+param1 + "\","+param2; content = content.substring(0, StringUtils.indexOf(content, "<SP>")) + content.substring(StringUtils.indexOf(content, "<SP>")+4, content.length()); }else{ if(index<=token.getUmParams().length){ if (!StringUtils.startsWith(token.getUmParams()[index-1], "\"%s\",\"")) { token.getUmParams()[index-1] = "\"%s\",\"" + token.getUmParams()[index-1] + "\""; } }else{ throw new RuntimeException("�Զ���꣺["+token.getItem().getName()+"] ,������Ϣ��ƥ��!"); } content = content.substring(0, StringUtils.indexOf(content, "<SP>")) + content.substring(StringUtils.indexOf(content, "<SP>")+4, content.length()); } } return content; } }