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

View differences:

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