View Javadoc

1   package uba.db.sql.language;
2   
3   import java.util.List;
4   
5   import org.apache.commons.collections.ClosureUtils;
6   import org.apache.commons.collections.CollectionUtils;
7   
8   /***
9    * Clase abstracta utilizada como base para crear "visitors" de sentencias SQL.
10   * 
11   * @version $Revision: 1.10 $
12   */
13  public abstract class VisitorBehavior implements Visitor {
14      /***
15       * Esta implementación por default visita cada una de las partes del
16       * criterio de selección.
17       * 
18       * @param criteria
19       *            criterio de seleccion a visitar.
20       */
21      public void visitAndSelectionCriteria(AndSelectionCriteria criteria) {
22          visitBinarySelectionCriteria(criteria);
23      }
24  
25      /***
26       * @see uba.db.sql.language.Visitor#visitColumnName(uba.db.sql.language.ColumnName)
27       */
28      public void visitColumnName(ColumnName columnName) {}
29  
30      /***
31       * @see uba.db.sql.language.Visitor#visitCreateTable(uba.db.sql.language.CreateTable)
32       */
33      public void visitCreateTable(CreateTable table) {
34          table.tableName().accept(this);
35          invokeAcceptForAll(table.columnDeclarations());
36          invokeAcceptForAll(table.primaryKeyColumns());
37      }
38  
39      public void visitCreateIndex(CreateIndex index) {
40          index.name().accept(this);
41          index.column().accept(this);
42      }
43  
44      public void visitDisplayAllColumns(DisplayAllColumns columns) {}
45  
46      /***
47       * Esta implementación por default visita cada una de las columnas.
48       * 
49       * @param columns
50       *            columnas a visitar
51       */
52      public void visitDisplayMultipleColumns(DisplayMultipleColumns columns) {
53          invokeAcceptForAll(columns.columns());
54      }
55  
56      public void visitDisplayOneColumn(DisplayOneColumn column) {
57          column.expression().accept(this);
58      }
59  
60      public void visitEqualComparison(EqualComparison comparison) {
61          visitComparison(comparison);
62      }
63  
64      public void visitGreatherThanComparison(GreatherThanComparison comparison) {
65          visitComparison(comparison);
66      }
67  
68      public void visitGreatherThanEqualsComparison(GreatherThanEqualsComparison comparison) {
69          visitComparison(comparison);
70      }
71  
72      public void visitInSelectionCriteria(InSelectionCriteria criteria) {
73          criteria.valueToFind().accept(this);
74          criteria.valueList().accept(this);
75      }
76  
77      /***
78       * @see uba.db.sql.language.Visitor#visitInsert(uba.db.sql.language.Insert)
79       */
80      public void visitInsert(Insert insert) {
81          insert.tableName().accept(this);
82          insert.values().accept(this);
83      }
84  
85      public void visitIntegerValue(IntegerValue value) {}
86  
87      public void visitJoin(Join join) {
88          join.left().accept(this);
89          join.right().accept(this);
90      }
91  
92      public void visitLessThanComparison(LessThanComparison comparison) {
93          visitComparison(comparison);
94      }
95  
96      public void visitLessThanEqualsComparison(LessThanEqualsComparison comparison) {
97          visitComparison(comparison);
98      }
99  
100     /***
101      * @see uba.db.sql.language.Visitor#visitNegatedSelectionCriteria(uba.db.sql.language.NegatedSelectionCriteria)
102      */
103     public void visitNegatedSelectionCriteria(NegatedSelectionCriteria criteria) {}
104 
105     public void visitNotInSelectionCriteria(NotInSelectionCriteria criteria) {}
106 
107     /***
108      * Esta implementación por default visita cada una de las partes del
109      * criterio de selección.
110      * 
111      * @param criteria
112      *            criterio de seleccion a visitar.
113      */
114     public void visitOrSelectionCriteria(OrSelectionCriteria criteria) {
115         criteria.left().accept(this);
116         criteria.right().accept(this);
117     }
118 
119     /***
120      * @see uba.db.sql.language.Visitor#visitQualifiedColumnName(uba.db.sql.language.QualifiedColumnName)
121      */
122     public void visitQualifiedColumnName(QualifiedColumnName name) {}
123 
124     /***
125      * Esta implementación por default visita cada una de las partes que
126      * conforman el SELECT.
127      * 
128      * @param select
129      *            el select a visitar
130      */
131     public void visitSelect(Select select) {
132         select.displayColumns().accept(this);
133         select.source().accept(this);
134         select.criteria().accept(this);
135     }
136 
137     public void visitSingleSelectionCriteria(SingleSelectionCriteria criteria) {
138         criteria.expression().accept(this);
139     }
140 
141     public void visitStringValue(StringValue value) {}
142 
143     /***
144      * @see uba.db.sql.language.Visitor#visitTableName(uba.db.sql.language.TableName)
145      */
146     public void visitTableName(TableName name) {}
147 
148     public void visitTableSelectionSource(TableSelectionSource source) {
149         source.tableName().accept(this);
150     }
151 
152     public void visitCharColumnDeclaration(CharColumnDeclaration declaration) {}
153 
154     public void visitIntegerColumnDeclaration(IntegerColumnDeclaration declaration) {}
155 
156     public void visitValueEnumeration(ValueEnumeration enumeration) {
157         invokeAcceptForAll(enumeration.values());
158     }
159 
160     private void invokeAcceptForAll(List objs) {
161         CollectionUtils.forAllDo(objs, ClosureUtils
162                 .invokerClosure("accept",
163                                 new Class[] { Visitor.class },
164                                 new Object[] { this }));
165     }
166 
167     private void visitBinarySelectionCriteria(BinarySelectionCriteriaBehavior criteria) {
168         criteria.left().accept(this);
169         criteria.right().accept(this);
170     }
171 
172     private void visitComparison(ComparisonBehavior comparison) {
173         comparison.left().accept(this);
174         comparison.right().accept(this);
175     }
176 
177     public void visitIndexName(IndexName index) {}
178 }