/*Programmvariante, mit der Ueberschneidungen
 * kaum möglich sind */
package aufgabe06;

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

/**
 *
 * @author skleuker
 */
public class Main1 {
  
  private EntityManagerFactory emf = Persistence.
          createEntityManagerFactory("Aufgabe08sose10PU");
  private EntityManager em ;
  
  private void startEm(){
    if(em!=null && em.isOpen())
      em.close();
    em = emf.createEntityManager();
    em.getTransaction().begin();
  }
  
  private void endeEm(){
    if(em!=null && em.isOpen()){
      if (em.getTransaction().isActive())
        em.getTransaction().commit();
      //em.flush();
      em.close();
    }
  }
  
  public void neuesDing(String name){
    Ding d= new Ding(name);
    startEm();
    em.persist(d);
    endeEm();
  }
  
  public void zeigeDinge(){
    startEm();
    for (Ding d: (List<Ding>) em.
                 createQuery("SELECT d FROM Ding d").
                 getResultList())
      System.out.println(d);
    endeEm();
  }
  
  public void aendereName(int id, String name){
   startEm();
   Ding d= (Ding)em.find(Ding.class, id);
    if (d==null){
      System.out.println("Gibbet nich");
      return;
    }
    d.setName(name);
    em.persist(d);
    endeEm();
  }

  public void dialog() {
    int ein = -1;
    neuesDing("Handtuch");
    neuesDing("Babelfisch");
    Scanner sc = new Scanner(System.in);
    while (ein != 0) {
      System.out.println("(0) Ende\n" + "(1) neues Ding\n" + "(2) Dinge zeigen\n" + "(3) Dingname ändern: ");
      ein = sc.nextInt();
      switch (ein) {
        case 1:
          System.out.print("Name: ");
          neuesDing(sc.next());
          break;
        case 2:
          zeigeDinge();
          break;
        case 3:
          System.out.print("Nummer: ");
          int id = sc.nextInt();
          System.out.print("neuer Name: ");
          aendereName(id, sc.next());
          break;
      }
    }
  }

  public static void main(String[] args) {
    new Main1().dialog();
  }
}
