<?xml version="1.0" encoding="UTF-8"?>
<a:service xmlns:s="leaf.plugin.script" xmlns:a="http://www.leaf-framework.org/application" xmlns:p="uncertain.proc" trace="true">
    <a:init-procedure>
        <s:server-script><![CDATA[
            var para = $ctx.current_parameter || $ctx.parameter;
            var validation_sql;
            if (para.url) {
                var url = decodeURIComponent(para.url);
                var matches = url.match(/validation_sql=([^&]*)&?(.*$)/);
                validation_sql = matches[1];
                var para_list = {};
                if (matches[2]) {
                    var paras = matches[2].split('&');
                    for (var i = 0;i < paras.length;i++) {
                        var p = paras[i].split('=');
                        para_list[p[0]] = p[1];
                    }
                }
                validation_sql = validation_sql.replace(/\$\{@([^\}]*)\}/g, function(a, b) {
                    return "'" + (para_list[b] || '') + "'";
                });
            } else if (para.validation_sql) {
                validation_sql = para.validation_sql;
                validation_sql = validation_sql.replace(/\$\{@([^\}]*)\}/g, function(a, b) {
                    return "'" + (para[b] || '') + "'";
                });
            }
            validation_sql = validation_sql.replace(/\$\{\/session\/@([^\}]*)\}/g, function(a, b) {
                return "'" + $ctx.session[b] + "'";
            });
            var dsf = $instance('leaf.database.service.IDatabaseServiceFactory');
            var conn = dsf.getDataSource().getConnection();
            var stmt = conn.createStatement();
            var rs = stmt.executeQuery(validation_sql);
            var rsmd = rs.getMetaData();
            var count = rsmd.getColumnCount();
            for (var i = 1;i <= count;i++) {
                var fname = rsmd.getColumnName(i);
                var r = para.createChild("record");
                r.name = String(fname);
            }
            stmt.close();
            conn.close();
        ]]></s:server-script>
    </a:init-procedure>
    <a:service-output output="/parameter"/>
</a:service>