02 septiembre, 2007

JAFramework

.
Recorrer un Archivo Indexado

JAF permite indexar el contenido de un archivo de forma tal que podamos ver sus registros ordenados por alguno de sus campos.

LeeArchivoIndexado.java
   1:
2:package demo;
3:
4:import framework.JAFactory;
5:import framework.JAFile;
6:import framework.JAFileFactory;
7:import framework.JAIndex;
8:
9:public class LeeArchivoIndexado
10:{
11: public static void main(String[] args)
12: {
13: JAFileFactory factory=JAFactory.getFileFactory();
14:
15: // levanto el descriptor a memoria
16: factory.load("descriptor.xml");
17:
18: // obtengo un puntero al archivo EMPLEADOS.txt
19: JAFile a = factory.getFile("EMPLEADOS.txt");
20:
21: // creo un indice por el campo nombre
22: JAIndex idxNom = a.createIndexOn("nombre");
23:
24: // creo una instancia del bean Empleado
25: REmpleado e = new REmpleado();
26:
27: // leo el primer registro
28: boolean eof = idxNom.read(e);
29:
30: while( !eof )
31: {
32: System.out.println(e);
33:
34: // leo el proximo registro
35: eof = idxNom.read(e);
36: }
37:
38: // libero el indice
39: a.destroyIndex(idxNom);
40:
41: // cierro el archivo
42: a.close();
43: }
44:}
45:

Este ejemplo basicamente es igual al anterior solo que primero indexamos el archivo por el campo nombre (línea 22) y luego recorremos el índice. El resultado será que los registros se imprimirán ordenados por el campo nombre.

En la línea 39 cerramos (o liberamos) el índice antes de cerrar el archivo.


Múltiples Indices

El proceso de indexación implica una recorrida completa al archivo para crear el índice por el cual queremos verlo ordenado. Podemos aprovechar ese "costo" y crear en esa misma recorrida todos los índices que vayamos a utilizar en nuestro programa. Esto lo podemos ver en el siguiente ejemplo.

LeeMultiplesIndices.java
   1:
2:package demo;
3:
4:import framework.JAFactory;
5:import framework.JAFile;
6:import framework.JAFileFactory;
7:import framework.JAIndex;
8:
9:public class LeeMultiplesIndices
10:{
11: public static void main(String[] args)
12: {
13: JAFileFactory factory=JAFactory.getFileFactory();
14:
15: // levanto el descriptor a memoria
16: factory.load("descriptor.xml");
17:
18: // obtengo un puntero al archivo EMPLEADOS.txt
19: JAFile a = factory.getFile("EMPLEADOS.txt");
20:
21: // creo varios indices de un saque
22: String sIdxs[] = {"nombre","legajo","sector"};
23:
24: // el metodo esta sobre
25: JAIndex indices[] = a.createIndexOn(sIdxs);
26:
27: // creo una instancia del bean Empleado
28: REmpleado e = new REmpleado();
29:
30: for( int i = 0; i < indices.length; i++ )
31: {
32: System.out.print("-----[");
33: System.out.print(indices[i].getAttKey());
34: System.out.println("]--------");
35:
36: // mientras no sea eof
37: while( !indices[i].read(e) )
38: {
39: System.out.println(e);
40: }
41: }
42:
43: // cierro los indices
44: a.destroyAllIndexes();
45:
46: // cierro el archivo
47: a.close();
48: }
49:}
50:

El método createIndexOn (línea 25) está sobrecargado y si recibe un array de String entonces retorna un array de JAIndex con tantos índices como nombres de campos contenga el array que se le haya pasado en el argumento.

Este programa crea índices por los campos nombre, legajo y sector, y luego recorre todos los registros de cada uno de los índices creados.


Definir y Crear Indices en el Descriptor

Para no dejar recaer en el cliente la responsabilidad de crear índices JAF puede crearlos automaticamente leyendo el descriptor. Podemos indicar dentro de la definición del archivo que necesitemos indexar cuales son los índices que JAF deberá crear.

En el siguiente ejemplo modificaremos la definición del archivo EMPLEADOS.txt agregándole tres índices (por nombre, legajo y sector).

descriptor.xml (solo vemos la definición del archivo EMPLEADOS.txt)
   1:    
2: <file name="EMPLEADOS.txt" record="REmpleado">
3: <index field="nombre" />
4: <index field="legajo" />
5: <index field="sector" />
6: </file>
7:

Luego, no será responsabilidad del cliente invocar al método createIndexOn. Los índices ya estarán creados y el cliente los puede acceder a través del método getIndex.





.........................,...................




.



.

No hay comentarios.: