@Util
  public static void PopupPassValidateCopy(String accion, Agente dbAgente, Agente agente) {
    CustomValidation.clearValidadas();
    if (secure.checkGrafico(
        "noEditable",
        "editable",
        accion,
        (Map<String, Long>) tags.TagMapStack.top("idParams"),
        null)) {
      CustomValidation.valid("agente", agente);
      dbAgente.username = agente.username;
    }

    CustomValidation.valid("agente", agente);
    CustomValidation.required("agente.verificacion", agente.verificacion);
    CustomValidation.required("agente.newpassword", agente.newpassword);
    CustomValidation.compare(agente.newpassword, params.get("agente_newpasswordcopy"));

    if (agente.verificacion != null) { // agente.verificación = contraseña actual
      if (dbAgente.password.equals(Crypto.passwordHash(agente.verificacion))) {
        dbAgente.password = Crypto.passwordHash(agente.newpassword);
        log.info("El usuario <" + dbAgente.username + "> ha modificado su contraseña");
      } else {
        Validation.addError("password", "Contraseña actual incorrecta");
      }
    }
    //		else {
    //			dbAgente.password = Crypto.passwordHash(agente.newpassword);
    //			log.info("El usuario <" + dbAgente.username + "> ha modificado su contraseña");
    //		}
  }
  @Util
  public static void firmarRegistrarFHFormFirmaFH(
      Long idSolicitud, Long idRegistroModificacion, Long idRegistro, String firma) {
    SolicitudGenerica solicitud =
        SolicitudPresentarModificacionFAPController.getSolicitudGenerica(idSolicitud);
    idRegistroModificacion =
        solicitud.registroModificacion.get(solicitud.registroModificacion.size() - 1).id;
    RegistroModificacion registroModificacion =
        RegistroModificacion.findById(idRegistroModificacion);
    idRegistro = registroModificacion.registro.id;
    Registro registro =
        SolicitudPresentarModificacionFAPController.getRegistro(idRegistroModificacion, idRegistro);

    play.Logger.info("Metodo: firmarRegistrarFHFormFirmaFH");
    Agente agente = AgenteController.getAgente();
    if (agente.getFuncionario()) {
      List<Firmante> firmantes = new ArrayList<Firmante>();
      firmantes.add(new Firmante(agente));
      FirmaUtils.firmar(registro.oficial, firmantes, firma, null);
    } else {
      // ERROR
      Messages.error("No tiene permisos suficientes para realizar la acción");
    }
    if (!Messages.hasErrors()) {

      registro.fasesRegistro.firmada = true;
      registro.save();
    }
  }
  private void compruebaUsuarioParticipacion(String user, String name, String email) {
    if (user == null) {
      play.Logger.info("No se comprueba la participación, porque el usuario es: " + user);
      return;
    }
    Participacion p =
        Participacion.find(
                "select participacion from Participacion participacion where participacion.agente.username=? and participacion.solicitud.id=?",
                user,
                this.id)
            .first();
    if (p == null) {
      Agente agente =
          Agente.find("select agente from Agente agente where agente.username=?", user).first();

      if (agente == null) {
        agente = new Agente();
        agente.username = user;
        agente.name = name;
        agente.email = email;
        agente.roles = new HashSet<String>();
        agente.roles.add("usuario");
        agente.rolActivo = "usuario";
        agente.save();
        play.Logger.info("Creado el agente %s", user);
      }

      p = new Participacion();
      p.agente = agente;
      p.solicitud = this;
      p.tipo = "solicitante";
      p.save();
      play.Logger.info(
          "Asignada la participación del agente %s en la solicitud %s", agente.username, this.id);
    }
  }