View Javadoc

1   package uba.db.sql.language;
2   
3   import java.util.ArrayList;
4   import java.util.Collections;
5   import java.util.Iterator;
6   import java.util.List;
7   
8   import org.apache.commons.lang.builder.EqualsBuilder;
9   import org.apache.commons.lang.builder.HashCodeBuilder;
10  
11  /***
12   * @version $Revision: 1.5 $
13   */
14  public class DisplayMultipleColumns implements DisplayColumns {
15      private List columns;
16  
17      /***
18       * Crea una nueva instancia compuesta de solo dos columnas.
19       * 
20       * @param column
21       *            una columna individual.
22       * @param otherColumn
23       *            otra columna individual.
24       */
25      public DisplayMultipleColumns(DisplayColumns column, DisplayColumns otherColumn) {
26          columns = new ArrayList();
27          columns.add(column);
28          columns.add(otherColumn);
29      }
30  
31      /***
32       * Crea una instancia compuesta de una lista de columnas.
33       * 
34       * @param columns
35       *            una lista de {@link DisplayColumns}
36       */
37      public DisplayMultipleColumns(List columns) {
38          this.columns = columns;
39      }
40  
41      /***
42       * @see uba.db.sql.language.DisplayColumns#append(uba.db.sql.language.DisplayColumns)
43       */
44      public DisplayColumns append(DisplayColumns other) {
45          return other.appendTo(this);
46      }
47  
48      private DisplayColumns appendAfter(DisplayColumns oneColumn) {
49          List newDisplayColumns = new ArrayList();
50          newDisplayColumns.add(oneColumn);
51          newDisplayColumns.addAll(columns);
52          return new DisplayMultipleColumns(newDisplayColumns);
53      }
54  
55      /***
56       * Agrega una instancia de {@link DisplayColumns} como si fuese una sola
57       * columna luego de las columnas que contiene esta clase.
58       * 
59       * @param column
60       *            la columna a agregar.
61       * 
62       * @return una nueva instancia de {@link DisplayMultipleColumns} con las
63       *         columnas que contiene esta instancia y la columna agregada.
64       */
65      public DisplayColumns appendAsOne(DisplayColumns column) {
66          List newDisplayColumns = new ArrayList(columns);
67          newDisplayColumns.add(column);
68  
69          return new DisplayMultipleColumns(newDisplayColumns);
70      }
71  
72      /***
73       * @see uba.db.sql.language.DisplayColumns#appendTo(uba.db.sql.language.DisplayAllColumns)
74       */
75      public DisplayColumns appendTo(DisplayAllColumns allColumns) {
76          return appendAfter(allColumns);
77      }
78  
79      /***
80       * @see uba.db.sql.language.DisplayColumns#appendTo(uba.db.sql.language.DisplayMultipleColumns)
81       */
82      public DisplayColumns appendTo(DisplayMultipleColumns otherDisplayMultipleColumns) {
83          List newDisplayColumns = new ArrayList(otherDisplayMultipleColumns.columns);
84          newDisplayColumns.addAll(this.columns);
85  
86          return new DisplayMultipleColumns(newDisplayColumns);
87      }
88  
89      /***
90       * @see uba.db.sql.language.DisplayColumns#appendTo(uba.db.sql.language.DisplayOneColumn)
91       */
92      public DisplayColumns appendTo(DisplayOneColumn oneColumn) {
93          return appendAfter(oneColumn);
94      }
95  
96      /***
97       * @see java.lang.Object#equals(java.lang.Object)
98       */
99      public boolean equals(Object obj) {
100         return EqualsBuilder.reflectionEquals(this, obj);
101     }
102 
103     /***
104      * @see java.lang.Object#hashCode()
105      */
106     public int hashCode() {
107         return HashCodeBuilder.reflectionHashCode(this);
108     }
109 
110     /***
111      * @see java.lang.Object#toString()
112      */
113     public String toString() {
114         StringBuffer buffer = new StringBuffer();
115         Iterator iterator = columns.iterator();
116         while (iterator.hasNext()) {
117             buffer.append(iterator.next());
118             if (iterator.hasNext()) {
119                 buffer.append(", ");
120             }
121         }
122 
123         return buffer.toString();
124     }
125 
126     /***
127      * @see uba.db.sql.language.Visitable#accept(uba.db.sql.language.Visitor)
128      */
129     public void accept(Visitor visitor) {
130         visitor.visitDisplayMultipleColumns(this);
131     }
132 
133     /***
134      * Retorna todos las instancias de {@link DisplayColumns} contenidas.
135      */
136     public List columns() {
137         return Collections.unmodifiableList(columns);
138     }
139 }