package jpa20beispiel1;

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

public class Main {

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

  public void beispieldaten() {
    String namen[] = {"Egon", "Erwin", "Ute", "Aische"};
    em.getTransaction().begin();
    for (String n : namen) {
      Mitarbeiter m = new Mitarbeiter();
      m.setName(n);
      em.persist(m);
    }
    em.getTransaction().commit();
  }

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

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

  public void namenAendern() {
    long eingabe = -1;
    while (eingabe != 0) {
      System.out.print("Welche Nummer (Ende mit 0): ");
      eingabe = new Scanner(System.in).nextLong();
      Mitarbeiter m = em.find(Mitarbeiter.class, eingabe);
      if (m == null) {
        System.out.println("Witzbold");
      } else {
        System.out.print("Neuer Name (alt:" + m.getName() + "): ");
        String name = new Scanner(System.in).next();
        EntityTransaction tr = em.getTransaction();
        tr.begin();
        m.setName(name);
        tr.commit();
      }
    }
  }

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

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

  public static void main2(String[] args) {
    EntityManagerFactory emf =
            Persistence.createEntityManagerFactory("JPA20Beispiel1PU");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.persist(new Mitarbeiter("ET"));
    em.persist(new Mitarbeiter("JFK"));
    for (int i = 1; i < 3; i++) {
      System.out.println(em.find(Mitarbeiter.class, i));
    }
    em.getTransaction().commit();
    em.close();
  }

  public static void main(String[] args) {
    EntityManagerFactory emf =
            Persistence.createEntityManagerFactory("JPA20Beispiel1PU");
    EntityManager em = emf.createEntityManager();
    Mitarbeiter m1 = new Mitarbeiter("Ford");
    Mitarbeiter m2 = new Mitarbeiter("Arthur");
    em.getTransaction().begin();
    em.persist(m1);
    em.persist(m2);
    em.getTransaction().commit();
    /*
    for (Mitarbeiter m : em.createQuery("SELECT m FROM Mitarbeiter m", Mitarbeiter.class).
            getResultList()) {
      System.out.println(m.getId() + ": " + m.getName());
    }
     *
     */
    //em.close();
    //em = emf.createEntityManager();
    m1.setName("Manta");
    //m1=em.merge(m1);
    
    for (Mitarbeiter m : em.createQuery("SELECT m FROM Mitarbeiter m", Mitarbeiter.class).
            getResultList()) {
      System.out.println(m.getId() + ": " + m.getName());
    }
    em.refresh(m1);
    System.out.println(m1);
    //em.flush();
    em.close();
    /*
    Mitarbeiter m3=em.find(Mitarbeiter.class, 1);
    System.out.println(m3);
    for (Mitarbeiter m : em.createQuery("SELECT m FROM Mitarbeiter m", Mitarbeiter.class).
            getResultList()) {
      System.out.println(m.getId() + ": " + m.getName());
    }
     * 
     */
  }
}

