/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jpa20beispiel2;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author x
 */
public class Main {

  private EntityManagerFactory eMF =
          Persistence.createEntityManagerFactory("JPA20Beispiel2PU");
  private EntityManager em = eMF.createEntityManager();

  public void datenAnlegen() {
    String p[] = {"Hotel", "Noten", "Belegung"};
    String a[] = {"Analyse", "Modell", "Design"};
    em.getTransaction().begin();
    for (int i = 0; i < p.length; i++) {
      Projekt pr = new Projekt();
      pr.setName(p[i]);
      for (int j = 0; j < a.length; j++) {
        Projektauftrag pa = new Projektauftrag();
        pa.setTitel(a[j]);
        Set<Projektauftrag> tmp = pr.getAuftraege();
        tmp.add(pa);
      }
      em.persist(pr);
      System.out.println(pr);
    }
    em.getTransaction().commit();
  }

  public void mitarbeiterZuordnen() {
    Mitarbeiter m[] = {new Mitarbeiter("Egon"), new Mitarbeiter("Aische"),
      new Mitarbeiter("Urs")};
    em.getTransaction().begin();
    for (int i = 0; i < m.length; i++) {
      em.persist(m[i]);
    }
    //em.getTransaction().commit();
    for (Projektauftrag p : (List<Projektauftrag>) em.createQuery("SELECT p FROM Projektauftrag p").
            getResultList()) {
      if (p.getTitel().equals("Analyse")) {
        m[0].auftragHinzu(p);
        p.setBearbeiter(m[0]);
      } else {
        m[1].auftragHinzu(p);
        p.setBearbeiter(m[1]);
      }
      //em.merge(p);
    }
     em.getTransaction().commit();
  }

  public void anzeigen() {
    String entitaeten[] = {"Mitarbeiter", "Projektauftrag", "Projekt"};
    for (int i = 0; i < entitaeten.length; i++) {
      String anfrage = "SELECT o FROM " + entitaeten[i] + " o";
      Query query = em.createQuery(anfrage);
      Collection erg = query.getResultList();
      System.out.println(entitaeten[i]);
      for (Iterator it = erg.iterator(); it.hasNext();) {
        System.out.println(it.next());
      }
    }
  }

  public static void main(String[] args) {
    Main jpa = new Main();
    jpa.datenAnlegen();
    jpa.mitarbeiterZuordnen();
    jpa.anzeigen();
  }
}
