Saltar a contenido

3. Fichero de configuración: repos.xml

Fichero de configuración del repositorio. Una vez tenemos definida nuestra/s base/s de datos de la aplicación, fichero/s *.sqlite en el directorio data, necesitamos un fichero de configuración del repositorio.

Ejemplo: /data/repos.xml

<repos>
    <repo dbFile="inspeccionesvinedo.sqlite" id="variedadRepo" dbTable="variedad"/>
    <repo dbFile="inspeccionesvinedo.sqlite" id="tipoPlagaRepo" dbTable="tipo_plaga"/>
    <repo dbFile="inspeccionesvinedo.sqlite" id="severidadRepo" dbTable="severidad" >
        <mapping fk="tipo_plaga_id" property="tipoPlaga" repo="tipoPlagaRepo"/>
    </repo>
    <repo dbFile="inspeccionesvinedo.sqlite" id="provinciaRepo" dbTable="provincia" />
    <repo dbFile="inspeccionesvinedo.sqlite" id="municipioRepo" dbTable="municipio">
        <mapping fk="c_provincia_id" property="provincia" repo="provinciaRepo"/>
    </repo>

    <repo dbFile="inspeccionesvinedo.sqlite" id="plagaRepo" dbTable="plaga">
        <meta properties="all">
            <property name="location" columnName="location" converter="string" calculated="jexl" expression="${location.asWKT}" evalOn="insert"/>
            <property name="f_actuacion" converter="date" pattern="seconds" evalOn="update" expression="${date.now}" />
            <keyGenerator type="numericUUID"/>
        </meta>
        <mapping fk="variedad_id" property="variedad" repo="variedadRepo"/>
        <mapping fk="tipo_plaga_id" property="tipoPlaga" repo="tipoPlagaRepo"/>
        <mapping fk="severidad_id" property="severidad" repo="severidadRepo"/>

    </repo>
    <repo dbFile="inspeccionesvinedo.sqlite" id="plagaImagesRepo" dbTable="plaga_foto">
        <meta>
            <keyGenerator type="numericUUID"/>
            <property name="f_actuacion" converter="date" pattern="seconds" evalOn="update" expression="${date.now}" />
        </meta>
        <mapping fk="plaga_id" property="plaga" repo="plagaRepo"/>
    </repo>

    <filerepo defaultExtension="jpg" folder="pictures/estado_fen" id="estadoFenImages" />

</repos>

Base de datos: /data/inspeccionesvinedo.sqlite

CREATE TABLE "variedad" (
    variedad_id integer primary key AUTOINCREMENT,
    nombre text
);

CREATE TABLE "tipo_plaga" (
    tipo_plaga_id TEXT primary key,
    tipo_plaga TEXT
);

CREATE TABLE "severidad" (
    severidad_id  INTEGER PRIMARY KEY AUTOINCREMENT,
    tipo_plaga_id INTEGER,
    codigo_severidad INTEGER,
    descripcion_severidad TEXT,
    FOREIGN KEY(tipo_plaga_id) REFERENCES tipo_plaga(tipo_plaga_id)
);

CREATE TABLE "provincia"(
    "c_provincia_id" INTEGER PRIMARY KEY,
    "d_provincia" TEXT,
    "c_orden_provincia" INTEGER
);

CREATE TABLE "municipio"(
    "c_municipio" TEXT,
    "c_provmuni_id" TEXT PRIMARY KEY,
    "c_provincia_id" INTEGER,
    "d_nombre" TEXT,
    FOREIGN KEY(c_provincia_id) REFERENCES provincia(c_provincia_id)
);

CREATE TABLE plaga (
    plaga_id INTEGER PRIMARY KEY,
    tipo_plaga_id TEXT,
    ref_sigpac TEXT,
    estado_fenologico_id TEXT,
    observaciones TEXT,
    location TEXT, 
    fecha_inspeccion TEXT, 
    variedad_id INTEGER,
    severidad_id INTEGER,
    f_actuacion INTEGER,
    f_sincro INTEGER,
    FOREIGN KEY(variedad_id) REFERENCES variedad(variedad_id),
    FOREIGN KEY(severidad_id) REFERENCES severidad(severidad_id),
    FOREIGN KEY(tipo_plaga_id) REFERENCES tipo_plaga(tipo_plaga_id)
);

CREATE TABLE plaga_foto (
    plaga_foto_id INTEGER PRIMARY KEY,
    plaga_id INTEGER,
    image TEXT,
    f_actuacion INTEGER,
    f_sincro INTEGER,
    FOREIGN KEY(plaga_id) REFERENCES plaga(plaga_id)
);

3.1 Tag repo

Atributo Descripción
id Identificador único del componente, si no está definido, se utilizará el nombre del archivo base. Este identificador es el que vamos a usar en los formularios para indicar sobre qué tabla (dbTable) de la base de datos (dbFile) vamos a tomar los datos o guardar los datos del componente del formulario.
dbFile Hace referencia a la base de datos, fichero *.sqlite de la carpeta /data.
dbTable Tabla como base para consultar/almacenar entidades.
<repo dbFile="inspeccionesvinedo.sqlite" id="variedadRepo" dbTable="variedad"/>

3.1.1 Tag mapping

Atributo Descripción
id Identificador único del componente, si no está definido, se utilizará el nombre del archivo base. Este identificador es el que vamos a usar en los formularios para indicar sobre qué tabla (dbTable) de la base de datos (dbFile) vamos a tomar los datos o guardar los datos del componente del formulario.
fk Clave foránea.
property Nombre de la propiedad de la entidad principal en la que se almacenará la entidad relacionada.
repo Identificador del repositorio.
insertable Por defecto=verdadero. Si es true, cuando se inserta la entidad principal, también se inserta la entidad relacionada.
updatable Por defecto=verdadero. Si es true, cuando se almacena la entidad principal, también se actualiza la entidad relacionada.
deletable Por defecto=false. Si es true, cuando se elimina la entidad principal, se elimina la entidad relacionada.
 <mapping fk="c_provincia_id" property="provincia" repo="provinciaRepo"/>

3.1.2 Tag meta

3.1.2.1 Tag keyGenerator

Atributo Descripción
type Estrategia de generación de clave de entidad. Posibles valores:
  • MAXROWID: La nueva clave para la entidad será el valor máximo de rowid incrementado en 1.
  • TIMESTAMP: La nueva clave para la entidad será la fecha actual en formato timestamp.
  • UUID: La nueva clave para la entidad se generará usando UUID.
  • NUMERICUUID: La nueva clave para la entidad será la fecha actual en formato timestamp concatenado con 5 dígitos aleatorios.
<keyGenerator type="numericUUID"/>

3.1.2.2 Tag property

Atributo Descripción
name Nombre de la propiedad de la entidad.
expression
columnName Nombre de la propiedad de la entidad.
expressionType Tipo utilizado para representar el valor de columna recuperado.
converter Instancia del conversor a aplicar a la propiedad de la entidad.
evalOn select,insert,update
calculated jext|sql
pattern Patrón para convertir los valores calculados (sólo los calculados) antes de insertarlos en la BD.
<property name="f_actuacion" converter="date" pattern="seconds" evalOn="update" expression="${date.now}" />

3.2 Tag filerepo

Atributo Descripción
id Identificador único del componente.
folder Carpeta base que contiene las imágenes del repositorio. Si es relativa, la url se interpreta desde la carpeta del proyecto.
defaultExtension Extensión por defecto
<filerepo defaultExtension="jpg" folder="pictures/estado_fen" id="estadoFenImages" />