NuevaMedicionPresenter

com.uva.rafael.tfg_goniometer.presenter

## Class NuevaMedicionPresenter

- java.lang.Object
- - com.uva.rafael.tfg_goniometer.presenter.NuevaMedicionPresenter

- All Implemented Interfaces:
    PresenterFunctions, PresenterFunctions.NuevaMedicionFunctions

      public class NuevaMedicionPresenter
      extends java.lang.Object
      implements PresenterFunctions, PresenterFunctions.NuevaMedicionFunctions

  Este es el Presentador asociado al `Fragment NuevaMedicionFragment` de la aplicacion. Se encarga de llevar a cabo toda la logica asociada a las acciones del usuario realizadas en la IU.

  En concreto, se encarga de "cargar" los `Spinners` con el array de items que le corresponde a a cada uno, obtener toda la informacion sobre el paciente al que se le va a asignar la medicion para enviar esa informacion a la Vista (`NuevaMedicionFragment`), y que la muestre al usuario.

  Se encarga, ademas, de gestionar cuando se cargan los `Spinners`, asi como las opciones con las que lo hacen en funcion del item seleccionado por el usuario en anteriores `Spinners`.

  Por ultimo, filtra toda la informacion introducida por el usuario con respecto a la nueva medicion y se la envia al Modelo, con el fin de introducirla finalmente en la Base de Datos. Tambien se encarga de indicar a la Vista que muestre al usuario si se ha producido algun error durante el filtrado o almacenamiento de esta informacion.

  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:
    `NuevaMedicionFragment`, `MainModel`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.uva.rafael.tfg_goniometer.interfaces.PresenterFunctions

      `PresenterFunctions.HomeFunctions, PresenterFunctions.MainFunctions, PresenterFunctions.MedicionFunctions, PresenterFunctions.NuevaMedicionFunctions, PresenterFunctions.NuevoPacienteFunctions, PresenterFunctions.PacientesFunctions, PresenterFunctions.PerfilPacienteFunctions, PresenterFunctions.SobreAppFunctions, PresenterFunctions.UltimasMedicionesFunctions`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NuevaMedicionPresenter(android.app.Fragment fragment, MainModel model)` Constructor principal de la clase

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `getInformacionPaciente(java.lang.String nombre, int id, java.lang.String fechaHora, java.lang.String lecturaGoniometro)` Metodo que se encarga de obtener la informacion relativa a un paciente a partir del nombre e ID del mismo, mediante una consulta a la Base de Datos.
    `void` | `loadSpinners(android.widget.Spinner joint_side, android.widget.Spinner joint, android.widget.Spinner movement, android.widget.Spinner movement_type)` Metodo que se encarga de "cargar" con contenido cada uno de los `Spinners` inicialmente.
    `void` | `onCreate()` Metodo que se encarga de enviar a la Vista (`NuevaMedicionFragment`) los nombres de las constantes para obtener los parametros de tipo `Bundle` recibidos en la creacion del `Fragment`.
    `void` | `onDestroy()` Perform any final cleanup before an activity is destroyed.

    `void`

    `onDoneClicked(java.lang.String nombre, int id, java.lang.String fecha_hora, java.lang.String joint_side, java.lang.String joint, java.lang.String joint_other, java.lang.String movement, java.lang.String movement_other, java.lang.String movement_type, java.lang.String movement_type_other, java.lang.String lectura_goniometro)`
    Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre el boton "HECHO" en `NuevaMedicionFragment`.

    `void` | `onItemSelectedListener(android.widget.Spinner spinner1, android.widget.Spinner spinner2)` Evento `ItemSelectedListener` que se llama cuando el usuario ha pulsado sobre alguno de los elementos de uno de los `Spinner` en `NuevaMedicionFragment`.

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

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

- - ### Constructor Detail

    - #### NuevaMedicionPresenter

          public NuevaMedicionPresenter(android.app.Fragment fragment,
                                        MainModel model)

      Constructor principal de la clase
      Parameters:
        `fragment` - Fragmento (Vista) con la que mantiene una relacion 1-a-1.
        `model` - Modelo (unico) de la aplicacion.

  - ### Method Detail

    - #### onCreate

          public void onCreate()

      Metodo que se encarga de enviar a la Vista (`NuevaMedicionFragment`) los nombres de las constantes para obtener los parametros de tipo `Bundle` recibidos en la creacion del `Fragment`.
      Specified by:
        `onCreate` in interface `PresenterFunctions.NuevaMedicionFunctions`

    - #### loadSpinners

          public void loadSpinners(android.widget.Spinner joint_side,
                                   android.widget.Spinner joint,
                                   android.widget.Spinner movement,
                                   android.widget.Spinner movement_type)

      Metodo que se encarga de "cargar" con contenido cada uno de los `Spinners` inicialmente.

      Solo se "cargan" por completo los `Spinners` que indican el lado del cuerpo en el que se hace la medicion, y el que indica si el movimiento ha sido realizado unica y exclusivamente por el paciente, o ha necesitado ayuda para realizarlo.

      El resto de `Spinners` se "cargan" con un valor por defecto para que no aparezan vacios en un principio.

      Specified by:
        `loadSpinners` in interface `PresenterFunctions.NuevaMedicionFunctions`
      Parameters:
        `joint_side` - `Spinner` en el que se indica el lado del cuerpo en el que se encuentra la articulacion sobre la que se ha realizado la medicion
        `joint` - `Spinner` en el que se indica la articulacion en concreto que ha realizado el movimiento
        `movement` - `Spinner` en el que se indica el movimiento que ha realizado dicha articulacion
        `movement_type` - `Spinner` en el que se indica si el movimiento ha sido realizado unica y exclusivamente por el usuario, o ha necesitado ayuda

    - #### getInformacionPaciente

          public void getInformacionPaciente(java.lang.String nombre,
                                             int id,
                                             java.lang.String fechaHora,
                                             java.lang.String lecturaGoniometro)

      Metodo que se encarga de obtener la informacion relativa a un paciente a partir del nombre e ID del mismo, mediante una consulta a la Base de Datos.

      Posteriormente, envia esta informacion a la Vista (`NuevaMedicionFragment`) para que se la muestre al usuario.

      Specified by:
        `getInformacionPaciente` in interface `PresenterFunctions.NuevaMedicionFunctions`
      Parameters:
        `nombre` - Nombre del paciente
        `id` - ID del paciente
        `fechaHora` - Fecha y hora a la que se realizo la medicion
        `lecturaGoniometro` - Lectura final del goniometro (angulo de desplazamiento)

    - #### onItemSelectedListener

          public void onItemSelectedListener(android.widget.Spinner spinner1,
                                             android.widget.Spinner spinner2)

      Evento `ItemSelectedListener` que se llama cuando el usuario ha pulsado sobre alguno de los elementos de uno de los `Spinner` en `NuevaMedicionFragment`.

      Se encarga de, en funcion de cual de los 4 `Spinner` es el que recibe el evento, "cargar" el siguiente `Spinner` con un determinado `Array` en funcion del item que se haya seleccionado sobre el primero para, asi, limitar la articulacion y el movimiento que puede introducir el usuario, evitando, de esta manera, introducir valores absurdos en articulaciones que no pueden realizar un determinado movimiento.

      Ademas, se encarga de mostrar u ocultar el `LinearLayout` que contiene el `EditText` en el que el usuario puede escribir, en caso de haber seleccionado en alguno de los `Spinner` la opcion "Otro/a".

      Specified by:
        `onItemSelectedListener` in interface `PresenterFunctions.NuevaMedicionFunctions`
      Parameters:
        `spinner1` - `Spinner` que recibe el evento `ItemSelected`
        `spinner2` - `Spinner` que, opcionalmente, se "cargara" en funcion del valor seleccionado en el primer `Spinner`

    - #### onDoneClicked

          public void onDoneClicked(java.lang.String nombre,
                                    int id,
                                    java.lang.String fecha_hora,
                                    java.lang.String joint_side,
                                    java.lang.String joint,
                                    java.lang.String joint_other,
                                    java.lang.String movement,
                                    java.lang.String movement_other,
                                    java.lang.String movement_type,
                                    java.lang.String movement_type_other,
                                    java.lang.String lectura_goniometro)

      Evento `ClickListener` que se llama cuando el usuario ha pulsado sobre el boton "HECHO" en `NuevaMedicionFragment`.

      Se encarga de:

      1.- Verificar que el usuario ha introducido toda la informacion obligatoria (marcada con *). 2.- Enviar la informacion al Modelo para que se introduzca en la Base de Datos. 3.- Solicitar a la Vista (`NuevaMedicionFragment`) que muestre un mensaje dependiendo de si la insercion en la Base de Datos ha sido exitosa o no. 4.- Si la insercion se realizo con exito, borrar el `Fragment` actual y mostrar el perfil del paciente actualizado con la nueva medicion ya insertada.

      Specified by:
        `onDoneClicked` in interface `PresenterFunctions.NuevaMedicionFunctions`
      Parameters:
        `nombre` - Nombre del paciente
        `id` - ID del paciente
        `fecha_hora` - Fecha y hora de la medicion
        `joint_side` - Lado en el que se encuentra la articulacion (o columna vertebral)
        `joint` - Articulacion sobre la que se ha realizado la medicion
        `joint_other` - Articulacion (en caso de haber seleccionado la opcion "Otra" en el `Spinner` joint
        `movement` - Movimiento que ha realizado la articulacion
        `movement_other` - Movimiento en caso de haber seleccionado la opcion "Otro" en el `Spinner` movement
        `movement_type` - Modo en el que se ha realizado el movimiento (con/sin ayuda)
        `movement_type_other` - Modo en caso de haber seleccionado la opcion "Otro" en el `Spinner` movement_type
        `lectura_goniometro` - Lectura final del goniometro (angulo de desplazamiento)

    - #### onDestroy

          public void onDestroy()

      Perform any final cleanup before an activity is destroyed.

      Se encarga de liberar la referencia al `Fragment` con el que esta asociado.

      Specified by:
        `onDestroy` in interface `PresenterFunctions`