/**
  * Metodo para consultar los nodos de tipo SQI que coincidan con los identificadores del array de
  * Long.
  *
  * @param ids, un array de Long
  * @return NodoSQIVO[] Un array de NodoSQIVO
  * @throws Exception
  */
 protected NodoSQIVO[] handleConsultaNodosSQI(Long[] ids) throws Exception {
   NodoSQIVO[] todosNodos = null;
   try {
     NodosSQIPorIDCriteria criterio = new NodosSQIPorIDCriteria();
     criterio.setIds(ids);
     List listaNodos = new ArrayList();
     listaNodos =
         this.getNodoSQIDao()
             .consultarNodosSQI(this.getNodoSQIDao().TRANSFORM_NODOSQIVO, criterio);
     todosNodos = (NodoSQIVO[]) (listaNodos.toArray(new NodoSQIVO[listaNodos.size()]));
   } catch (Exception e) {
     logger.error("Error al hacer la consulta para los nodos [" + ids + "]");
     throw new Exception("Error al hacer la consulta para los nodos [" + ids + "]");
   }
   return todosNodos;
 }
  /**
   * Metodo para modificar el nodo de tipo SQI.
   *
   * @param nodo, de tipo NodoSQIVO
   * @return Long El identificador del nodo que se modifica
   * @throws Exception
   */
  protected Long handleModificarNodoSQI(NodoSQIVO nodo) throws Exception {

    try {
      NodosSQIPorIDCriteria criterio = new NodosSQIPorIDCriteria();
      Long[] identi = new Long[1];
      identi[0] = nodo.getId();
      criterio.setIds(identi);
      List nodos = this.getNodoSQIDao().consultarNodosSQI(criterio);
      NodoSQI nodoV = (NodoSQI) nodos.get(0);

      if (nodoV != null) {
        String nombre = nodo.getNombreNodo();
        if (nombre == null || nombre.equals("")) {
          logger.error("El nombre del nodo SQI es obligatorio [" + nombre + "]");
          throw new Exception("El nombre del nodo es obligatorio[" + nombre + "]");
        }
        nodoV.setNombreNodo(nombre);

        String url = nodo.getUrlServicio();
        if (url == null || url.equals("")) {
          logger.error("La URL del servicio es obligatorio [" + url + "]");
          throw new Exception("La URL del servicio es obligatorio [" + url + "]");
        }
        nodoV.setUrlServicio(url);

        String desc = nodo.getDescripcionNodo();
        if (desc == null || desc.equals("")) {
          logger.error("La descripcion del nodo SQI es obligatorio [" + desc + "]");
          throw new Exception("La descripcion del nodo es obligatorio[" + desc + "]");
        }
        nodoV.setDescripcionNodo(desc);

        String consulta = nodo.getLenguajeConsulta().toUpperCase(); // Constantes
        String respuesta = nodo.getLenguajeRespuesta().toUpperCase(); // Constantes
        if (consulta != null && !consulta.equals("")) {
          if (!consulta.equalsIgnoreCase(LENGUAJE_CONSULTA_VSQL)) {
            logger.error(
                "El lenguaje de consulta debe ser de tipo "
                    + LENGUAJE_CONSULTA_VSQL
                    + ", ["
                    + consulta
                    + "]");
            throw new Exception(
                "El lenguaje de consulta debe ser de tipo "
                    + LENGUAJE_CONSULTA_VSQL
                    + ", ["
                    + consulta
                    + "]");
          }
        } else {
          logger.error("El lenguaje de consulta es obligatorio [" + consulta + "]");
          throw new Exception("El lenguaje de consulta es obligatorio [" + consulta + "]");
        }
        if (respuesta != null && !respuesta.equals("")) {
          if (!respuesta.equalsIgnoreCase(LENGUAJE_RESPUESTA_LOM)
              && !respuesta.equalsIgnoreCase(LENGUAJE_RESPUESTA_LOMES)) {
            logger.error(
                "El lenguaje de respuesta debe ser de tipo "
                    + LENGUAJE_RESPUESTA_LOM
                    + "o tipo "
                    + LENGUAJE_RESPUESTA_LOMES
                    + "["
                    + respuesta
                    + "]");
            throw new Exception("{errors.altanodoSQI.lenguajeRespuesta} ");
          }
        } else {
          logger.error("El lenguaje de respuesta es obligatorio [" + respuesta + "]");
          throw new Exception("El respuesta de consulta es obligatorio[" + respuesta + "]");
        }
        nodoV.setLenguajeConsulta(consulta);
        nodoV.setLenguajeRespuesta(respuesta);

        String idSesion = nodo.getIdentificadorSesion();
        String gestor = "";
        if (idSesion == null || idSesion.equals("")) {
          gestor = nodo.getGestorSesion();
          if (gestor == null || gestor.equals("")) {
            logger.error(
                "La URL del gestor de sesiones o el identificador de la sesion es obligatorio, identificadorSesion ["
                    + idSesion
                    + "] el gestor de sesiones ["
                    + gestor
                    + "]");
            throw new Exception(
                "La URL del gestor de sesiones o el identificador de la sesion es obligatorio,identificadorSesion ["
                    + idSesion
                    + "] el gestor de sesiones  ["
                    + gestor
                    + "]");
          }
        }
        nodoV.setIdentificadorSesion(idSesion);
        nodoV.setGestorSesion(gestor);

        String clave = nodo.getClave();
        String usuario = nodo.getUsuario();
        if (clave != null && !clave.equals("")) {
          if (usuario == null || usuario.equals("")) {
            logger.error(
                "Si existe clave," + clave + ", es obligatorio el usuario [" + usuario + "]");
            throw new Exception(
                "Si existe clave," + clave + ", es obligatorio el usuario [" + usuario + "]");
          }
        }
        if (usuario != null && !usuario.equals("")) {
          if (clave == null || clave.equals("")) {
            logger.error(
                "Si existe usuario," + usuario + ", es obligatoria la clave [" + clave + "]");
            throw new Exception(
                "Si existe usuario," + usuario + ", es obligatoria la clave [" + clave + "]");
          }
        }
        nodoV.setClave(clave);
        nodoV.setUsuario(usuario);

        // actualizamos los datos del nodo
        this.getNodoSQIDao().update(nodoV);
      } else {
        logger.error(
            "El nodo con identificador ["
                + nodo.getId()
                + "] que se quiere modificar no existe en la base de datos");
        throw new Exception(
            "El nodo con identificador ["
                + nodo.getId()
                + "] que se quiere modificar no existe en la base de datos");
      }

    } catch (Exception e) {
      logger.error(
          "Error al actualizar el nodo SQI con identificador ["
              + nodo.getId()
              + "],nombre del nodo ["
              + nodo.getNombreNodo()
              + "], descripcion del nodo ["
              + nodo.getDescripcionNodo()
              + "]"
              + ",lenguaje de consulta ["
              + nodo.getLenguajeConsulta()
              + "], lenguaje de respuesta ["
              + nodo.getLenguajeRespuesta()
              + "], "
              + "la URL del servicio ["
              + nodo.getUrlServicio()
              + "],el gestor de sesiones ["
              + nodo.getGestorSesion()
              + "], "
              + "el identificador de la sesion ["
              + nodo.getIdentificadorSesion()
              + "], la clave ["
              + nodo.getClave()
              + "],"
              + " y el usuario ["
              + nodo.getUsuario()
              + "]",
          e);
      throw new Exception(
          "Error al actualizar el nodo SQI con identificador ["
              + nodo.getId()
              + "],nombre del nodo ["
              + nodo.getNombreNodo()
              + "], descripcion del nodo ["
              + nodo.getDescripcionNodo()
              + "]"
              + ",lenguaje de consulta ["
              + nodo.getLenguajeConsulta()
              + "], lenguaje de respuesta ["
              + nodo.getLenguajeRespuesta()
              + "], "
              + "la URL del servicio ["
              + nodo.getUrlServicio()
              + "],el gestor de sesiones ["
              + nodo.getGestorSesion()
              + "], "
              + "el identificador de la sesion ["
              + nodo.getIdentificadorSesion()
              + "], la clave ["
              + nodo.getClave()
              + "],"
              + " y el usuario ["
              + nodo.getUsuario()
              + "]",
          e);
    }

    return nodo.getId();
  }