MainModel

com.uva.rafael.tfg_goniometer.model

## Class MainModel

- java.lang.Object
- - com.uva.rafael.tfg_goniometer.model.MainModel

- All Implemented Interfaces:
    ModelFunctions

      public class MainModel
      extends java.lang.Object
      implements ModelFunctions

  Esta clase es el principal y unico Modelo de la aplicacion. Implementa el patron de diseño `Singleton`, por lo que solo existe una unica instancia de esta clase en toda la aplicacion.

  Se encarga, principalmente, de servir como intermediario entre los Presentadores y la clase `SQLiteHelper` que se ocupa del manejo de la Base de Datos, haciendo consultas, bien para obtener informacion de la misma, bien para almacenar informacion (como `Pacientes` o `Mediciones`) introducida por el usuario, o bien para eliminar informacion de la misma.

  Ademas de eso, se encarga de gestionar si se debe mostrar o no el boton de añadir una nueva medicion a un paciente en particular.

  Esta clase forma parte de la aplicacion TFG-Goniometer, desarrollada para el Trabajo de Fin de Grado - Grado en Ingenieria Informatica (Universidad de Valladolid)

  Version:
    1.0
  Author:
    Rafael Matamoros Luque
  See Also:
    `SQLiteDatabase`, `Cursor`, `GoniometerDBHelper`, `Paciente`, `Medicion`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String` | `DATETIME`
    `static java.lang.String` | `ID_PACIENTE`
    `static java.lang.String` | `LECTURA_GONIOMETRO`
    `static java.lang.String` | `NOMBRE_PACIENTE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MainModel()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.ArrayList<java.lang.String>` | `getDatosFormateados(java.util.ArrayList<java.lang.String> medicion)` Metodo que se encarga de, a partir de los datos correspondientes a una medicion, dar un formato adecuado a los mismos para que se puedan mostrar correctamente en la pantalla del dispositivo.
    `static MainModel` | `getInstance()` Unico y principal constructor de la clase.
    `java.util.ArrayList<java.util.ArrayList<java.lang.String>>` | `getMedicionesPacienteBy(java.lang.String nombre, int id)` Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con todas las mediciones que se han realizado a un `Paciente` en concreto, a partir del nombre e ID del mismo.
    `boolean` | `getMostrarOpcionesAlmacenarMedicion()` Metodo "getter" de la variable `mostrarOpcionesAlmacenarMedicion` para ver si es necesario mostrar el boton de añadir una nueva medicion al perfil de un paciente.
    `boolean` | `getMostrarOpcionesBorrarPaciente()` Metodo "getter" de la variable `mostrarOpcionesBorrarPaciente` para ver si es necesario mostrar el boton de borrar el perfil de un paciente.
    `java.util.ArrayList<java.lang.String>` | `getPacienteBy(java.lang.String nombre, int id)` Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con la informacion a mostrar de un `Paciente` (en concreto, edad, sexo, diagnostico, comentarios adicionales y tags) a partir del nombre y el ID del mismo.
    `java.util.ArrayList<java.util.ArrayList<java.lang.String>>` | `getPacientes()` Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con todos los nombres e ids de los pacientes almacenados en la misma.
    `java.util.ArrayList<java.util.ArrayList<java.lang.String>>` | `getPacientesFiltrado(java.lang.String texto, java.lang.String filtro)` Metodo que se encarga de realizar una consulta a la Base de Datos y devolver un listado de los nombres e IDs de los pacientes que se encuentran en la misma, filtrados segun el criterio seleccionado por el usuario en el `Spinner` de `PacientesFragment` y la informacion introducida en el `EditText` del mismo `Fragment`.
    `java.util.ArrayList<java.util.ArrayList<java.lang.String>>` | `getUltimasMediciones()` Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con las ultimas 10 mediciones (como maximo) que se han almacenado en la misma, ordenadas de mas a menos recientes.
    `int` | `onDeleteMeasurement(java.lang.String fechaHora)` Metodo que se encarga de realizar una consulta a la Base de Datos para borrar una medicion de la misma, a partir de la fecha-hora en la que se realizo.
    `int` | `onDeletePatient(java.lang.String nombre, int id)` Metodo que se encarga de realizar una consulta a la Base de Datos para, primero, borrar todas las mediciones que se han realizado a un paciente, y, despues, eliminar al paciente en cuestion de la misma, a partir del nombre e ID del paciente.
    `void` | `setInitialSettings(android.content.Context context)` Metodo que proporciona el Context a la clase SQLiteHelper para acceder a la Base de Datos.
    `void` | `setMostrarOpcionesAlmacenarMedicion(boolean opciones)` Metodo "setter" de la variable `mostrarOpcionesAlmacenarMedicion` para ver si es necesario mostrar el boton de añadir una nueva medicion al perfil de un paciente.
    `void` | `setMostrarOpcionesBorrarPaciente(boolean opciones)` Metodo "setter" de la variable `mostrarOpcionesBorrarPaciente` para ver si es necesario mostrar el boton de borrar el perfil de un paciente.
    `long` | `storeMeasurement(java.util.ArrayList<java.lang.String> nuevaMedicion)` Metodo que, dado el `ArrayList` con toda la informacion introducida por el usuario sobre la medicion, se encarga de obtener una instancia de tipo `Medicion` y realizar una consulta a la Base de Datos para almacenarla.
    `long` | `storePatient(java.util.ArrayList<java.lang.String> nuevoPaciente)` Metodo que realiza una consulta a la Base de Datos para almacenar en la misma la informacion del paciente que recibe como parametro

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### LECTURA_GONIOMETRO

          public static final java.lang.String LECTURA_GONIOMETRO

      See Also:
        Constant Field Values

    - #### NOMBRE_PACIENTE

          public static final java.lang.String NOMBRE_PACIENTE

      See Also:
        Constant Field Values

    - #### ID_PACIENTE

          public static final java.lang.String ID_PACIENTE

      See Also:
        Constant Field Values

    - #### DATETIME

          public static final java.lang.String DATETIME

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### MainModel

          public MainModel()

  - ### Method Detail

    - #### getInstance

          public static MainModel getInstance()

      Unico y principal constructor de la clase. Simplemente devuelve la referencia a su unica instancia posible.

    - #### setInitialSettings

          public void setInitialSettings(android.content.Context context)

      Metodo que proporciona el Context a la clase SQLiteHelper para acceder a la Base de Datos. Se encarga de crear una nueva instancia de esta clase a partir del mismo.

      Ademas, utiliza el `Context` recibido como parametro para obtener los `Resources` y, asi, recuperar los `Strings` del fichero `res/values/strings.xml`.

      Parameters:
        `context` - Contexto de la aplicacion (MainActivity)

    - #### storePatient

          public long storePatient(java.util.ArrayList<java.lang.String> nuevoPaciente)

      Metodo que realiza una consulta a la Base de Datos para almacenar en la misma la informacion del paciente que recibe como parametro
      Specified by:
        `storePatient` in interface `ModelFunctions`
      Parameters:
        `nuevoPaciente` - `ArrayList` a convertir en `Paciente` y almacenar en la Base de Datos
      Returns:
        long > 0 si la consulta se realizo con exito, -1 en caso contrario

    - #### storeMeasurement

          public long storeMeasurement(java.util.ArrayList<java.lang.String> nuevaMedicion)

      Metodo que, dado el `ArrayList` con toda la informacion introducida por el usuario sobre la medicion, se encarga de obtener una instancia de tipo `Medicion` y realizar una consulta a la Base de Datos para almacenarla.
      Specified by:
        `storeMeasurement` in interface `ModelFunctions`
      Parameters:
        `nuevaMedicion` - `ArrayList` a convertir en `Medicion` y almacenar en la Base de Datos
      Returns:
        long > 0 si la consulta se realizo con exito, -1 en caso contrario

    - #### getPacientes

          @Nullable
          public java.util.ArrayList<java.util.ArrayList<java.lang.String>> getPacientes()

      Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con todos los nombres e ids de los pacientes almacenados en la misma.
      Specified by:
        `getPacientes` in interface `ModelFunctions`
      Returns:
        pacientes `ArrayList>` con los nombres e ids de todos los pacientes almacenados en la Base de Datos

    - #### getPacienteBy

          public java.util.ArrayList<java.lang.String> getPacienteBy(java.lang.String nombre,
                                                                     int id)

      Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con la informacion a mostrar de un `Paciente` (en concreto, edad, sexo, diagnostico, comentarios adicionales y tags) a partir del nombre y el ID del mismo.
      Specified by:
        `getPacienteBy` in interface `ModelFunctions`
      Parameters:
        `nombre` - Nombre del paciente del que recuperar la informacion
        `id` - ID del paciente del que recuperar la informacion
      Returns:
        informacionPaciente `ArrayList` con toda la informacion del paciente almacenada en la Base de Datos

    - #### getMedicionesPacienteBy

          public java.util.ArrayList<java.util.ArrayList<java.lang.String>> getMedicionesPacienteBy(java.lang.String nombre,
                                                                                                    int id)

      Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con todas las mediciones que se han realizado a un `Paciente` en concreto, a partir del nombre e ID del mismo.
      Specified by:
        `getMedicionesPacienteBy` in interface `ModelFunctions`
      Parameters:
        `nombre` - Nombre del paciente del que recuperar la informacion
        `id` - ID del paciente del que recuperar la informacion
      Returns:
        medicionesPaciente `ArrayList>` con todas las mediciones que se han realizado al paciente

    - #### onDeletePatient

          public int onDeletePatient(java.lang.String nombre,
                                     int id)

      Metodo que se encarga de realizar una consulta a la Base de Datos para, primero, borrar todas las mediciones que se han realizado a un paciente, y, despues, eliminar al paciente en cuestion de la misma, a partir del nombre e ID del paciente.
      Specified by:
        `onDeletePatient` in interface `ModelFunctions`
      Parameters:
        `nombre` - Nombre del paciente del que eliminar toda la informacion
        `id` - ID del paciente del que eliminar toda la informacion
      Returns:
        int == 1 si el borrado se realizo con exito, 0 en caso contrario

    - #### getPacientesFiltrado

          public java.util.ArrayList<java.util.ArrayList<java.lang.String>> getPacientesFiltrado(java.lang.String texto,
                                                                                                 java.lang.String filtro)

      Metodo que se encarga de realizar una consulta a la Base de Datos y devolver un listado de los nombres e IDs de los pacientes que se encuentran en la misma, filtrados segun el criterio seleccionado por el usuario en el `Spinner` de `PacientesFragment` y la informacion introducida en el `EditText` del mismo `Fragment`.
      Specified by:
        `getPacientesFiltrado` in interface `ModelFunctions`
      Parameters:
        `texto` - Informacion introducida por el usuario en el `EditText`
        `filtro` - Filtro seleccionado por el usuario en el `Spinner`
      Returns:
        listadoPacientesFiltrado `ArrayList>` con los nombres de todos los pacientes que coincidan con los criterios de filtracion introducidos por el usuario

    - #### getUltimasMediciones

          public java.util.ArrayList<java.util.ArrayList<java.lang.String>> getUltimasMediciones()

      Metodo que se encarga de realizar una consulta a la Base de Datos y devolver una lista con las ultimas 10 mediciones (como maximo) que se han almacenado en la misma, ordenadas de mas a menos recientes.
      Specified by:
        `getUltimasMediciones` in interface `ModelFunctions`
      Returns:
        mediciones `ArrayList>` con las ultimas 10 mediciones (como maximo) que se han almacenado en la Base de Datos

    - #### getDatosFormateados

          public java.util.ArrayList<java.lang.String> getDatosFormateados(java.util.ArrayList<java.lang.String> medicion)

      Metodo que se encarga de, a partir de los datos correspondientes a una medicion, dar un formato adecuado a los mismos para que se puedan mostrar correctamente en la pantalla del dispositivo.

      Principalmente realiza tareas de añadir saltos de linea entre cada palabra (con el fin de evitar que alguna parte de la medicion no se pueda visualizar en el dispositivo), asi como de dejar solo la primera letra de cada palabra con mayuscula, y pasando el resto de la misma a minuscula, para que asi el texto ocupe menos espacio (los datos, por defecto, se obtienen de la Base de Datos con todos su caracteres en mayuscula).

      Por ultimo, este metodo tiene en cuenta el idioma del dispositivo para mostrar la informacion de un modo u otro, atendiendo a criterios sintacticos.

      Specified by:
        `getDatosFormateados` in interface `ModelFunctions`
      Parameters:
        `medicion` - `ArrayList` sobre la que aplicar las correciones de formato
      Returns:
        `ArrayList` con todos los campos de la medicion con el correspondiente formato ya aplicado para su correcta visualizacion en la pantalla del dispositivo

    - #### onDeleteMeasurement

          public int onDeleteMeasurement(java.lang.String fechaHora)

      Metodo que se encarga de realizar una consulta a la Base de Datos para borrar una medicion de la misma, a partir de la fecha-hora en la que se realizo.
      Specified by:
        `onDeleteMeasurement` in interface `ModelFunctions`
      Parameters:
        `fechaHora` - Fecha y hora en la que se realizo la medicion
      Returns:
        int == 1 si el borrado se realizo con exito, 0 en caso contrario

    - #### getMostrarOpcionesAlmacenarMedicion

          public boolean getMostrarOpcionesAlmacenarMedicion()

      Metodo "getter" de la variable `mostrarOpcionesAlmacenarMedicion` para ver si es necesario mostrar el boton de añadir una nueva medicion al perfil de un paciente.
      Returns:
        mostrarOpcionesAlmacenarMedicion

    - #### setMostrarOpcionesAlmacenarMedicion

          public void setMostrarOpcionesAlmacenarMedicion(boolean opciones)

      Metodo "setter" de la variable `mostrarOpcionesAlmacenarMedicion` para ver si es necesario mostrar el boton de añadir una nueva medicion al perfil de un paciente.
      Parameters:
        `opciones` - Nuevo valor de la variable `mostrarOpcionesAlmacenarMedicion`

    - #### getMostrarOpcionesBorrarPaciente

          public boolean getMostrarOpcionesBorrarPaciente()

      Metodo "getter" de la variable `mostrarOpcionesBorrarPaciente` para ver si es necesario mostrar el boton de borrar el perfil de un paciente.
      Returns:
        mostrarOpcionesBorrarPaciente

    - #### setMostrarOpcionesBorrarPaciente

          public void setMostrarOpcionesBorrarPaciente(boolean opciones)

      Metodo "setter" de la variable `mostrarOpcionesBorrarPaciente` para ver si es necesario mostrar el boton de borrar el perfil de un paciente.
      Parameters:
        `opciones` - Nuevo valor de la variable `mostrarOpcionesBorrarPaciente`