View Javadoc

1   package uba.db.sql.language;
2   
3   /***
4    * Clase base para simplificar la creación de objetos que representen
5    * expresiones boleanas binarias.
6    * 
7    * @version $Revision: 1.3 $
8    */
9   public abstract class ComparisonBehavior implements BooleanValue {
10      private SingleValue left;
11      private SingleValue right;
12  
13      /***
14       * Crea una operacion booleana de dos terminos.
15       * 
16       * @param left
17       *            termino izquierdo.
18       * @param right
19       *            termino derecho.
20       */
21      public ComparisonBehavior(SingleValue left, SingleValue right) {
22          this.left = left;
23          this.right = right;
24      }
25  
26      /***
27       * @see java.lang.Object#toString()
28       */
29      public String toString() {
30          return left + operatorAsString() + right;
31      }
32  
33      /***
34       * Las subclases deben implementar este método retornando la representacion
35       * en String del operador que representan.
36       */
37      protected abstract String operatorAsString();
38  
39      /***
40       * Evalua la condición usando el método
41       * {@link BooleanValue#isTrueWith(EvaluationContext)}, pero retorna una
42       * instancia de {@link Boolean} para ser compatible con la interfaz
43       * {@link SingleValue}.
44       * 
45       * @param context
46       *            contexto de evaluación.
47       * 
48       * @return una instancia de {@link Boolean} con el valor de verdad de
49       *         {@link BooleanValue#isTrueWith(EvaluationContext)}
50       */
51      public Object valueWith(EvaluationContext context) {
52          return new Boolean(isTrueWith(context));
53      }
54  
55      /***
56       * Esta implementación obtiene los valores de ambos terminos usando
57       * {@link SingleValue#valueWith(EvaluationContext)} y luego delega la
58       * comparación a {@link #compareValues(Comparable, Comparable)}.
59       * 
60       * @see BooleanValue#isTrueWith(EvaluationContext)
61       */
62      public boolean isTrueWith(EvaluationContext context) {
63          return compareValues((Comparable) left.valueWith(context), (Comparable) right
64                  .valueWith(context));
65      }
66  
67      /***
68       * Retorna el termino a la izquierda.
69       */
70      public SingleValue left() {
71          return left;
72      }
73  
74      /***
75       * Retorna el termino a la derecha.
76       */
77      public SingleValue right() {
78          return right;
79      }
80  
81      /***
82       * Las sub-clases deben implementar este método para comparar dos valores.
83       * 
84       * @see #isTrueWith(EvaluationContext)
85       * 
86       * @param leftValue
87       *            valor a la izquierda.
88       * @param rightValue
89       *            valor a la derecha
90       * 
91       * @return el resultado de la comparación
92       */
93      protected abstract boolean compareValues(Comparable leftValue, Comparable rightValue);
94  }