Revision 44738 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/programming/CreateFnFunction.java

View differences:

CreateFnFunction.java
4 4
import java.util.ArrayList;
5 5
import java.util.Arrays;
6 6
import java.util.List;
7
import java.util.Objects;
8 7
import org.apache.commons.lang3.Range;
9 8
import org.apache.commons.lang3.StringUtils;
10 9
import org.gvsig.expressionevaluator.Code;
......
39 38
    }
40 39

  
41 40
    @Override
41
    public boolean isHidden() {
42
      return true;
43
    }
44
    
45
    @Override
42 46
    public boolean useArgumentsInsteadObjects() {
43 47
        return true;
44 48
    }
......
47 51
    public boolean allowConstantFolding() {
48 52
        return false;
49 53
    }
54

  
55
    @Override
56
    public boolean allowArgNames() {
57
      return true;
58
    }
50 59
    
51 60
    @Override
52 61
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
......
55 64
    
56 65
    @Override
57 66
    public Object call(Interpreter interpreter, Codes args) throws Exception {
58
        // FNAME, PARAM-NAMES, BODY
59 67
        if( !(interpreter.getSymbolTable() instanceof MutableSymbolTable) ) {
60 68
            throw new ExpressionRuntimeException("The use of user functions require a mutable symbol table.");
61 69
        }
62 70
        MutableSymbolTable symbolTable = (MutableSymbolTable) interpreter.getSymbolTable();
63 71
        
64
        String name;
65
        List<String> argNames;
66
        Code body = null;
67
        String script_path = null;
68
        String script_function = null;
69
        String language = null;
70
        // name, body
71
        // name, args, body
72
        // name, script_name, script_func, lang
73
        // name, args, script_name, script_func, lang
74
        switch(args.size()) {
75
            case 2:
76
                name = (String) getObject(interpreter, args, 0);
77
                argNames = null;
78
                body = args.get(1);
79
                break;
80
            case 3:
81
                name = (String) getObject(interpreter, args, 0);
82
                if( args.get(1)==null ) {
83
                    argNames = null;
84
                } else {
85
                    argNames = (List<String>) getObject(interpreter, args, 1);
86
                }
87
                body = args.get(2);
88
                break;
89
            case 6:
90
                name = (String) getObject(interpreter, args, 0);
91
                if( args.get(1)==null ) {
92
                    argNames = null;
93
                } else {
94
                    argNames = (List<String>) getObject(interpreter, args, 1);
95
                }
96
                body = args.get(2);
97
                script_path = (args.get(3)==null)? null:((String)((Code.Constant)args.get(3)).value());
98
                script_function = (args.get(4)==null)? null:((String)((Code.Constant)args.get(4)).value());
99
                language = (args.get(5)==null)? null:((String)((Code.Constant)args.get(5)).value()).toLowerCase();
100
                break;
101
            default:
102
                throw new ExpressionRuntimeException("Incorrect number of arguments");
103
        }
72
        String name = (String) getObject(interpreter, args, "FUNCTION_NAME");
73
        List<String> argNames = (List<String>) getObject(interpreter, args, "PARAMETERS");
74
        Code body = args.get("BODY");
75
        String script_path = (String) getObject(interpreter, args, "SCRIPT_PATH");
76
        String script_function = (String) getObject(interpreter, args, "SCRIPT_FUNCTION");
77
        String language = (String) getObject(interpreter, args, "LANGUAGE");
104 78
        Function fn;
105 79
        if( body!=null ) {
106 80
            fn = new UserFunction(name, argNames, body);
......
136 110
            this.argNames = argNames;
137 111
            this.body = body;
138 112
        }
139
        
113

  
140 114
        @Override
115
        public boolean allowArgNames() {
116
          return true;
117
        }
118

  
119
        @Override
141 120
        public Object call(Interpreter interpreter, Object[] args) throws Exception {
142 121
            Object value;
143 122
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();

Also available in: Unified diff