01: package com.calipso.reportgenerator.reportcalculator;
02:
03: import com.calipso.reportgenerator.reportcalculator.expression.Expression;
04: import com.calipso.reportgenerator.reportcalculator.expression.Context;
05: import com.calipso.reportgenerator.reportcalculator.expression.RowContext;
06: import com.calipso.reportgenerator.reportcalculator.CubeFilter;
07:
08: import java.util.Map;
09:
10: /**
11: * Filtro basado en una expresión booleana
12: * @see com.calipso.reportgenerator.reportcalculator.expression.Expression
13: */
14: public class ExpressionCubeFilter extends CubeFilter {
15: Expression expresion;
16: private Map paramValues;
17:
18: public Map getParamValues() {
19: return paramValues;
20: }
21:
22: /**
23: * Crea un nuevo filtro a partir de una expresión
24: * @param expresion
25: */
26: public ExpressionCubeFilter(Expression expresion, Map paramValues) {
27: this .paramValues = paramValues;
28: this .expresion = expresion;
29: }
30:
31: /**
32: * Crea un contexto de evaluación a partir de un row
33: * @param row
34: * @return
35: */
36: private Context getContext(Object[] row) {
37: return new RowContext(row);
38: }
39:
40: /**
41: * Devuelve el texto de la condición Oql de la expresión
42: * @return
43: */
44: public String getOqlText() {
45: return expresion.toString();
46: }
47:
48: /**
49: * Evalúa el filtro para una row
50: * @param row
51: * @return
52: */
53: public boolean matches(Object[] row) {
54: if (expresion != null) {
55: return expresion.valueIn(getContext(row));
56: } else {
57: return true;
58: }
59: }
60:
61: /**
62: * Devuelve la representación en texto del filtro
63: * @return
64: */
65: public String toString() {
66: if (expresion != null) {
67: return expresion.toString();
68: } else {
69: return "";
70: }
71: }
72:
73: public boolean equals(Object obj) {
74: if (super .equals(obj))
75: return true;
76: if (obj instanceof ExpressionCubeFilter
77: && ((ExpressionCubeFilter) obj).expresion != null) {
78: return expresion
79: .equals(((ExpressionCubeFilter) obj).expresion);
80: }
81: return false;
82: }
83:
84: }
|