private void actualizarPagina() {
    final String nombreClaseEntidad = claseEntidad.getSimpleName();

    Long numFilas =
        new HibernateTransaction<Long>() {

          @Override
          public Long run() {
            return (Long)
                session.createQuery("select count(*) from " + nombreClaseEntidad).iterate().next();
          }
        }.execute();
    Double maxPaginasFP = numFilas.doubleValue() / maxFilas.doubleValue();
    maxPaginas = (int) Math.ceil(maxPaginasFP.doubleValue());
    paginaEtiqueta.setText(getTextoPagina());
  }
  public GestorGenericoWindow(final UBTicket ubticket, Class c) {
    super("Gestionar [" + c.getSimpleName() + "]");
    final Object self = this;

    claseEntidad = c;

    tablaPanel = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
    addComponent(tablaPanel);

    Panel paginadorPanel = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);

    paginadorPanel.addComponent(
        new Button(
            "<--",
            new Action() {

              @Override
              public void doAction() {
                if (pagina > 0) {
                  pagina--;
                  actualizarTabla();
                }
              }
            }));

    paginaEtiqueta = new Label();
    paginaEtiqueta.setText(getTextoPagina());
    paginadorPanel.addComponent(paginaEtiqueta);

    paginadorPanel.addComponent(
        new Button(
            "-->",
            new Action() {

              @Override
              public void doAction() {
                if ((pagina + 1) < maxPaginas) {
                  pagina++;
                  actualizarTabla();
                }
              }
            }));

    addComponent(paginadorPanel);

    Panel botonesPanel = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);

    botonesPanel.addComponent(
        new Button(
            "CREAR",
            new Action() {

              @Override
              public void doAction() {
                if (claseEntidad == Categoria.class) {
                  ubticket
                      .getGUIScreen()
                      .showWindow(new CategoriaEditorWindow((GestorGenericoWindow) self));
                } else if (claseEntidad == Espectaculo.class) {
                  ubticket
                      .getGUIScreen()
                      .showWindow(
                          new EspectaculoEditorWindow(ubticket, (GestorGenericoWindow) self));
                } else if (claseEntidad == Espacio.class) {
                  ubticket
                      .getGUIScreen()
                      .showWindow(new EspacioEditorWindow(ubticket, (GestorGenericoWindow) self));
                } else if (claseEntidad == Usuario.class) {
                  ubticket
                      .getGUIScreen()
                      .showWindow(new UsuarioEditorWindow(ubticket, (GestorGenericoWindow) self));
                }
              }
            }));

    botonesPanel.addComponent(
        new Button(
            "EDITAR",
            new Action() {

              final String nombreClaseEntidad = claseEntidad.getSimpleName();

              @Override
              public void doAction() {
                String input =
                    TextInputDialog.showTextInputBox(
                        ubticket.getGUIScreen(), "Atención", "¿Qué tabla desea editar?", "");

                if (input != null && input.length() != 0) {
                  try {
                    final Integer i = Integer.parseInt(input);

                    Object entidad =
                        new HibernateTransaction<Object>() {

                          @Override
                          public Object run() {
                            return session.byId(claseEntidad).load(i);
                          }
                        }.execute();

                    if (entidad != null) {
                      if (entidad instanceof Categoria) {
                        ubticket
                            .getGUIScreen()
                            .showWindow(
                                new CategoriaEditorWindow(
                                    (GestorGenericoWindow) self, (Categoria) entidad));
                      } else if (entidad instanceof Espectaculo) {
                        ubticket
                            .getGUIScreen()
                            .showWindow(
                                new EspectaculoEditorWindow(
                                    ubticket, (GestorGenericoWindow) self, (Espectaculo) entidad));
                      } else if (entidad instanceof Espacio) {
                        ubticket
                            .getGUIScreen()
                            .showWindow(
                                new EspacioEditorWindow(
                                    ubticket, (GestorGenericoWindow) self, (Espacio) entidad));
                      } else if (entidad instanceof Usuario) {
                        ubticket
                            .getGUIScreen()
                            .showWindow(
                                new UsuarioEditorWindow(
                                    ubticket, (GestorGenericoWindow) self, (Usuario) entidad));
                      }
                    } else {
                      MessageBox.showMessageBox(
                          ubticket.getGUIScreen(),
                          "Atención",
                          "No se ha encontrado ninguna entidad con tal identificador.");
                    }
                  } catch (NumberFormatException ex) {
                    MessageBox.showMessageBox(
                        ubticket.getGUIScreen(), "Atención", "Identificador inválido.");
                  }
                }
              }
            }));

    botonesPanel.addComponent(
        new Button(
            "BORRAR",
            new Action() {

              final String nombreClaseEntidad = claseEntidad.getSimpleName();

              @Override
              public void doAction() {
                String input =
                    TextInputDialog.showTextInputBox(
                        ubticket.getGUIScreen(), "Atención", "¿Qué tabla desea eliminar?", "");

                if (input != null && input.length() != 0) {
                  try {
                    final Integer i = Integer.parseInt(input);

                    Integer entidadesBorradas =
                        new HibernateTransaction<Integer>() {

                          @Override
                          public Integer run() {
                            int entidadesBorradas =
                                session
                                    .createQuery(
                                        "DELETE "
                                            + nombreClaseEntidad
                                            + " e WHERE e.id = :idEntidad")
                                    .setString("idEntidad", i.toString())
                                    .executeUpdate();
                            return new Integer(entidadesBorradas);
                          }
                        }.execute();

                    if (entidadesBorradas.intValue() > 0) {
                      MessageBox.showMessageBox(
                          ubticket.getGUIScreen(),
                          "Información",
                          "Se ha(n) borrado " + entidadesBorradas + " entrada(s).");
                      actualizarTabla();
                    } else {
                      MessageBox.showMessageBox(
                          ubticket.getGUIScreen(),
                          "Atención",
                          "No se ha encontrado ninguna entidad con tal identificador.");
                    }
                  } catch (NumberFormatException ex) {
                    MessageBox.showMessageBox(
                        ubticket.getGUIScreen(), "Atención", "Identificador inválido.");
                  }
                }
              }
            }));

    botonesPanel.addComponent(
        new Button(
            "CANCELAR",
            new Action() {

              @Override
              public void doAction() {
                ((Window) self).close();
              }
            }));

    addComponent(botonesPanel);
  }