Revision 47698 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
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