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 {
|