Skip to content
Snippets Groups Projects
Commit f2c22726 authored by Julian Dehne's avatar Julian Dehne
Browse files

feat: implemented ProjectConfigurationDAO

parent 76304b77
No related branches found
No related tags found
No related merge requests found
Showing
with 264 additions and 29 deletions
......@@ -5,6 +5,7 @@ import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
import unipotsdam.gf.core.management.group.Group;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.project.ProjectConfiguration;
import unipotsdam.gf.core.management.project.ProjectConfigurationDAO;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.core.management.user.UserInterests;
import unipotsdam.gf.core.management.user.UserProfile;
......@@ -330,6 +331,13 @@ public class ManagementImpl implements Management {
@Override
public void create(ProjectConfiguration projectConfiguration, Project project) {
// TODO implement
ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO();
projectConfigurationDAO.persistProjectConfiguration(projectConfiguration,project);
}
@Override
public ProjectConfiguration getProjectConfiguration(Project project) {
ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO();
return projectConfigurationDAO.loadProjectConfiguration(project);
}
}
......@@ -16,7 +16,8 @@ public class ProjectConfiguration {
private HashMap<GroupFormationMechanism, Boolean> groupMechanismSelected;
public ProjectConfiguration(
HashMap<ProjectPhase, Boolean> phasesSelected, HashMap<Category, Boolean> criteriaSelected,
HashMap<ProjectPhase, Boolean> phasesSelected,
HashMap<Category, Boolean> criteriaSelected,
HashMap<AssessmentMechanism, Boolean> assessmentMechanismSelected,
HashMap<GroupFormationMechanism, Boolean> groupMechanismSelected) {
this.phasesSelected = phasesSelected;
......
package unipotsdam.gf.core.management.project;
import unipotsdam.gf.core.database.mysql.MysqlConnect;
import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.core.states.ProjectPhase;
import unipotsdam.gf.modules.assessment.AssessmentMechanism;
import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
import java.util.ArrayList;
import java.util.HashMap;
public class ProjectConfigurationDAO {
/**
* @param projectConfiguration
*/
public void persistProjectConfiguration(ProjectConfiguration projectConfiguration, Project project) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
// persist Criteria
HashMap<Category, Boolean> criteriaSelected = projectConfiguration.getCriteriaSelected();
for (Category category : criteriaSelected.keySet()) {
Boolean criteriumSelected = criteriaSelected.get(category);
if (criteriumSelected != null && criteriumSelected) {
String projectId = project.getId();
String categoryName = category.name();
String mysqlRequest = "insert INTO categoriesSelected (`projectId`,`categorySelected`) VALUES (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, projectId, categoryName );
}
}
// persist Phases
HashMap<ProjectPhase, Boolean> phasesSelected = projectConfiguration.getPhasesSelected();
for (ProjectPhase phase : phasesSelected.keySet()) {
Boolean projectPhaseSelected = phasesSelected.get(phase);
if (projectPhaseSelected != null && projectPhaseSelected) {
String mysqlRequest = "insert INTO phasesSelected (`projectId`,`phaseSelected`) VALUES (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), phase.name());
}
}
// persist GroupFinding
HashMap<GroupFormationMechanism, Boolean> groupFindingMechanism =
projectConfiguration.getGroupMechanismSelected();
for (GroupFormationMechanism gfm : groupFindingMechanism.keySet()) {
Boolean groupFindingMechanismSelected = groupFindingMechanism.get(gfm);
if (groupFindingMechanismSelected != null && groupFindingMechanismSelected) {
String mysqlRequest =
"insert INTO groupfindingMechanismSelected (`projectId`,`gfmSelected`) VALUES (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), gfm.name());
}
}
// persist assessmentMechanismSelected
HashMap<AssessmentMechanism, Boolean> assessmentMechanismsSelected =
projectConfiguration.getAssessmentMechanismSelected();
for (AssessmentMechanism assessmentMechanism : assessmentMechanismsSelected.keySet()) {
Boolean asmSelected = assessmentMechanismsSelected.get(assessmentMechanism);
if (asmSelected != null && asmSelected) {
String mysqlRequest =
"insert INTO assessmentMechanismSelected (`projectId`,`amSelected`) VALUES (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), assessmentMechanism.name());
}
}
connect.close();
}
public ProjectConfiguration loadProjectConfiguration(Project project) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
HashMap<ProjectPhase, Boolean> projectPhasesSelected =
getSelectionFromTable(connect, ProjectPhase.class, project, "phasesSelected");
HashMap<Category, Boolean> categorySelected =
getSelectionFromTable(connect, Category.class, project, "categoriesSelected");
HashMap<AssessmentMechanism, Boolean> asmSelected =
getSelectionFromTable(connect, AssessmentMechanism.class, project, "assessmentMechanismSelected");
HashMap<GroupFormationMechanism, Boolean> gfmSelected =
getSelectionFromTable(connect, GroupFormationMechanism.class, project, "groupfindingMechanismSelected");
connect.close();
ProjectConfiguration projectConfiguration = new ProjectConfiguration(projectPhasesSelected, categorySelected,
asmSelected,gfmSelected);
return projectConfiguration;
}
/**
* this looks like magic but it is just a hack loading all the config tables by taking advantage
* of the fact that they all have two columns with the second being the selected attribute and the first being the
* project id
*
* @param connect
* @param selectionclass
* @param project
* @param table
* @param <T>
* @return
*/
private <T extends Enum<T>> HashMap<T, Boolean> getSelectionFromTable(
MysqlConnect connect, Class<T> selectionclass, Project project, String table) {
// get phasesSelected
String id = project.getId();
String mysqlRequest = "SELECT * FROM " + table + " where projectId = ?";
VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, id);
HashMap<T, Boolean> projectPhaseBoolean = new HashMap<>();
while (!vereinfachtesResultSet.isLast()) {
Boolean next = vereinfachtesResultSet.next();
if (next) {
String phaseSelected = vereinfachtesResultSet.getObject(2).toString();
T phaseSelected1 = Enum.valueOf(selectionclass, phaseSelected);
projectPhaseBoolean.put(phaseSelected1, true);
} else {
break;
}
}
return projectPhaseBoolean;
}
}
package unipotsdam.gf.modules.peer2peerfeedback;
import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.interfaces.Feedback;
......@@ -9,6 +11,13 @@ import java.io.File;
import java.util.ArrayList;
public class DummyFeedback implements Feedback {
/**
* Utility to creaty dummy data for students
*/
PodamFactory factory = new PodamFactoryImpl();
@Override
public Peer2PeerFeedback createPeer2PeerFeedbackmask(
User feedbackuser, User selectedstudent, File document) {
......@@ -46,4 +55,9 @@ public class DummyFeedback implements Feedback {
public void assignFeedbackTasks() {
}
@Override
public ResearchReport getFeedbackTask(User student) {
return factory.manufacturePojo(ResearchReport.class);
}
}
package unipotsdam.gf.modules.researchreport;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.user.User;
import java.io.File;
public class DummyResearchReportManagement implements ResearchReportManagement {
@Override
public String createResearchReport(ResearchReport researchReport, User student) {
public String createResearchReport(
ResearchReport researchReport, Project project, User student) {
throw new NotImplementedException();
}
......
package unipotsdam.gf.modules.researchreport;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.user.User;
import java.io.File;
......@@ -15,10 +16,12 @@ public interface ResearchReportManagement {
* Create a File
*
* @param researchReport Name of the Report
* @param project
* @param student
* @return Returns the reportId
*/
String createResearchReport(ResearchReport researchReport, User student);
String createResearchReport(
ResearchReport researchReport, Project project, User student);
/**
......
......@@ -12,9 +12,10 @@ CREATE TABLE if not exists `projects` (
`password` varchar(400) NOT NULL,
`active` tinyint(1) NOT NULL,
`active` tinyint(1) NOT NULL,
`timecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`timecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`author` varchar(400) NOT NULL,
......@@ -106,25 +107,29 @@ CREATE TABLE if not exists projectuser
ENGINE = InnoDB
DEFAULT CHARSET = utf8;CREATE TABLE if not exists `annotations` (
DEFAULT CHARSET = utf8;
CREATE TABLE if not exists `annotations` (
`id` varchar(120) NOT NULL,
`id` varchar(120) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`userId` int(11) DEFAULT NULL,
`userId` int(11) DEFAULT NULL,
`targetId` int(11) DEFAULT NULL,
`targetId` int(11) DEFAULT NULL,
`body` varchar(280) DEFAULT NULL,
`body` varchar(280) DEFAULT NULL,
`startCharacter` int(11) DEFAULT NULL,
`startCharacter` int(11) DEFAULT NULL,
`endCharacter` int(11) DEFAULT NULL,
`endCharacter` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
alter table users
......@@ -134,17 +139,17 @@ CREATE TABLE if not exists quiz
(
author varchar(400) NOT NULL,
author varchar(400) NOT NULL,
projectId varchar(400) NOT NULL,
question varchar(400) NOT NULL,
question varchar(400) NOT NULL,
mcType varchar(400) NOT NULL,
mcType varchar(400) NOT NULL,
answer varchar(400) NOT NULL,
answer varchar(400) NOT NULL,
correct tinyint(1) NOT NULL
correct tinyint(1) NOT NULL
)
......@@ -156,17 +161,49 @@ CREATE TABLE if not exists tasks
(
userId varchar(400) NOT NULL,
userId varchar(400) NOT NULL,
projectId varchar(400) NOT NULL,
taskUrl varchar (400) NOT NULL
taskUrl varchar(400) NOT NULL
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
ALTER TABLE `projectuser` ADD INDEX( `projectId`, `userId`);
ALTER TABLE `projectuser` ADD UNIQUE( `projectId`, `userId`);
ALTER TABLE `projects` ADD UNIQUE( `id`);
\ No newline at end of file
CREATE TABLE if not exists phasesSelected (
`projectId` varchar(100) NOT NULL,
phaseSelected varchar(200) NOT NULL
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
CREATE TABLE if not exists categoriesSelected (
`projectId` varchar(100) NOT NULL,
categorySelected varchar(200) NOT NULL
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
CREATE TABLE if not exists groupfindingMechanismSelected (
`projectId` varchar(100) NOT NULL,
gfmSelected varchar(200) NOT NULL
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
CREATE TABLE if not exists assessmentMechanismSelected (
`projectId` varchar(100) NOT NULL,
amSelected varchar(200) NOT NULL
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
ALTER TABLE `projectuser`
ADD INDEX (`projectId`, `userId`);
ALTER TABLE `projectuser`
ADD UNIQUE (`projectId`, `userId`);
ALTER TABLE `projects`
ADD UNIQUE (`id`);
\ No newline at end of file
......@@ -26,6 +26,7 @@ import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
......@@ -123,7 +124,7 @@ public class ActivityFlowTest {
for (User student : students) {
// persist dossiers
ResearchReport researchReport = factory.manufacturePojo(ResearchReport.class);
researchReportManagement.createResearchReport(researchReport, student);
researchReportManagement.createResearchReport(researchReport, project, student);
}
// assert that after the last report has been submitted, the feedback tasks were assigned automatically
......@@ -144,12 +145,30 @@ public class ActivityFlowTest {
}
// students upload updated dossier
ArrayList<User> students2 = students;
Iterator<User> students2Iterator = students2.iterator();
students2Iterator.remove();
students2Iterator.remove();
while (students2Iterator.hasNext()) {
User student = students2Iterator.next();
// persist dossiers (versioning)
ResearchReport researchReport = factory.manufacturePojo(ResearchReport.class);
researchReportManagement.createResearchReport(researchReport, project, student);
}
// docent finishes phase
phases.endPhase(ProjectPhase.DossierFeedback, project);
// student misses feedback -> reassignment
// assert that while reports are still missing feedback tasks are reassigned
verify(feedback, times(1)).assigningMissingFeedbackTasks(project);
// assert that everybody has given and received feedback
assert feedback.checkFeedbackConstraints(project);
// docent finishes phase
phases.endPhase(ProjectPhase.DossierFeedback, project);
// feedback restarted
}
......
......@@ -8,17 +8,19 @@ import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Before;
import org.junit.Test;
import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;
import unipotsdam.gf.config.GFApplicationBinder;
import unipotsdam.gf.config.GFResourceConfig;
import unipotsdam.gf.core.management.ManagementImpl;
import unipotsdam.gf.core.management.project.Project;
import unipotsdam.gf.core.management.project.ProjectConfiguration;
import unipotsdam.gf.core.management.user.User;
import unipotsdam.gf.core.management.user.UserProfile;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.*;
/**
* Created by dehne on 01.06.2018.
......@@ -28,6 +30,11 @@ import static org.junit.Assert.assertTrue;
public class ManagementTest {
/**
* Utility to creaty dummy data for students
*/
PodamFactory factory = new PodamFactoryImpl();
@Test
public void testDelete() {
......@@ -114,4 +121,20 @@ public class ManagementTest {
assert !users.isEmpty();
}
@Test
public void testProjectConfiguration() {
ProjectConfiguration projectConfiguration = factory.manufacturePojo(ProjectConfiguration.class);
Project project = factory.manufacturePojo(Project.class);
ManagementImpl management = new ManagementImpl();
management.create(projectConfiguration, project);
ProjectConfiguration projectConfiguration1 = management.getProjectConfiguration(project);
assertNotNull(projectConfiguration1.getCriteriaSelected());
assertNotNull(projectConfiguration1.getAssessmentMechanismSelected());
assertNotNull(projectConfiguration1.getGroupMechanismSelected());
assertNotNull(projectConfiguration1.getPhasesSelected());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment