Statistics
| Revision:

svn-gvsig-desktop / 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 / DictFunction.java @ 45025

History | View | Annotate | Download (2.05 KB)

1
package org.gvsig.expressionevaluator.impl.function.programming;
2

    
3
import java.util.HashMap;
4
import java.util.Map;
5
import org.apache.commons.lang3.Range;
6
import org.gvsig.expressionevaluator.Code;
7
import org.gvsig.expressionevaluator.Codes;
8
import org.gvsig.expressionevaluator.Function;
9
import org.gvsig.expressionevaluator.Interpreter;
10
import org.gvsig.expressionevaluator.spi.AbstractFunction;
11
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DICT;
12
import org.gvsig.expressionevaluator.Formatter;
13

    
14
public class DictFunction extends AbstractFunction {
15
    
16
    public DictFunction() {
17
        super(Function.GROUP_PROGRAMMING, 
18
                FUNCTION_DICT, 
19
                Range.between(0, Integer.MAX_VALUE),
20
                null,
21
                FUNCTION_DICT+"( {{identifier1}} = value1, identifier2 = value2, ...)",
22
                null,
23
                "Map",
24
                false
25
        );
26
    }
27

    
28
    @Override
29
    public boolean allowConstantFolding() {
30
        return false;
31
    }
32
    
33
    @Override
34
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
35
      if( args.length==1 && args[0] instanceof Map) {
36
          return args[0];
37
      }
38
      Map<Object,Object> map = new HashMap<>();
39
      for (int i = 0; i < args.length; i+=2) {
40
        Object key = args[i];
41
        Object value = args[i+1];
42
        map.put(key, value);
43
      }
44
      return map;
45
    }
46

    
47
    @Override
48
    public String toString(Codes args, Formatter<Code> formatter) {
49
        StringBuilder builder = new StringBuilder();
50
        builder.append("{ ");
51
        boolean needcomma = false;
52
        for (int i = 0; i < args.size(); i+=2) {
53
          Code key = args.get(i);
54
          Code value = args.get(i+1);
55
          if( needcomma ) {
56
              builder.append(", ");
57
          } else {
58
              needcomma = true;
59
          }
60
          builder.append(key.toString(formatter));
61
          builder.append(":");
62
          builder.append(value.toString(formatter));
63
        }
64
        builder.append(" }");
65
        return builder.toString();
66
    }
67
    
68

    
69
}