KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > calipso > reportgenerator > reportcalculator > DataSource


1 /*
2
3  */

4 package com.calipso.reportgenerator.reportcalculator;
5
6 import com.calipso.reportgenerator.common.LanguageTraslator;
7 import com.calipso.reportgenerator.common.InfoException;
8
9 import java.util.Collection JavaDoc;
10 import java.util.Vector JavaDoc;
11 import java.util.Iterator JavaDoc;
12
13
14 /**
15  * Almacena y permite modificar datos en una matriz de objetos de dos dimensiones.
16  * Sólo permite introducir valores fila a fila. No permite introducir filas de longitud
17  * variable.
18  * El nombre de las columnas tienen que ser objetos de tipo String y no pueden ser valores nulos
19  * El objeto DataSource se contruye a partir de un número de columnas o a partir de una collection de strings que
20  * identifica los nombres de cada columna.
21  *
22  */

23 public class DataSource implements IDataSource {
24
25     private Vector JavaDoc names;
26     private Vector JavaDoc rows;
27     private int columsCount = 0;
28     private final String JavaDoc COLUMNS_DEFAULT_NAME = "NONAME";
29
30
31     /**
32      * Inicializa el objeto matriz de dos dimensiones con el número de columnas indicado en el parámetro
33      * No se indica nombre para las columnas.
34      * @param columns - número de columnas
35      * @throws InfoException - Si el número de columnas es <= 0
36      */

37     public DataSource(int columns) throws InfoException {
38         if (columns <= 0) {
39             throw new InfoException("INFO - No se puede crear una matriz DataSource. " + columns + "<=0");
40         } else {
41             this.columsCount = columns;
42             this.names = this.generateVector(this.COLUMNS_DEFAULT_NAME,columns);
43             this.rows = new Vector JavaDoc(this.columsCount);
44         }
45     }
46
47     /**
48      * Inicializa el objeto matriz de dos dimensiones con el mismo número de columnas
49      * que el tamaño de la collection de nombres.
50      * El nombre de las columnas es el que se indica en el parámetro names manteniendo el orden.
51      * @param names - Nombres de las columnas
52      * @throws InfoException - Si la colección de nombre es nula, contiene elementos nulos o no contiene objetos de tipo String
53      */

54     public DataSource(Collection JavaDoc names) throws InfoException {
55         if (names == null) {
56             throw new InfoException("INFO - No se puede construir una matriz DataSource a partir de una colección de nombres nula");
57         } else if (this.namesEmpty(names)) {
58             throw new InfoException("INFO - No se puede construir una matriz DataSource a partir de un names vacío");
59         } else if (this.namesWithNullElements(names)) {
60             throw new InfoException("INFO - No se puede construir una matriz DataSource con elementos null en los nombres");
61         } else if (this.namesWithNoStringElements(names)) {
62             throw new InfoException("INFO - No se puede construir una matriz DataSource con nombres que no son de tipo String");
63         } else {
64             this.columsCount = names.size();
65             this.names = new Vector JavaDoc(names);
66             this.rows = new Vector JavaDoc(this.columsCount);
67         }
68
69     }
70
71     /**
72      * Devuelve el número de filas de esta matriz de objetos
73      * @return número de filas
74      */

75     public int getRowCount() {
76         return this.rows.size();
77     }
78
79     /**
80      * Devuelve el número de columnas de esta matriz de objetos
81      * @return número de columnas
82      */

83     public int getColumCount() {
84         return this.columsCount;
85     }
86
87     /**
88      * Devuelve el nombre de la columna
89      * @param colum - número de columna
90      * @return Nombre de la columna
91      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
92      */

93     public String JavaDoc getColumName(int colum) throws IndexOutOfBoundsException JavaDoc {
94         if (!this.validateColumNumber(colum)) {
95             throw new IndexOutOfBoundsException JavaDoc("INFO - La columna " + colum + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.columsCount-1) + "]");
96         } else {
97             return this.names.elementAt(colum).toString();
98         }
99     }
100
101     /**
102      * Asigna un nombre a una columna
103      * @param colum - número de columna
104      * @param name - nombre que se asigna a la columna
105      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
106      * @throws InfoException - Si el nombre que se desea asignar a la columna es null
107      */

108     public void setColumName(int colum, String JavaDoc name) throws IndexOutOfBoundsException JavaDoc, InfoException {
109         if (!this.validateColumNumber(colum)) {
110             throw new IndexOutOfBoundsException JavaDoc("INFO - La columna " + colum + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.columsCount-1) + "]");
111         } else if (name == null) {
112             throw new InfoException("INFO - Las columnas no permiten valores nulos");
113         } else {
114             this.names.setElementAt(name,colum);
115         }
116     }
117
118     /**
119      * Devuelve el objeto posicionado en la fila y columna especificada
120      * @param row - Número de fila
121      * @param colum - Número de columna
122      * @return Object posicionado en la fila row y columna colum
123      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
124      */

125     public Object JavaDoc getValueAt(int row, int colum) throws IndexOutOfBoundsException JavaDoc {
126         if (this.validateRowNumber(row) && this.validateColumNumber(colum)) {
127             return ((Vector JavaDoc)this.rows.elementAt(row)).elementAt(colum);
128         } else {
129             throw new IndexOutOfBoundsException JavaDoc("INFO - La fila " + row + " y la columna " + colum + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.getRowCount()-1) + "],[0.." + (this.columsCount-1) + "]");
130         }
131     }
132
133     /**
134      * Devuelve los objetos posicionados en la columna especificada
135      * @param colum - número de columna
136      * @return Collection con los objetos seleccionados
137      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
138      */

139     public Collection JavaDoc getColumValues(int colum) throws IndexOutOfBoundsException JavaDoc {
140         if (this.validateColumNumber(colum)) {
141             Vector JavaDoc data;
142             Vector JavaDoc values = new Vector JavaDoc();
143
144             for (int i = 0; i < this.rows.size(); i++) {
145                 data = (Vector JavaDoc)this.rows.elementAt(i);
146                 values.addElement(data.elementAt(colum));
147             }
148
149             return values;
150         } else {
151             throw new IndexOutOfBoundsException JavaDoc("INFO - La columna " + colum + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.columsCount-1) + "]");
152         }
153     }
154
155     /**
156      * Devuelve los objetos posicionados en la columna especificada
157      * @param row - número de fila
158      * @return Collection con los objetos seleccionados
159      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
160      */

161     public Collection JavaDoc getRowValues(int row) throws IndexOutOfBoundsException JavaDoc {
162         if (this.validateRowNumber(row)) {
163             return (Vector JavaDoc)this.rows.elementAt(row);
164         } else {
165             throw new IndexOutOfBoundsException JavaDoc("INFO - La fila " + row + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.getRowCount()-1) + "]");
166         }
167     }
168
169     /**
170      * Modifica el objeto posicionado en la coordenada solicitada
171      * @param row - número de fila
172      * @param colum - número de columna
173      * @param newValue - nuevo valor a posicionar en la coordenada solicitada
174      * @throws IndexOutOfBoundsException - Si la posición solicitada no se encuadra en las dimensiones de la matriz
175      */

176     public void updateValueAt(int row, int colum, Object JavaDoc newValue) throws IndexOutOfBoundsException JavaDoc {
177         if (this.validateRowNumber(row) && this.validateColumNumber(colum)) {
178             ((Vector JavaDoc)this.rows.elementAt(row)).setElementAt(newValue,colum);
179         } else {
180             throw new IndexOutOfBoundsException JavaDoc("INFO - La fila " + row + " y la columna " + colum + " esta fuera de las coordenadas de este DataSource. Rango permitido [0.." + (this.getRowCount()-1) + "],[0.." + (this.columsCount-1) + "]");
181         }
182     }
183
184     /**
185      * Añade una nueva fila a la matriz
186      * @param row - Fila a insertar
187      * @throws InfoException - Si la fila que se desea introducir no tiene el mismo número de columnas que la matriz
188      */

189     public void addRow(Collection JavaDoc row) throws InfoException {
190         if (row == null) {
191             throw new InfoException(LanguageTraslator.traslate("380"));
192         } else if (row.size() != this.columsCount) {
193             throw new InfoException(LanguageTraslator.traslate("381") + this.columsCount + LanguageTraslator.traslate("382") + row.size());
194         } else {
195             this.rows.addElement(new Vector JavaDoc(row));
196         }
197     }
198
199     /**
200      * Genera un vector de tamaño elements con elementos value
201      * @param value - Valor que se quiere replicar en el vector
202      * @param elements - número de elementos que se desea que tenga el vector
203      * @return Vector de tamañan elements con valores value
204      */

205     private Vector JavaDoc generateVector(Object JavaDoc value, int elements) {
206         Vector JavaDoc vector = new Vector JavaDoc();
207
208         for (int i=0; i<elements; i++) {
209             vector.addElement(value);
210         }
211         return vector;
212     }
213
214     /**
215      * Valida que el número de columna esté en el rango permitido.
216      * El rango deberá estar comprendido entre [1..n]
217      * @param number - número de columna
218      * @return true si el número de columna es válido. False en caso contrario
219      */

220     private boolean validateColumNumber(int number) {
221         if ( (number < 0) || (number >= this.columsCount) ){
222             return false;
223         } else {
224             return true;
225         }
226     }
227
228     /**
229      * Valida que el número de fila esté en el rango permitido.
230      * El rango deberá estar comprendido entre [1..n]
231      * @param number - número de fila
232      * @return true si el número de fila es válido. False en caso contrario
233      */

234     private boolean validateRowNumber(int number) {
235         if ( (number < 0) || (number >= this.rows.size()) ){
236             return false;
237         } else {
238             return true;
239         }
240     }
241
242     /**
243      * Valida que la collection no sea vacía
244      * @param coll - Collection a evaluar
245      * @return true si es vacia, false en caso contrario
246      */

247     private boolean namesEmpty(Collection JavaDoc coll) {
248         return coll.isEmpty();
249     }
250
251     /**
252      * Valida que la collection de nombres no contiene elementos nulos.
253      * @param coll - Collection a evaluar
254      * @return true si contiene elementos nulos, false en caso contrario.
255      */

256     private boolean namesWithNullElements(Collection JavaDoc coll) {
257         boolean withNulls = false;
258
259         Iterator JavaDoc it = coll.iterator();
260
261         while ((it.hasNext())&&(!withNulls)) {
262             if (it.next() == null) {
263                 withNulls = true;
264             }
265         }
266         return withNulls;
267     }
268
269
270     /**
271      * Valida que la collection tenga elementos de tipo String.
272      * @param coll - Collection a evaluar
273      * @return true si la collection contiene objetos que no sean de tipo String, false si todos son de tipo String
274      */

275     private boolean namesWithNoStringElements(Collection JavaDoc coll) {
276         boolean withNoStringElements = false;
277
278         Iterator JavaDoc it = coll.iterator();
279
280         while ((it.hasNext())&&(!withNoStringElements)) {
281             if (!( it.next() instanceof String JavaDoc )) {
282                 withNoStringElements = true;
283             }
284         }
285         return withNoStringElements;
286     }
287
288 }
289
Popular Tags