/**
   * Import seed data when Seam Servlet fires an event notifying observers that the web application
   * is being initialized.
   */
  public void importData(@Observes @Initialized WebApplication webapp) {
    log.info("Importing seed data for application " + webapp.getName());
    // use manual transaction control since this is a managed bean
    try {
      utx.begin();
      if (entityManager.createQuery("select g from Genre g").getResultList().size() == 0) {
        // AS7-2045
        //            entityManager.createQuery("delete from User").executeUpdate();
        //
        //            entityManager.createQuery("delete from Content").executeUpdate();
        //            entityManager.createQuery("delete from Genre").executeUpdate();

        persist(users);
        for (TwoTuple<String, String> genre : genres) {
          if ("ИСТОРИИ".equals(genre.getFirst())) {
            createGenre(
                new Genre(genre.getFirst(), genre.getSecond()),
                Arrays.asList(
                    new TwoTuple<Genre, List<Content>>(
                        new Genre(
                            "ЛИЧНЫЙ ОПЫТ",
                            "Рассказ читателям о результатах собственных экспериментов."),
                        new ArrayList<Content>())));
          } else if ("ОБЗОРЫ".equals(genre.getFirst())) {
            createGenre(
                new Genre(genre.getFirst(), genre.getSecond()),
                Arrays.asList(
                    new TwoTuple<Genre, List<Content>>(
                        new Genre("ГАДЖЕТЫ", "Обзор гаджетов."), new ArrayList<Content>())));
          } else if ("РАЗВЛЕЧЕНИЯ".equals(genre.getFirst())) {
            createGenre(
                new Genre(genre.getFirst(), genre.getSecond()),
                Arrays.asList(
                    new TwoTuple<Genre, List<Content>>(
                        new Genre("Юмор", "Анекдоты, шутки..."), new ArrayList<Content>())));
          } else if ("ПРОЧЕЕ".equals(genre.getFirst())) {
            createGenre(
                new Genre(genre.getFirst(), genre.getSecond()),
                Arrays.asList(
                    new TwoTuple<Genre, List<Content>>(
                        new Genre("ВИДЕО", "Любительское видео"), new ArrayList<Content>()),
                    new TwoTuple<Genre, List<Content>>(
                        new Genre("ВИДЕО-КЛИПЫ", "Музыкальные видео клипы"),
                        new ArrayList<Content>())));
          } else {
            createGenre(
                new Genre(genre.getFirst(), genre.getSecond()),
                new ArrayList<TwoTuple<Genre, List<Content>>>());
          }
        }
      }
      indextData();
      utx.commit();
      log.info("Seed data successfully imported");
    } catch (Exception e) {
      log.error("Import failed. Seed data will not be available.", e);
      try {
        if (utx.getStatus() == Status.STATUS_ACTIVE) {
          try {
            utx.rollback();
          } catch (Exception rbe) {
            log.error("Error rolling back transaction", rbe);
          }
        }
      } catch (Exception se) {
      }
    }
  }