Skip to content
Snippets Groups Projects
Commit 830b16c2 authored by Stefan T. Ruehl's avatar Stefan T. Ruehl
Browse files

Cleanup

parent d214fc16
Branches savpoint
No related tags found
No related merge requests found
Showing
with 1 addition and 917 deletions
...@@ -21,7 +21,7 @@ plugins { ...@@ -21,7 +21,7 @@ plugins {
} }
// Define the main class for the application // Define the main class for the application
mainClassName = 'de.hda.fbi.db2.stud.Main' mainClassName = 'de.hda.fbi.db2.Main'
tasks.withType(SpotBugsTask) { tasks.withType(SpotBugsTask) {
reports { reports {
......
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;
}
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();
}
}
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();
}
}
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));
}
}
}
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;
}
}
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();
}
}
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);
}
}
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();
}
}
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();
}
}
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;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment