kettle Modified Java Script Value获取变量

public class PramaryBean {
	private String praName;
	private String reName;
	private int valueType;
	private String valueTypeCN;
	private int length;
	private int precision;
	private boolean replaceable;
}
public static List<PramaryBean> getValues(String javascript){
		List<PramaryBean> plist = new ArrayList<PramaryBean>();
		
		Context jscx;
	    Scriptable jsscope;

	    // Making Refresh to get Active Script State
	    String scr = javascript;
	    jscx = ContextFactory.getGlobal().enterContext();
	    jscx.setOptimizationLevel( -1 );
	    jsscope = jscx.initStandardObjects( null, false );
		ScriptOrFnNode tree = parseVariables( jscx, jsscope, scr, "script", 1, null );
		
		for ( int i = 0; i < tree.getParamAndVarCount(); i++ ) {
            String varname = tree.getParamOrVarName( i );
            if ( !varname.equalsIgnoreCase( "row" ) && !varname.equalsIgnoreCase( "trans_Status" ) ) {
              int type = ValueMetaInterface.TYPE_STRING;
              int length = -1, precision = -1;
              Object result = jsscope.get( varname, jsscope );
              if ( result != null ) {
                String classname = result.getClass().getName();
                if ( classname.equalsIgnoreCase( "java.lang.Byte" ) ) {
                  // MAX = 127
                  type = ValueMetaInterface.TYPE_INTEGER;
                  length = 3;
                  precision = 0;
                } else if ( classname.equalsIgnoreCase( "java.lang.Integer" ) ) {
                  // MAX = 2147483647
                  type = ValueMetaInterface.TYPE_INTEGER;
                  length = 9;
                  precision = 0;
                } else if ( classname.equalsIgnoreCase( "java.lang.Long" ) ) {
                  // MAX = 9223372036854775807
                  type = ValueMetaInterface.TYPE_INTEGER;
                  length = 18;
                  precision = 0;
                } else if ( classname.equalsIgnoreCase( "java.lang.Double" ) ) {
                  type = ValueMetaInterface.TYPE_NUMBER;
                  length = 16;
                  precision = 2;

                } else if ( classname.equalsIgnoreCase( "org.mozilla.javascript.NativeDate" )
                  || classname.equalsIgnoreCase( "java.util.Date" ) ) {
                  type = ValueMetaInterface.TYPE_DATE;
                } else if ( classname.equalsIgnoreCase( "java.lang.Boolean" ) ) {
                  type = ValueMetaInterface.TYPE_BOOLEAN;
                }
              }
              PramaryBean p = new PramaryBean();
              p.setPraName(varname);
              p.setReName(varname);
              p.setValueType(type);
              p.setValueTypeCN(ValueMeta.getTypeDesc( type ));
              p.setLength(length);
              p.setPrecision(precision);
              p.setReplaceable(false);
              plist.add(p);
              System.out.println("1:" + varname);
              System.out.println("2:" + "");
              System.out.println("3:" + type);
              System.out.println("3:" + ValueMeta.getTypeDesc( type ));
              System.out.println("4:" + (length >= 0 ? ( "" + length ) : "") );
              System.out.println("5:" + (precision >= 0 ? ( "" + precision ) : "") );
            }
          }
		return plist;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值