From 830b16c2a448d18f34f858902eead068e0c41af9 Mon Sep 17 00:00:00 2001 From: "Stefan T. Ruehl" <stefan.ruehl@h-da.de> Date: Thu, 22 Aug 2019 09:38:59 +0200 Subject: [PATCH] Cleanup --- build.gradle | 2 +- .../fbi/db2/stud/EntityManagerController.java | 31 -- .../de/hda/fbi/db2/stud/entity/Answer.java | 59 ---- .../de/hda/fbi/db2/stud/entity/Category.java | 65 ---- .../java/de/hda/fbi/db2/stud/entity/Game.java | 330 ------------------ .../de/hda/fbi/db2/stud/entity/Player.java | 35 -- .../de/hda/fbi/db2/stud/entity/Question.java | 70 ---- .../hda/fbi/db2/stud/impl/Lab01DataImpl.java | 104 ------ .../db2/stud/impl/Lab02EntityManagerImpl.java | 28 -- .../hda/fbi/db2/stud/impl/Lab03GameImpl.java | 80 ----- .../fbi/db2/stud/impl/Lab04MassDataImpl.java | 114 ------ 11 files changed, 1 insertion(+), 917 deletions(-) delete mode 100644 src/main/java/de/hda/fbi/db2/stud/EntityManagerController.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/entity/Answer.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/entity/Category.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/entity/Game.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/entity/Player.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/entity/Question.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/impl/Lab01DataImpl.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/impl/Lab02EntityManagerImpl.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/impl/Lab03GameImpl.java delete mode 100644 src/main/java/de/hda/fbi/db2/stud/impl/Lab04MassDataImpl.java diff --git a/build.gradle b/build.gradle index b2653b8..a5fd06b 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ plugins { } // Define the main class for the application -mainClassName = 'de.hda.fbi.db2.stud.Main' +mainClassName = 'de.hda.fbi.db2.Main' tasks.withType(SpotBugsTask) { reports { diff --git a/src/main/java/de/hda/fbi/db2/stud/EntityManagerController.java b/src/main/java/de/hda/fbi/db2/stud/EntityManagerController.java deleted file mode 100644 index 163dac7..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/EntityManagerController.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hda.fbi.db2.stud; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; - -/** - * EntityManagerController Created by l.koehler on 05.08.2019. - */ -public class EntityManagerController { - - private static EntityManagerController entityManagerController; - - private EntityManagerController() { - EntityManagerFactory emf = Persistence.createEntityManagerFactory("postgresPU"); - this.entityManager = emf.createEntityManager(); - } - - public static EntityManagerController getInstance() { - if (entityManagerController == null) { - entityManagerController = new EntityManagerController(); - } - return entityManagerController; - } - - public EntityManager getEntityManager() { - return entityManager; - } - - private EntityManager entityManager; -} diff --git a/src/main/java/de/hda/fbi/db2/stud/entity/Answer.java b/src/main/java/de/hda/fbi/db2/stud/entity/Answer.java deleted file mode 100644 index 08233bd..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/entity/Answer.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.hda.fbi.db2.stud.entity; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToOne; - -/** - * Answer - * Created by l.koehler on 05.08.2019. - */ -@Entity -public class Answer { - - @Id - @GeneratedValue - private long id; - - @ManyToOne - private Question question; - - private String name; - - private boolean correct; - - public Answer(String name, boolean correct, Question question) { - this.name = name; - this.correct = correct; - this.question = question; - } - - public Answer() {} - - public String getName() { - return name; - } - - public void setQuestion(Question question) { - this.question = question; - } - - public boolean isCorrect() { - return correct; - } - - public long getId() { - return id; - } - - @Override - public boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/entity/Category.java b/src/main/java/de/hda/fbi/db2/stud/entity/Category.java deleted file mode 100644 index a500405..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/entity/Category.java +++ /dev/null @@ -1,65 +0,0 @@ -package de.hda.fbi.db2.stud.entity; - -import java.util.ArrayList; -import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToMany; - -/** - * Category Created by l.koehler on 05.08.2019. - */ -@Entity -public class Category { - - public Category() { - } - - @Id - @GeneratedValue - private Long id; - - @Column(unique = true) - private String name; - - @OneToMany(mappedBy = "category", cascade = {CascadeType.PERSIST}) - private List<Question> questions; - - public Category(String name) { - this.questions = new ArrayList<>(); - this.name = name; - } - - public void addQuestion(Question question) { - this.questions.add(question); - } - - public int getQuestionSize() { - return questions.size(); - } - - public List<Question> getQuestions() { - return questions; - } - - public String getName() { - return name; - } - - public Long getId() { - return id; - } - - @Override - public boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/entity/Game.java b/src/main/java/de/hda/fbi/db2/stud/entity/Game.java deleted file mode 100644 index 02fd733..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/entity/Game.java +++ /dev/null @@ -1,330 +0,0 @@ -package de.hda.fbi.db2.stud.entity; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import javax.persistence.Entity; -import javax.persistence.EntityManager; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToMany; -import javax.persistence.OneToOne; -import javax.persistence.Transient; -import de.hda.fbi.db2.stud.EntityManagerController; - -/** - * Game Created by l.koehler on 05.08.2019. - */ -@Entity -public class Game { - - @Id - @GeneratedValue - private Long id; - - @OneToOne - private Player player; - - public Player getPlayer() { - return player; - } - - @Transient - private List<Question> questions; - - private int countOfQuestions; - - @ManyToMany - private List<Answer> givenAnswers; - - public List<Answer> getGivenAnswers() { - return givenAnswers; - } - - private Timestamp timestamp; - - public Game(Player player, List<Question> questions, int countOfQuestions, Timestamp timestamp) { - givenAnswers = new ArrayList<>(); - this.questions = questions; - this.countOfQuestions = countOfQuestions; - this.player = player; - this.timestamp = new Timestamp(timestamp.getTime()); - } - - public Game() { - givenAnswers = new ArrayList<>(); - timestamp = new Timestamp(System.currentTimeMillis()); - } - - public Game(String playerName, List<Object> questions) { - givenAnswers = new ArrayList<>(); - timestamp = new Timestamp(System.currentTimeMillis()); - - try { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - List users = em - .createQuery("select player from Player player where player.name = '" + playerName + "'") - .getResultList(); - em.getTransaction().commit(); - if (users.isEmpty()) { - player = new Player(playerName); - em.getTransaction().begin(); - em.persist(player); - em.getTransaction().commit(); - } else { - player = (Player) users.get(0); - } - } catch (Exception e) { - e.printStackTrace(); - } - countOfQuestions = 3; - this.questions = (List<Question>) (List<?>) questions; - } - - public void readData() { - player = choosePlayer(); - List<Category> cat = chooseCategories(); - countOfQuestions = chooseCountOfQuestions(); - questions = filterQuestions(cat); - } - - private List<Question> filterQuestions(List<Category> categories) { - Random rand = new Random(); - List<Question> questions = new ArrayList<>(); - for (Category cat : categories) { - while (cat.getQuestionSize() > countOfQuestions) { - int n = rand.nextInt(cat.getQuestionSize()); - cat.getQuestions().remove(n); - } - - questions.addAll(cat.getQuestions()); - } - - return questions; - } - - private int chooseCountOfQuestions() { - do { - try { - System.out.println("Wählen sie aus wie viele Fragen pro Kategorie sie wollen"); - - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - String input = reader.readLine(); - if (input == null) { - continue; - } - int number = Integer.parseInt(input); - if (number <= 0) { - System.out.println("Geben sie ein ganzzahlige positive Zahl ein! Dummkopf!"); - } else { - return number; - } - - } catch (Exception e) { - System.out.println("Geben sie bitte eine ganzzahlige Zahl ein! Dummkopf"); - } - } while (true); - } - - private List<Category> chooseCategories() { - try { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - List categories = em.createQuery("select category from Category category").getResultList(); - List<Category> choosedCategories = new ArrayList<>(); - em.getTransaction().commit(); - - for (Object objectCat : categories) { - Category currentCat = (Category) objectCat; - System.out.println(currentCat.getId() + ": " + currentCat.getName()); - } - - System.out.println("Wählen Sie Kategorien indem sie die ID eingeben und enter drücken. " + - "Mit -1 beenden sie die Eingabe. Wählen sie mindestens 2 Kategorien aus"); - - do { - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - String input = reader.readLine(); - - if (input == null) { - continue; - } - if (input.equals("-1")) { - if (choosedCategories.size() < 2) { - System.out.println("Zu wenig categorien"); - } else { - System.out.println("Choosed:"); - for (Category cat : choosedCategories) { - System.out.println(cat.getId() + ": " + cat.getName()); - } - return choosedCategories; - } - } else { - boolean found = false; - for (Object objectCat : categories) { - Category currentCat = (Category) objectCat; - - if (currentCat.getId().toString().equals(input)) { - choosedCategories.add(currentCat); - found = true; - } - } - if (!found) { - System.out.println("Keine passende Kategorie gefunden"); - } - } - - } while (true); - - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - - private Player choosePlayer() { - try { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - List users = em.createQuery("select player from Player player").getResultList(); - em.getTransaction().commit(); - Player player; - if (users.isEmpty()) { - System.out.println("Es existieren noch keine Player. Ein neuer Player wird angelegt."); - player = createPlayer(); - } else { - do { - System.out.println("Wählen sie einen Spieler anhand der ID aus:"); - for (Object currentObject : users) { - Player currentPlayer = (Player) currentObject; - System.out.println(currentPlayer.getId() + ": " + currentPlayer.getName()); - } - - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - String input = reader.readLine(); - - for (Object currentObject : users) { - Player currentPlayer = (Player) currentObject; - if (currentPlayer.getId().toString().equals(input)) { - return currentPlayer; - } - } - - System.out.println("Keine gültige ID"); - - } while (true); - } - return player; - - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - - private Player createPlayer() { - try { - System.out.println("Geben Sie Ihren Namen ein:"); - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - String name = reader.readLine(); - - Player player = new Player(name); - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - em.persist(player); - em.getTransaction().commit(); - - return player; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public void playGame() { - System.out.println("Das Spiel beginnt. Geben Sie als Antwort den Index an."); - int questionCounter = 1; - for (Question question : questions) { - System.out.println("Frage " + questionCounter++ + ":"); - System.out.println("Kategorie: " + question.getCategory().getName()); - System.out.println(question.getName()); - for (int i = 0; i < question.getAnswerCount(); i++) { - Answer ans = question.getAnswers().get(i); - System.out.println("\t" + (i + 1) + ": " + ans.getName()); - } - - int givenAns = -1; - do { - try { - BufferedReader reader = - new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - String input = reader.readLine(); - if (input == null) { - continue; - } - int ansI = Integer.parseInt(input); - if (ansI <= 0 || ansI > question.getAnswerCount()) { - System.out.println("Ungültige Eingabe!"); - } else { - givenAns = ansI; - break; - } - } catch (Exception e) { - System.out.println("Falsche eingabe!"); - } - } while (true); - - int size = question.getAnswers().size(); - int remove = 0; - for (int i = 0; i < size; i++) { - if (i != (givenAns - 1)) { - question.getAnswers().remove(remove); - } else { - remove++; - } - } - - givenAnswers.add(question.getAnswers().get(0)); - if (question.getAnswers().get(0).isCorrect()) { - System.out.println("Die Antwort ist richig :)"); - } else { - System.out.println("Die Antwort ist leider falsch :("); - } - System.out.println("\n"); - } - - System.out.println("Das Spiel ist zu Ende"); - } - - public void printStats() { - System.out.println("ID: " + id); - System.out.println("Datum: " + timestamp.toString()); - int correct = 0; - for (Answer ans : givenAnswers) { - if (ans.isCorrect()) { - correct++; - } - } - System.out.println("Percentage: " + correct + "/" + givenAnswers.size() + - " (" + correct / givenAnswers.size() * 100 + ")"); - } - - public void simulatePlay() { - Random randAns = new Random(); - for (Question question : questions) { - int ans = randAns.nextInt(4); - givenAnswers.add(question.getAnswers().get(ans)); - } - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/entity/Player.java b/src/main/java/de/hda/fbi/db2/stud/entity/Player.java deleted file mode 100644 index 41f2375..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/entity/Player.java +++ /dev/null @@ -1,35 +0,0 @@ -package de.hda.fbi.db2.stud.entity; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -/** - * Player Created by l.koehler on 05.08.2019. - */ -@Entity -public class Player { - - public Player() { - } - - public Player(String name) { - this.name = name; - } - - @Id - @GeneratedValue - private Long id; - - @Column(unique = true, nullable = false) - private String name; - - public Long getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/entity/Question.java b/src/main/java/de/hda/fbi/db2/stud/entity/Question.java deleted file mode 100644 index ec1b578..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/entity/Question.java +++ /dev/null @@ -1,70 +0,0 @@ -package de.hda.fbi.db2.stud.entity; - -import java.util.ArrayList; -import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; - -/** - * Question Created by l.koehler on 05.08.2019. - */ -@Entity -public class Question { - - public Question() { - } - - @Id - private long id; - - @ManyToOne - private Category category; - - private String name; - - @OneToMany(mappedBy = "question", cascade = {CascadeType.PERSIST}) - private List<Answer> answers; - - public Question(String name, long id) { - this.answers = new ArrayList<>(); - this.name = name; - this.id = id; - } - - public void addAnswer(Answer answer) { - this.answers.add(answer); - } - - public int getAnswerCount() { - return answers.size(); - } - - public List<Answer> getAnswers() { - return answers; - } - - public String getName() { - return name; - } - - public void setCategory(Category category) { - this.category = category; - } - - public Category getCategory() { - return category; - } - - @Override - public boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/impl/Lab01DataImpl.java b/src/main/java/de/hda/fbi/db2/stud/impl/Lab01DataImpl.java deleted file mode 100644 index 263c019..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/impl/Lab01DataImpl.java +++ /dev/null @@ -1,104 +0,0 @@ -package de.hda.fbi.db2.stud.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import de.hda.fbi.db2.api.Lab01Data; -import de.hda.fbi.db2.stud.entity.Answer; -import de.hda.fbi.db2.stud.entity.Category; -import de.hda.fbi.db2.stud.entity.Question; - -/** - * Lab01DataImpl Created by l.koehler on 05.08.2019. - */ -public class Lab01DataImpl extends Lab01Data { - - private HashMap<String, Category> categoryMap; - - private List<Object> questions; - - private List<Object> cateogories; - - @Override - public List<Object> getQuestions() { - if (questions == null) { - questions = new ArrayList<>(); - for (Map.Entry<String, Category> entry : categoryMap.entrySet()) { - questions.addAll(entry.getValue().getQuestions()); - } - } - return questions; - } - - @Override - public List<Object> getCategories() { - if (cateogories == null) { - cateogories = new ArrayList<>(); - for (Map.Entry<String, Category> entry : categoryMap.entrySet()) { - cateogories.add(entry.getValue()); - } - } - return cateogories; - } - - @Override - public void loadCsvFile(List<String[]> additionalCsvLines) { - categoryMap = new HashMap<>(); - - for (int i = 1; i < additionalCsvLines.size(); i++) { - String[] currentLine = additionalCsvLines.get(i); - long id = Long.parseLong(currentLine[0]); - String questionString = currentLine[1]; - String ans1 = currentLine[2]; - String ans2 = currentLine[3]; - String ans3 = currentLine[4]; - String ans4 = currentLine[5]; - int solution = Integer.parseInt(currentLine[6]); - String cat = currentLine[7]; - - Question question = new Question(questionString, id); - question.addAnswer(new Answer(ans1, solution == 1, question)); - question.addAnswer(new Answer(ans2, solution == 2, question)); - question.addAnswer(new Answer(ans3, solution == 3, question)); - question.addAnswer(new Answer(ans4, solution == 4, question)); - - if (categoryMap.containsKey(cat)) { - Category category = categoryMap.get(cat); - category.addQuestion(question); - } else { - Category category = new Category(cat); - category.addQuestion(question); - categoryMap.put(cat, category); - } - - question.setCategory(categoryMap.get(cat)); - } - - printStats(categoryMap); - } - - private void printStats(Map<String, Category> categoryMap) { - int catCount = categoryMap.size(); - int questionCount = 0; - int ansCount = 0; - - for (Category cat : categoryMap.values()) { - System.out.println(cat.getName()); - - questionCount += cat.getQuestionSize(); - for (Question ques : cat.getQuestions()) { - System.out.println("\t" + ques.getName()); - ansCount += ques.getAnswerCount(); - - for (Answer ans : ques.getAnswers()) { - System.out.println("\t\t" + ans.getName()); - } - } - } - System.out.println("\n\n\n"); - System.out.println("Categories: " + catCount); - System.out.println("Questions: " + questionCount); - System.out.println("Answers: " + ansCount); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/impl/Lab02EntityManagerImpl.java b/src/main/java/de/hda/fbi/db2/stud/impl/Lab02EntityManagerImpl.java deleted file mode 100644 index 74c9c18..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/impl/Lab02EntityManagerImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.hda.fbi.db2.stud.impl; - -import javax.persistence.EntityManager; -import de.hda.fbi.db2.api.Lab02EntityManager; -import de.hda.fbi.db2.stud.EntityManagerController; - -/** - * Lab02EntityManagerImpl Created by l.koehler on 05.08.2019. - */ -public class Lab02EntityManagerImpl extends Lab02EntityManager { - - @Override - public EntityManager getEntityManager() { - return EntityManagerController.getInstance().getEntityManager(); - } - - @Override - public void persistData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - for (Object category : lab01Data.getCategories()) { - em.persist(category); - } - - em.getTransaction().commit(); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/impl/Lab03GameImpl.java b/src/main/java/de/hda/fbi/db2/stud/impl/Lab03GameImpl.java deleted file mode 100644 index 3cfe33c..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/impl/Lab03GameImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package de.hda.fbi.db2.stud.impl; - -import java.util.List; -import javax.persistence.EntityManager; -import de.hda.fbi.db2.api.Lab03Game; -import de.hda.fbi.db2.stud.EntityManagerController; -import de.hda.fbi.db2.stud.entity.Answer; -import de.hda.fbi.db2.stud.entity.Game; - -/** - * Lab03GameImpl Created by l.koehler on 05.08.2019. - */ -public class Lab03GameImpl extends Lab03Game { - - @Override - public Object createGame() { - Game game = new Game(); - game.readData(); - return game; - } - - @Override - public void playGame(Object game) { - ((Game) game).playGame(); - } - - @Override - public Object createGame(String playerName, List<Object> questions) { - return new Game(playerName, questions); - } - - @Override - public void simulateGame(Object game) { - ((Game) game).simulatePlay(); - } - - @Override - public Object getPlayer(Object game) { - return ((Game) game).getPlayer(); - } - - @Override - public Object getPlayer(String name) { - try { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - List users = em - .createQuery("select player from Player player where player.name = '" + name + "'") - .getResultList(); - em.getTransaction().commit(); - if (users.isEmpty()) { - return null; - } else { - return users.get(0); - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - @Override - public int getRightAnswers(Object game) { - int counter = 0; - for (Answer ans : ((Game) game).getGivenAnswers()) { - if (ans.isCorrect()) { - counter = counter + 1; - } - } - return counter; - } - - @Override - public void persistGame(Object game) { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - em.persist(game); - em.getTransaction().commit(); - } -} diff --git a/src/main/java/de/hda/fbi/db2/stud/impl/Lab04MassDataImpl.java b/src/main/java/de/hda/fbi/db2/stud/impl/Lab04MassDataImpl.java deleted file mode 100644 index c4d0100..0000000 --- a/src/main/java/de/hda/fbi/db2/stud/impl/Lab04MassDataImpl.java +++ /dev/null @@ -1,114 +0,0 @@ -package de.hda.fbi.db2.stud.impl; - -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import javax.persistence.EntityManager; -import de.hda.fbi.db2.api.Lab04MassData; -import de.hda.fbi.db2.stud.EntityManagerController; -import de.hda.fbi.db2.stud.entity.Category; -import de.hda.fbi.db2.stud.entity.Game; -import de.hda.fbi.db2.stud.entity.Player; -import de.hda.fbi.db2.stud.entity.Question; - -/** - * Lab04MassDataImpl Created by l.koehler on 05.08.2019. - */ -public class Lab04MassDataImpl extends Lab04MassData { - - private int persistCounter = 0; - - private Map<String, Category> categoryMap; - - @Override - public void createMassData() { - categoryMap = new HashMap<>(); - for (Object current : lab01Data.getCategories()) { - Category cat = (Category) current; - categoryMap.put(cat.getName(), cat); - } - - Timestamp start = new Timestamp(System.currentTimeMillis()); - Timestamp end = new Timestamp((long) (System.currentTimeMillis() - 1.21e9)); - createRandomData(10, 100, - end, start, - 3, 10, - 3, 5); - } - - public void createRandomData(int gamers, int games, - Timestamp startDate, Timestamp stopDate, - int minQuestions, int maxQuestions, - int minCat, int maxCat) { - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.getTransaction().begin(); - - Random randDate = new Random(); - Random randQuestion = new Random(); - Random randCat = new Random(); - int randomPlayer = 0; - for (int gamerI = 0; gamerI < gamers; gamerI++) { - Player player = new Player("Player" + randomPlayer++); - em.persist(player); - for (int gameI = 0; gameI < games; gameI++) { - //System.out.println("Gamer: " + gamerI + "Game: " + gameI); - long randomDate = randDate.nextInt((int) (stopDate.getTime() - startDate.getTime()) + 1) - + startDate.getTime(); - Timestamp timestamp = new Timestamp(randomDate); - int questionNumber = randQuestion.nextInt(maxQuestions - minQuestions + 1) - + minQuestions; - int catNumber = randCat.nextInt(maxCat - minCat + 1) + minCat; - - List<Question> questions = getRandomQuestions(catNumber, questionNumber); - - createGame(player, timestamp, questions, maxQuestions); - } - } - - em.getTransaction().commit(); - } - - private List<Question> getRandomQuestions(int catNumber, int questionNumber) { - List<Question> returnQuestions = new ArrayList<>(); - List<Category> categories = new ArrayList<>(categoryMap.values()); - Collections.shuffle(categories); - - Category cat; - int questionPerCat = questionNumber / catNumber; - if (questionPerCat <= 0) { - questionPerCat = 1; - } - int catCount = 0; - do { - cat = categories.get(catCount++); - List<Question> questions = cat.getQuestions(); - Collections.shuffle(questions); - for (int i = 0; i < questions.size(); i++) { - if (i == questionPerCat || returnQuestions.size() >= questionNumber) { - break; - } else { - returnQuestions.add(questions.get(i)); - } - } - } while (returnQuestions.size() < questionNumber); - - return returnQuestions; - } - - private void createGame(Player player, Timestamp timestamp, List<Question> questions, - int maxQuestions) { - Game game = new Game(player, questions, maxQuestions, timestamp); - game.simulatePlay(); - EntityManager em = EntityManagerController.getInstance().getEntityManager(); - em.persist(game); - if (persistCounter++ == 5000) { - em.flush(); - em.clear(); - persistCounter = 0; - } - } -} -- GitLab