From 2d2485be20caf1b4bb8f2d95919d55de73c78393 Mon Sep 17 00:00:00 2001
From: Martin Staehr <software@mstaehr.net>
Date: Sun, 7 Jul 2019 22:26:24 +0200
Subject: [PATCH] #143 #138 adding reflexion question catalog and learning goal
 catalog to database initialization process

---
 .../model/LearningGoalStoreItem.java          |  14 +++
 .../model/ReflectionQuestionsStoreItem.java   |  27 +++++
 .../service/LearningGoalStoreDAO.java         |  25 ++++
 .../service/ReflectionQuestionsStoreDAO.java  |  23 ++++
 .../PredefinedDataInsertionHelper.java        |  43 +++++++
 .../unipotsdam/gf/core/database/UpdateDB.java |  16 ++-
 .../src/test/resources/database/fltrail.sql   |  70 +++++++++--
 .../learningGoalsStore.json                   |  41 +++++++
 .../reflectionQuestionsStore.json             | 110 ++++++++++++++++++
 .../reflectiveQuestions_original.json}        |   0
 10 files changed, 355 insertions(+), 14 deletions(-)
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/LearningGoalStoreItem.java
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/ReflectionQuestionsStoreItem.java
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/LearningGoalStoreDAO.java
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/ReflectionQuestionsStoreDAO.java
 create mode 100644 gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/PredefinedDataInsertionHelper.java
 create mode 100644 gemeinsamforschen/src/test/resources/reflectionQuestions/learningGoalsStore.json
 create mode 100644 gemeinsamforschen/src/test/resources/reflectionQuestions/reflectionQuestionsStore.json
 rename gemeinsamforschen/src/{main/resources/reflectiveQuestions/reflectiveQuestions.json => test/resources/reflectionQuestions/reflectiveQuestions_original.json} (100%)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/LearningGoalStoreItem.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/LearningGoalStoreItem.java
new file mode 100644
index 00000000..08e5a74b
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/LearningGoalStoreItem.java
@@ -0,0 +1,14 @@
+package unipotsdam.gf.modules.reflection.model;
+
+public class LearningGoalStoreItem {
+
+    private String text;
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/ReflectionQuestionsStoreItem.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/ReflectionQuestionsStoreItem.java
new file mode 100644
index 00000000..13f86b15
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/model/ReflectionQuestionsStoreItem.java
@@ -0,0 +1,27 @@
+package unipotsdam.gf.modules.reflection.model;
+
+public class ReflectionQuestionsStoreItem {
+
+    private String question;
+    private String learningGoal;
+
+    public String getId() {
+        return question + learningGoal;
+    }
+
+    public String getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+
+    public String getLearningGoal() {
+        return learningGoal;
+    }
+
+    public void setLearningGoal(String learningGoal) {
+        this.learningGoal = learningGoal;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/LearningGoalStoreDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/LearningGoalStoreDAO.java
new file mode 100644
index 00000000..350b1141
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/LearningGoalStoreDAO.java
@@ -0,0 +1,25 @@
+package unipotsdam.gf.modules.reflection.service;
+
+import unipotsdam.gf.modules.reflection.model.LearningGoalStoreItem;
+import unipotsdam.gf.mysql.MysqlConnect;
+
+import javax.annotation.ManagedBean;
+import javax.inject.Inject;
+
+@ManagedBean
+public class LearningGoalStoreDAO {
+
+    private MysqlConnect connection;
+
+    @Inject
+    public LearningGoalStoreDAO(MysqlConnect connection) {
+        this.connection = connection;
+    }
+
+    public void persist(LearningGoalStoreItem learningGoal) {
+        connection.connect();
+        String query = "INSERT INTO learninggoalstore(text) VALUES (?)";
+        connection.issueInsertOrDeleteStatement(query, learningGoal.getText());
+        connection.close();
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/ReflectionQuestionsStoreDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/ReflectionQuestionsStoreDAO.java
new file mode 100644
index 00000000..c548726d
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/reflection/service/ReflectionQuestionsStoreDAO.java
@@ -0,0 +1,23 @@
+package unipotsdam.gf.modules.reflection.service;
+
+import unipotsdam.gf.modules.reflection.model.ReflectionQuestionsStoreItem;
+import unipotsdam.gf.mysql.MysqlConnect;
+
+import javax.inject.Inject;
+
+public class ReflectionQuestionsStoreDAO {
+
+    private MysqlConnect connection;
+
+    @Inject
+    public ReflectionQuestionsStoreDAO(MysqlConnect connection) {
+        this.connection = connection;
+    }
+
+    public void persist(ReflectionQuestionsStoreItem item) {
+        connection.connect();
+        String query = "INSERT INTO reflectionquestionsstore(id,question,learningGoal) VALUES (?,?,?)";
+        connection.issueInsertOrDeleteStatement(query, item.getId(), item.getQuestion(), item.getLearningGoal());
+        connection.close();
+    }
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/PredefinedDataInsertionHelper.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/PredefinedDataInsertionHelper.java
new file mode 100644
index 00000000..01d6d7bd
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/PredefinedDataInsertionHelper.java
@@ -0,0 +1,43 @@
+package unipotsdam.gf.core.database;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import unipotsdam.gf.modules.reflection.model.LearningGoalStoreItem;
+import unipotsdam.gf.modules.reflection.model.ReflectionQuestionsStoreItem;
+import unipotsdam.gf.modules.reflection.service.LearningGoalStoreDAO;
+import unipotsdam.gf.modules.reflection.service.ReflectionQuestionsStoreDAO;
+import unipotsdam.gf.mysql.MysqlConnect;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+public class PredefinedDataInsertionHelper {
+
+    private MysqlConnect connection;
+
+    public PredefinedDataInsertionHelper(MysqlConnect connection) {
+        this.connection = connection;
+    }
+
+    public void saveLearningGoals(String fileName) throws IOException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        InputStream inputStream = new FileInputStream(fileName);
+        List<LearningGoalStoreItem> learningGoalStoreItems = objectMapper.readValue(inputStream, new TypeReference<List<LearningGoalStoreItem>>() {
+        });
+        LearningGoalStoreDAO learningGoalStoreDAO = new LearningGoalStoreDAO(connection);
+        learningGoalStoreItems.forEach(learningGoalStoreDAO::persist);
+    }
+
+    public void saveReflecionQuestions(String fileName) throws IOException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        InputStream inputStream = new FileInputStream(fileName);
+        List<ReflectionQuestionsStoreItem> items = objectMapper.readValue(inputStream, new TypeReference<List<ReflectionQuestionsStoreItem>>() {
+        });
+        ReflectionQuestionsStoreDAO storeDAO = new ReflectionQuestionsStoreDAO(connection);
+        items.forEach(storeDAO::persist);
+    }
+
+
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/UpdateDB.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/UpdateDB.java
index 2485150f..95c550af 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/UpdateDB.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/database/UpdateDB.java
@@ -4,8 +4,16 @@ import ch.vorburger.exec.ManagedProcessException;
 import unipotsdam.gf.mysql.MysqlConnect;
 import unipotsdam.gf.mysql.MysqlConnectImpl;
 
-import java.io.*;
-import java.sql.*;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
 
 public class UpdateDB {
 
@@ -32,6 +40,10 @@ public class UpdateDB {
         System.out.println(new java.io.File( "." ).getCanonicalPath());
         updateDB.runScript(new FileReader("src/test/resources/database/db.sql"));
         updateDB.runScript(new FileReader("src/test/resources/database/fltrail.sql"));
+        MysqlConnectImpl mysqlConnectImpl = new MysqlConnectImpl();
+        PredefinedDataInsertionHelper dataInsertionHelper = new PredefinedDataInsertionHelper(mysqlConnectImpl);
+        dataInsertionHelper.saveLearningGoals("src/test/resources/reflectionQuestions/learningGoalsStore.json");
+        dataInsertionHelper.saveReflecionQuestions("src/test/resources/reflectionQuestions/reflectionQuestionsStore.json");
         //updateDB.runScript(new FileReader("src/test/resources/database/testuser.sql"));
     }
 
diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql
index 56f3f4b5..b0fb5365 100644
--- a/gemeinsamforschen/src/test/resources/database/fltrail.sql
+++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql
@@ -91,13 +91,13 @@ CREATE TABLE `categoriesselected`
 
 CREATE TABLE `contributionfeedback`
 (
-    `id`                         varchar(120) CHARACTER SET utf8 NOT NULL,
-    `fullsubmissionId`           varchar(120) CHARACTER SET utf8 DEFAULT NULL,
-    `fullSubmissionPartCategory` varchar(120) CHARACTER SET utf8 DEFAULT NULL,
-    `text`                       mediumtext CHARACTER SET utf8,
-    `groupId`                    int(11)                         NOT NULL
+    `id`                         varchar(120) NOT NULL,
+    `fullsubmissionId`           varchar(120) DEFAULT NULL,
+    `fullSubmissionPartCategory` varchar(120) DEFAULT NULL,
+    `text`                       mediumtext,
+    `groupId`                    int(11)      NOT NULL
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = uft8 COMMENT ='This table saves feedback for contributions';
+  DEFAULT CHARSET = utf8 COMMENT ='This table saves feedback for contributions';
 
 -- --------------------------------------------------------
 
@@ -232,6 +232,18 @@ CREATE TABLE `largefilestorage`
 
 -- --------------------------------------------------------
 
+--
+-- Tabellenstruktur für Tabelle `learninggoalstore`
+--
+
+CREATE TABLE `learninggoalstore`
+(
+    `text` varchar(400) NOT NULL
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8 COMMENT ='saves predefined learning goals';
+
+-- --------------------------------------------------------
+
 --
 -- Tabellenstruktur für Tabelle `mappedtasks`
 --
@@ -445,17 +457,31 @@ CREATE TABLE `quiz`
 
 CREATE TABLE `reflectionquestions`
 (
-    `id`               varchar(400) CHARACTER SET utf8 NOT NULL,
-    `learningGoalId`   varchar(400) CHARACTER SET utf8 NOT NULL,
-    `question`         varchar(400) CHARACTER SET utf8 NOT NULL,
-    `userEmail`        varchar(255) CHARACTER SET utf8 NOT NULL,
-    `fullSubmissionId` varchar(120) CHARACTER SET utf8 DEFAULT NULL,
-    `projectName`      varchar(100) CHARACTER SET utf8 NOT NULL
+    `id`               varchar(400) NOT NULL,
+    `learningGoalId`   varchar(400) NOT NULL,
+    `question`         varchar(400) NOT NULL,
+    `userEmail`        varchar(255) NOT NULL,
+    `fullSubmissionId` varchar(120) DEFAULT NULL,
+    `projectName`      varchar(100) NOT NULL
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8 COMMENT ='holds all reflection questions students have to answer or had answered';
 
 -- --------------------------------------------------------
 
+--
+-- Tabellenstruktur für Tabelle `reflectionquestionsstore`
+--
+
+CREATE TABLE `reflectionquestionsstore`
+(
+    `id`           varchar(400) NOT NULL,
+    `question`     varchar(400) NOT NULL,
+    `learningGoal` varchar(400) NOT NULL
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8 COMMENT ='holds all predefined reflection questions.';
+
+-- --------------------------------------------------------
+
 --
 -- Tabellenstruktur für Tabelle `submissionpartbodyelements`
 --
@@ -663,6 +689,13 @@ ALTER TABLE `largefilestorage`
     ADD KEY `largefilestorage_projects_name_fk` (`projectName`),
     ADD KEY `largefilestorage_users_email_fk` (`userEmail`);
 
+--
+-- Indizes für die Tabelle `learninggoalstore`
+--
+ALTER TABLE `learninggoalstore`
+    ADD PRIMARY KEY (`text`),
+    ADD UNIQUE KEY `learningGoalStore_text_uindex` (`text`);
+
 --
 -- Indizes für die Tabelle `mappedtasks`
 --
@@ -738,6 +771,13 @@ ALTER TABLE `reflectionquestions`
     ADD KEY `reflexionquestions_users_email_fk` (`userEmail`),
     ADD KEY `reflexionquestions_projects_name_fk` (`projectName`);
 
+--
+-- Indizes für die Tabelle `reflectionquestionsstore`
+--
+ALTER TABLE `reflectionquestionsstore`
+    ADD PRIMARY KEY (`id`),
+    ADD KEY `reflectionquestionsstore_learninggoalstore_text_fk` (`learningGoal`);
+
 --
 -- Indizes für die Tabelle `submissionpartbodyelements`
 --
@@ -956,6 +996,12 @@ ALTER TABLE `reflectionquestions`
     ADD CONSTRAINT `reflexionquestions_projects_name_fk` FOREIGN KEY (`projectName`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
     ADD CONSTRAINT `reflexionquestions_users_email_fk` FOREIGN KEY (`userEmail`) REFERENCES `users` (`email`) ON DELETE CASCADE ON UPDATE CASCADE;
 
+--
+-- Constraints der Tabelle `reflectionquestionsstore`
+--
+ALTER TABLE `reflectionquestionsstore`
+    ADD CONSTRAINT `reflectionquestionsstore_learninggoalstore_text_fk` FOREIGN KEY (`learningGoal`) REFERENCES `learninggoalstore` (`text`) ON DELETE CASCADE ON UPDATE CASCADE;
+
 --
 -- Constraints der Tabelle `surveyitemsselected`
 --
diff --git a/gemeinsamforschen/src/test/resources/reflectionQuestions/learningGoalsStore.json b/gemeinsamforschen/src/test/resources/reflectionQuestions/learningGoalsStore.json
new file mode 100644
index 00000000..b4291f92
--- /dev/null
+++ b/gemeinsamforschen/src/test/resources/reflectionQuestions/learningGoalsStore.json
@@ -0,0 +1,41 @@
+[
+  {
+    "text": "S. können das Anwendungspotential reflektieren"
+  },
+  {
+    "text": "S. können methodische Grenzen reflektieren"
+  },
+  {
+    "text": "S. können den wissenschaftlichen Ertrag reflektieren"
+  },
+  {
+    "text": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "text": "S. wählen eine passende Forschungsmethode"
+  },
+  {
+    "text": "S. erstellen wissenschaftliche Fragestellungen"
+  },
+  {
+    "text": "S. können Aufgaben untereinander aufteilen"
+  },
+  {
+    "text": "S. sich in einer Gruppe absprechen"
+  },
+  {
+    "text": "S. können recherchierte Literatur beurteilen"
+  },
+  {
+    "text": "S. können mit fachspezifischen Datenbanken umgehen"
+  },
+  {
+    "text": "S. können Mindmaps erstellen"
+  },
+  {
+    "text": "S. können ihre Ideen niederschreiben"
+  },
+  {
+    "text": "S. können ihre Gedanken sortieren"
+  }
+]
\ No newline at end of file
diff --git a/gemeinsamforschen/src/test/resources/reflectionQuestions/reflectionQuestionsStore.json b/gemeinsamforschen/src/test/resources/reflectionQuestions/reflectionQuestionsStore.json
new file mode 100644
index 00000000..a1fe880a
--- /dev/null
+++ b/gemeinsamforschen/src/test/resources/reflectionQuestions/reflectionQuestionsStore.json
@@ -0,0 +1,110 @@
+[
+  {
+    "question": "Wie lassen sich die Ergebnisse auf andere Bereiche übertragen?",
+    "learningGoal": "S. können das Anwendungspotential reflektieren"
+  },
+  {
+    "question": "Welche Schwierigkeiten ergaben sich beim Forschungsprozess?",
+    "learningGoal": "S. können methodische Grenzen reflektieren"
+  },
+  {
+    "question": "Was bringen uns die Ergebnisse?",
+    "learningGoal": "S. können den wissenschaftlichen Ertrag reflektieren"
+  },
+  {
+    "question": "Entspricht der Bericht wissenschaftlichen Formalia?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Ist die Präsentation gut aufgebaut?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Ist ein roter Faden erkennbar?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Welche Themen konnte ich aufgreifen/Welche Aspekte bleiben offen?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Ist die Darstellung übersichtlich und verständlich?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Inwiefern lässt sich anhand der Ergebnisse die Forschungsfrage beantworten?",
+    "learningGoal": "S. können Forschungsergebnisse darstellen"
+  },
+  {
+    "question": "Ist diese Methode mit den verfügbaren Mitteln zu realiseren?",
+    "learningGoal": "S. wählen eine passende Forschungsmethode"
+  },
+  {
+    "question": "Sind die Methoden dazu adäquat?",
+    "learningGoal": "S. wählen eine passende Forschungsmethode"
+  },
+  {
+    "question": "Kann ich diese Frage mit den mir verfügbaren Mitteln beantworten?",
+    "learningGoal": "S. wählen eine passende Forschungsmethode"
+  },
+  {
+    "question": "Ist die Fragestellung für das Thema relevant?",
+    "learningGoal": "S. erstellen wissenschaftliche Fragestellungen"
+  },
+  {
+    "question": "Kann ich diese Frage mit den mir verfügbaren Mitteln beantworten?",
+    "learningGoal": "S. erstellen wissenschaftliche Fragestellungen"
+  },
+  {
+    "question": "Eine letzte Frage?",
+    "learningGoal": "S. können Aufgaben untereinander aufteilen"
+  },
+  {
+    "question": "Können Abgabefristen eingehalten werden?",
+    "learningGoal": "S. können Aufgaben untereinander aufteilen"
+  },
+  {
+    "question": "Ist ein roter Faden erkennbar?",
+    "learningGoal": "S. können Aufgaben untereinander aufteilen"
+  },
+  {
+    "question": "Ist die Verteilung der Aufgaben gerecht?",
+    "learningGoal": "S. können Aufgaben untereinander aufteilen"
+  },
+  {
+    "question": "Sind die Interessen aller Gruppenmitglieder mehr oder minder berücksichtigt?",
+    "learningGoal": "S. sich in einer Gruppe absprechen"
+  },
+  {
+    "question": "Sind Widersprüche zu erkennen?",
+    "learningGoal": "S. können recherchierte Literatur beurteilen"
+  },
+  {
+    "question": "Sind meine Ressourcen inhaltlich relevant?",
+    "learningGoal": "S. können recherchierte Literatur beurteilen"
+  },
+  {
+    "question": "Verwende ich seriöse, zitierfähige Quellen?",
+    "learningGoal": "S. können recherchierte Literatur beurteilen"
+  },
+  {
+    "question": "Welche Datenbank ist für meine Forschungszwecke geeignet?",
+    "learningGoal": "S. können mit fachspezifischen Datenbanken umgehen"
+  },
+  {
+    "question": "Die Mindmap ist für mich und andere verständlich?",
+    "learningGoal": "S. können Mindmaps erstellen"
+  },
+  {
+    "question": "Sind meine Ideen für andere nachvollziehbar?",
+    "learningGoal": "S. können ihre Ideen niederschreiben"
+  },
+  {
+    "question": "Sind meine Vorstellungen realisierbar?",
+    "learningGoal": "S. können ihre Gedanken sortieren"
+  },
+  {
+    "question": "Passt das zum Kursthema?",
+    "learningGoal": "S. können ihre Gedanken sortieren"
+  }
+]
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/resources/reflectiveQuestions/reflectiveQuestions.json b/gemeinsamforschen/src/test/resources/reflectionQuestions/reflectiveQuestions_original.json
similarity index 100%
rename from gemeinsamforschen/src/main/resources/reflectiveQuestions/reflectiveQuestions.json
rename to gemeinsamforschen/src/test/resources/reflectionQuestions/reflectiveQuestions_original.json
-- 
GitLab