Revision 47734 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/CaseFunction.java
CaseFunction.java | ||
---|---|---|
6 | 6 |
import org.gvsig.expressionevaluator.Formatter; |
7 | 7 |
import org.gvsig.expressionevaluator.Function; |
8 | 8 |
import org.gvsig.expressionevaluator.Interpreter; |
9 |
import org.gvsig.expressionevaluator.PrettyFormatter; |
|
9 | 10 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
10 | 11 |
import org.gvsig.tools.ToolsLocator; |
11 | 12 |
import org.gvsig.tools.dataTypes.DataTypes; |
... | ... | |
84 | 85 |
|
85 | 86 |
@Override |
86 | 87 |
public String toString(Codes args, Formatter<Code> formatter) { |
87 |
StringBuilder builder = new StringBuilder(); |
|
88 | 88 |
|
89 |
int count;
|
|
90 |
int firstValue;
|
|
91 |
int elseValue;
|
|
89 |
PrettyFormatter builder = PrettyFormatter.get(formatter);
|
|
90 |
try {
|
|
91 |
builder.push();
|
|
92 | 92 |
|
93 |
if( (args.size() % 2) == 0) { |
|
94 |
count = args.size() / 2; |
|
95 |
firstValue = count; |
|
96 |
elseValue = -1; |
|
97 |
} else { |
|
98 |
count = (args.size()-1) / 2; |
|
99 |
firstValue = count; |
|
100 |
elseValue = args.size()-1; |
|
101 |
} |
|
93 |
int count; |
|
94 |
int firstValue; |
|
95 |
int elseValue; |
|
96 |
Code codeElse = null; |
|
102 | 97 |
|
103 |
Object value = null; |
|
104 |
builder.append("CASE"); |
|
105 |
for( int n=0; n<count; n++ ) { |
|
106 |
builder.append(" WHEN "); |
|
107 |
builder.append(args.get(n).toString(formatter)); |
|
108 |
builder.append(" THEN "); |
|
109 |
builder.append(args.get(n+firstValue).toString(formatter)); |
|
98 |
if( (args.size() % 2) == 0) { |
|
99 |
count = args.size() / 2; |
|
100 |
firstValue = count; |
|
101 |
elseValue = -1; |
|
102 |
} else { |
|
103 |
count = (args.size()-1) / 2; |
|
104 |
firstValue = count; |
|
105 |
elseValue = args.size()-1; |
|
106 |
codeElse = (elseValue>0)? args.get(elseValue):null; |
|
107 |
} |
|
108 |
|
|
109 |
builder.append("CASE "); |
|
110 |
builder.indent(); |
|
111 |
for( int n=0; n<count; n++ ) { |
|
112 |
builder.nl(); |
|
113 |
builder.append("WHEN "); |
|
114 |
builder.append(args.get(n).toString(formatter)); |
|
115 |
builder.append(" THEN "); |
|
116 |
builder.indent(); |
|
117 |
builder.nl(); |
|
118 |
Code codeBody = args.get(n+firstValue); |
|
119 |
if( Code.isFunction(codeBody,"BLOCK") ) { |
|
120 |
Code.Callable block = (Code.Callable)codeBody; |
|
121 |
for (Code parameter : block.parameters()) { |
|
122 |
builder.nl(); |
|
123 |
builder.append(parameter.toString(formatter)); |
|
124 |
builder.append("; "); |
|
125 |
} |
|
126 |
} else { |
|
127 |
builder.nl(); |
|
128 |
builder.append(codeBody.toString(formatter)); |
|
129 |
builder.append("; "); |
|
130 |
} |
|
131 |
builder.unindent(); |
|
132 |
} |
|
133 |
if( codeElse!=null) { |
|
134 |
builder.nl(); |
|
135 |
builder.append("ELSE "); |
|
136 |
builder.indent(); |
|
137 |
builder.nl(); |
|
138 |
if( Code.isFunction(codeElse,"BLOCK") ) { |
|
139 |
Code.Callable block = (Code.Callable)codeElse; |
|
140 |
for (Code parameter : block.parameters()) { |
|
141 |
builder.nl(); |
|
142 |
builder.append(parameter.toString(formatter)); |
|
143 |
builder.append("; "); |
|
144 |
} |
|
145 |
} else { |
|
146 |
builder.nl(); |
|
147 |
builder.append(codeElse.toString(formatter)); |
|
148 |
builder.append("; "); |
|
149 |
} |
|
150 |
builder.unindent(); |
|
151 |
} |
|
152 |
builder.unindent(); |
|
153 |
builder.nl(); |
|
154 |
builder.append("END"); |
|
155 |
|
|
156 |
return builder.build(); |
|
157 |
} finally { |
|
158 |
builder.pop(); |
|
110 | 159 |
} |
111 |
if( elseValue>0 && args.get(elseValue)!=null) { |
|
112 |
builder.append(" ELSE "); |
|
113 |
builder.append(args.get(elseValue).toString(formatter)); |
|
114 |
} |
|
115 |
builder.append(" END"); |
|
116 |
return builder.toString(); |
|
117 |
|
|
118 | 160 |
} |
119 | 161 |
} |
Also available in: Unified diff