Revision 45739 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/typeconversion/ToStrFunction.java

View differences:

ToStrFunction.java
1 1
package org.gvsig.expressionevaluator.impl.function.typeconversion;
2 2

  
3
import java.util.Iterator;
4
import java.util.List;
5
import java.util.logging.Level;
6
import java.util.logging.Logger;
3 7
import org.apache.commons.lang3.Range;
8
import org.apache.commons.lang3.StringUtils;
4 9
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TOSTR;
5 10
import org.gvsig.expressionevaluator.Interpreter;
6 11
import org.gvsig.expressionevaluator.spi.AbstractFunction;
7 12
import org.gvsig.tools.ToolsLocator;
8 13
import org.gvsig.tools.dataTypes.DataTypes;
9 14
import org.gvsig.tools.dataTypes.Coercion;
15
import org.gvsig.tools.dataTypes.CoercionException;
16
import org.gvsig.tools.util.GetItem;
17
import org.gvsig.tools.util.Size;
10 18

  
11 19
public class ToStrFunction extends AbstractFunction {
12 20

  
21
    @SuppressWarnings("OverridableMethodCallInConstructor")
13 22
    public ToStrFunction() {
14 23
        super(GROUP_CONVERSION, FUNCTION_TOSTR, Range.is(1));
15 24
        this.addAlias("STR");
......
23 32
    
24 33
    @Override
25 34
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
35
        Object obj = this.getObject(args, 0);
36
        StringBuilder builder = new StringBuilder(); 
37
        join(builder, obj, ", ");
38
        return builder.toString();
39
    }
40

  
41
    private void join(StringBuilder builder, Object obj, String separator) {
26 42
        Coercion toStr = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.STRING);
27
        Object value = toStr.coerce(this.getObject(args, 0));
28
        return value;
43
        if( obj instanceof Iterable ) {
44
            builder.append("[");
45
            join(builder, ((Iterable) obj).iterator(), separator);
46
            builder.append("]");
47
        } else if( obj instanceof GetItem && obj instanceof Size ) {
48
            Iterator it = new Iterator() {
49
                int i=0;
50
                
51
                @Override
52
                public boolean hasNext() {
53
                    return i<((Size)obj).size();
54
                }
55

  
56
                @Override
57
                public Object next() {
58
                    return ((GetItem)obj).get(i++);
59
                }
60
            };
61
            builder.append("[");
62
            join(builder, ((Iterable) obj).iterator(), separator);
63
            builder.append("]");
64
        } else {
65
            try {
66
                Object value = toStr.coerce(obj);
67
                builder.append(value);
68
            } catch (CoercionException ex) {
69
                builder.append(obj);
70
            }
71
        }
29 72
    }
30 73
    
74
    private void join(StringBuilder builder, Iterator it, String separator) {
75
        boolean needseparator = false;
76
        while( it.hasNext() ) {
77
            if( needseparator ) {
78
                builder.append(separator);
79
            } else {
80
                needseparator = true;
81
            }
82
            Object item = it.next();
83
            join(builder, item, separator);
84
        }
85
    }
31 86
}

Also available in: Unified diff