Creación de un nuevo almacén
En otros apartados hemos estado viendo que servicios nos proporciona DAL para el acceso a los datos tabulares. Normalmente estos servicios se ofrecen por el FeatureStore. Sin embargo los servicios relacionados con la creación física del almacén, no nos los da el FeatureStore. Estos servicios forman parte de los servicios que ofrece el DataServerExplorer.
El DataServerExplorer reúne los servicios relacionados con la exploración de un servidor de datos junto de los de creación de nuevos almacenes en el servidor. Vamos a ver aquí la parte de añadir un nuevo almacén a un servidor de datos, en este caso un sistema de ficheros, el FilesystemExplorer.
Un DataServerExplorer dispone para estas tareas de los métodos:
- getAddParameters. Este, dado un nombre de almacén registrado, nos devolverá un DataParameters especializado con los parámetros que precisa ese el almacén indicado para ser creado.
- add, que a partir del DataParameters indicado se encargara de crear el nuevo almacén en el servidor.
Veamos un ejemplo de creación de un almacén de tipo dbf. Crearemos un fichero prueba.dbf en la carpeta /data. El fichero dbf contendrá los campos:
- NOMBRE, de tipo STRING de 100 caracteres.
- MUNICIPIO, de tipo STRING de 100 caracteres.
- POBLACION, de tipo LONG.
- AREA, de tipo DOUBLE.
Para esto tendremos que hacer:
- Crearemos un DataServerExplorer de tipo FilesystemExplorer, indicando que el path inicial sobre el que ha de trabajar es /data.
- Le pediremos al DataServerExplorer una instancia de parámetros adecuada para crear un fichero dbf.
- Indicaremos en esos parámetros el nombre del fichero a crear, sin ruta, ya que utilizara la ruta corriente del DataServerExplorer para ello.
- Le pediremos los parámetros la instancia del FeatureType que se va a utilizar para la creación del dbf. Este sera de tipo EditableFeatureType.
- Añadiremos al FeatureType los atributos que queremos que tenga nuestro dbf
- Y por ultimo le indicaremos al DataServerExplorer que añada la nueva fuente de datos de la que hemos configurado sus parámetros.
Veamos como queda todo esto junto:
DataExplorerParameters eparams = manager.createServerExplorerParameters("FilesystemExplorer");
eparams.setDynValue("initialpath","/data");
DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
NewFeatureStoreParameters sparams = (NewFeatureStoreParameters)serverExplorer.getAddParameters("DBF");
sparams.setDynValue("dbffilename","prueba.dbf");
EditableFeatureType featureType = (EditableFeatureType)sparams.getDefaultFeatureType();
featureType.add("NOMBRE", DataTypes.STRING,100);
featureType.add("MUNICIPIO", DataTypes.STRING,100);
featureType.add("POBLACION", DataTypes.LONG);
featureType.add("AREA", DataTypes.DOUBLE);
serverExplorer.add(sparams);
En otros apartados hemos estado viendo las operaciones o servicios que ofrece el FeatureType de cara a consultar su estructura. Vamos a repasar los servicios que añade el EditableFeatureType a este de cara a modificar esta:
- add. Nos permite añadir nuevos atributos a la descripción del fenómeno. Le indicaremos el nombre del nuevo atributo y el tipo y nos devolverá una instancia de EditableFeatureAttributeDescriptor, que es similar a FeatureAttributeDescriptor, pero añadiendo operaciones que permiten modificar las propiedades del atributo.
- getNotEditableCopy, que nos devuelve una copia de el mismo no editable, es decir un FeatureType.
- getSource, nos devuelve una referencia al FeatureType del que creamos esta versión editable. Si el EditableFeatureType no se creo a partir de un EditableFeature devolverá null.
- remove, que nos permite eliminar una descripción de atributo.
- setDefaultGeometryAttributeName, que nos permite indicar cual es el nombre del atributo que contiene la geometría a usar como geometría por defecto del fenómeno.
Veamos algunos detalles interesantes del método add. Este método esta sobrecargado y presenta tres variantes:
- add(String name, int type). Se trata de la versión simple, y crea, añade y devuelbe un nuevo atributo del nombre y tipo indicado.
- add(String name, int type, int size). Se comporta de forma similar al anterior, pero permite fijar el tamaño. Es útil con el tipo STRING para especificar de forma cómoda el tamaño de este.
- add(String name, int type, Evaluator eval). Con este podemos añadir nuevos atributos cuyos valores se calculen usando el evaluador indicado. En otro apartado se vera esto con mas detalle (Soporte para atributos calculados).