public static void main(String[] args) {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("elo");
		entityManager = factory.createEntityManager();
		entityManager.getTransaction().begin();

		EloPersistence ep = new EloPersistence();
		ep.setEntityManager(entityManager);
		
		if(ep.findAll(Spieler.class).size() > 0) {
			System.out.println("Daten wurden bereits migriert!");
			entityManager.close();
			factory.close();
			return;
		}
		
		initAlteElo(entityManager);
		
		EloPersistenceAlt epa = new EloPersistenceAlt();
		epa.setEntityManager(entityManager);
		EloService es = new EloService();
//		es.setEloCalculationStrategy(new LegacyEloCalculationStrategy());
		SpielerService ssv = new SpielerService();
		ssv.setEloPersistence(ep);
		SpielService sps = new SpielService();
		sps.setEloPersistence(ep);
		sps.setEloService(es);
		TeamService ts = new TeamService();
		ts.setEloPersistence(ep);

		List<SpielAlt> alteSpiele = epa.findAllSpiele();
		filter(alteSpiele);
		int total = alteSpiele.size();
		int count = 0;
		System.out.println(alteSpiele.size() + " matches werden migriert ...");
		long start = System.currentTimeMillis();
		for (SpielAlt spielAlt : alteSpiele) {
			count++;
			Spieler s1 = migrateSpieler(ssv, spielAlt.getSpieler1(), spielAlt.getTimestamp());
			Spieler s2 = migrateSpieler(ssv, spielAlt.getSpieler2(), spielAlt.getTimestamp());
			Spieler s3 = migrateSpieler(ssv, spielAlt.getSpieler3(), spielAlt.getTimestamp());
			Spieler s4 = migrateSpieler(ssv, spielAlt.getSpieler4(), spielAlt.getTimestamp());
			Team t1 = migrateTeam(ts, s1, s2, spielAlt.getTimestamp());
			Team t2 = migrateTeam(ts, s3, s4, spielAlt.getTimestamp());
			migrateSpiel(sps, spielAlt, t1, t2);
			if (count % 80 == 0) {
				System.out.println();
			}
			System.out.print('.');
			if (count % 500 == 0) {
				System.out.print(count);
				System.out.print(" (");
				System.out.print(count * 100 / total);
				System.out.print("%) - ");
				double permin = (double)500 / (double)(System.currentTimeMillis() - start) * 1000 * 60;
				System.out.print(permin);
				System.out.println(" rows/minute");
				start = System.currentTimeMillis();
			}
		}

		entityManager.flush();
		entityManager.getTransaction().commit();
		
	}