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

import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

/**
 *
 * @author x
 */
public class Main<T> {

  /**
   * zum logger ausschalten bei den jars
   * slf4j-log4j12-1.5.6.jar slf4j-api-1.5.6
   * ersetzen durch
   * slf4j-nop-1.5.11.jar slf4j-api-1.5.11
   */
  public static void main0(String[] args) {
    Main<Student> m = new Main<Student>();
    Student s = new Student();
    s.setMatnr(42);
    s.setName("Anschie");
    System.out.println(s);
    m.analyse(s);
    s.setMatnr(17);
    s.setName("123456789");
    m.analyse(s);
  }

  public int analyse(T o, Class... cl) {
    System.out.println("Analyse von " + o);
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<T>> cv =
            validator.validate(o, cl);
    for (ConstraintViolation<T> c : cv) {
      System.out.println(" :: " + c.getMessage());
    }
    return cv.size();
  }

  public static void mainStudent(String[] args) {
    Main<Student> m = new Main<Student>();
    Student s = new Student();
    m.analyse(s);
    s.setMatnr(424242);
    s.setName("Anschie");
    m.analyse(s);
    s.setMatnr(43);
    s.setName("123456789");
    m.analyse(s);
  }

  public static void mainStudent2(String[] args) {
    Main<Student2> m = new Main<Student2>();
    Student2 s = new Student2();
    m.analyse(s);
    s.setMatnr(424242);
    s.setName("Anschie");
    m.analyse(s);
    s.setMatnr(43);
    s.setName("123456789");
    m.analyse(s);
  }

  public static void mainStudent3(String[] args) {
    Main<Student3> ms = new Main<Student3>();
    Main<Modul> mm = new Main<Modul>();
    Modul bah = new Modul(42, "C-Techniken", 0, 31, 5.5);
    mm.analyse(bah);
    Student3 s = new Student3();
    s.setMatnr(4242);
    s.setName("Anschie");
    s.bestanden(bah);
    ms.analyse(s);
  }

  public static void mainValidierungen(String[] args) {
    Modul bah = new Modul(42, "C-Techniken", 0, 31, 5.0);
    ValidatorFactory ft = Validation.buildDefaultValidatorFactory();
    Validator validator = ft.getValidator();
    Set<ConstraintViolation<Modul>> cv =
            validator.validateProperty(bah, "titel");
    System.out.println("titel: " + cv.size());
    cv = validator.validateProperty(bah, "cp");
    System.out.println("cp: " + cv.size());
    cv = validator.validateValue(Modul.class, "titel", null);
    System.out.println("titel als null: " + cv.size());
  }

  public static void mainModul2(String[] args) {
    Main<Modul2> mm = new Main<Modul2>();
    Modul2 bah = new Modul2(42, "C-Techniken", 0, 31, 5.55);
    mm.analyse(bah);
    mm.analyse(bah, AbschlussChecks.class);
    mm.analyse(bah, AnlegenChecks.class);
    mm.analyse(bah, AbschlussChecks.class, AnlegenChecks.class);
    bah.setTitel(null);
    mm.analyse(bah);
    mm.analyse(bah, javax.validation.groups.Default.class);
  }

  public static void mainModul3(String[] args) {
    Main<Modul3> mm = new Main<Modul3>();
    Modul3 bah = new Modul3(42, "C-Techniken", 0, 31, 4.3);
    mm.analyse(bah);
    bah.setNote(5.0);
    mm.analyse(bah);
    bah.setNote(2.3);
    mm.analyse(bah);
  }

   public static void main(String[] args) {
    mainModul3(args);
   }
}

