Revision 47698

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/spi/AbstractSymbolTable.java
254 254
        if( this.getVars().isEmpty()) {
255 255
            return Collections.EMPTY_LIST;
256 256
        }
257
        return Collections.unmodifiableCollection(this.vars.keySet());
257
        return Collections.unmodifiableCollection(this.getVars().keySet());
258 258
    }
259 259

  
260 260
    @Override
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/CodeBlockWithExceptFunction.java
1 1
package org.gvsig.expressionevaluator.impl.function.programming;
2 2

  
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.Collections;
6
import java.util.List;
3 7
import java.util.Objects;
4 8
import org.apache.commons.lang3.Range;
9
import org.apache.commons.lang3.StringUtils;
5 10
import org.gvsig.expressionevaluator.Code;
6 11
import org.gvsig.expressionevaluator.Codes;
7 12
import org.gvsig.expressionevaluator.Formatter;
......
86 91
                    SymbolTable symbolTable = interpreter.getSymbolTable();
87 92
                    if( symbolTable instanceof MutableSymbolTable ) {
88 93
                        ((MutableSymbolTable) symbolTable).setVar("@ErrorMessage", ex.getMessage());
94
                        ((MutableSymbolTable) symbolTable).setVar("@ErrorStatement", getErrorStatement(statement));
95
                        ((MutableSymbolTable) symbolTable).setVar("@ErrorContext", this.getErrorContext(symbolTable));
89 96
                    }
90 97
                    value = ((DefaultInterpreter)interpreter).runCode(exceptionCode);
91 98
                }
......
93 100
        }
94 101
        return value;
95 102
    }
103
    
104
    private String getErrorContext(SymbolTable symbolTable) {
105
        try {
106
            StringBuilder builder = new StringBuilder();
107
            List<String> names = new ArrayList<>(symbolTable.variables());
108
            Collections.sort(names);
109
            for (String name : names) {
110
                if( StringUtils.equalsIgnoreCase("@ErrorContext", name) ) {
111
                    continue;
112
                }
113
                String value = "##ERROR##";
114
                try {
115
                    value = Objects.toString(symbolTable.value(name));
116
                } catch(Throwable t) {
117
                    LOGGER.debug("Can't retrieve value for '"+name+"'.",t);
118
                }
119
                builder.append(name);
120
                builder.append("=");
121
                builder.append(value);
122
                builder.append(";\n");
123
            }
124
            return builder.toString();
125
        } catch(Throwable t) {
126
            return "##ERROR##";
127
        }
128
    }
129
    
130
    private String getErrorStatement(Code statement) {
131
        try { 
132
            return statement.toString(); 
133
        } catch(Throwable t) { 
134
            return "Unknown";
135
        }
136
    }
96 137

  
97 138
    private String code2string(Code code) {
98 139
        try {

Also available in: Unified diff