package jpaspielerei;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {

  private EntityManagerFactory emf =
          Persistence.createEntityManagerFactory("JPASpielereiPU");
  private EntityManager em = emf.createEntityManager();

  public void beispieldatenAlt() {
    String namen[] = {"Egon", "Erwin", "Ute", "Aische"};
    em.getTransaction().begin();
    for (String n : namen) {
      Mitarbeiter m = new Mitarbeiter();
      m.setName(n);
      try {
        em.persist(m);
      } catch (Exception e) {
        System.out.println(n + " :: " + e.getMessage());
      }
    }
    try {
      em.getTransaction().commit();
    } catch (Exception e) {
      System.out.println(" :: " + e.getMessage());
    }
  }

  public void beispieldaten() {
    String namen[] = {"Egon", "Erwin", "Ute", "Aische"};
    for (String n : namen) {
      em.getTransaction().begin();
      Mitarbeiter m = new Mitarbeiter();
      m.setName(n);
      try {
        em.persist(m);
      } catch (Exception e) {
        System.out.println(n + " :: " + e);
      }
      try {
        em.getTransaction().commit();
      } catch (Exception e) {
        System.out.println(" :: " + e.getMessage());
      }
    }
  }

  public void datenZeigen() {
    System.out.println("Tabelle");
    for (Mitarbeiter m : (List<Mitarbeiter>) em.createQuery("SELECT m FROM Mitarbeiter m").getResultList()) {
      System.out.println(m.getId() + ": " + m.getName());
    }
  }

  public void schliessen() {
    if (em != null && em.isOpen()) {
      em.close();
    }
    if (emf != null && emf.isOpen()) {
      emf.close();
    }
  }

  public static void main(String[] args) {
    Main m = new Main();
    m.beispieldaten();
    m.datenZeigen();
    m.schliessen();
  }

  public void persist(Object object) {
    em.getTransaction().begin();
    try {
      em.persist(object);
      em.getTransaction().commit();
    } catch (Exception e) {
      e.printStackTrace();
      em.getTransaction().rollback();
    } finally {
      em.close();
    }
  }
}
