From eadc5fbf6ff34abf68465b15ccc8f1f95c3b0651 Mon Sep 17 00:00:00 2001 From: Julian Dehne <julian.dehne@uni-potsdam.de> Date: Fri, 6 Jul 2018 12:29:50 +0200 Subject: [PATCH] started implementing state rules --- .../gf/core/management/ManagementImpl.java | 13 ++++- .../gf/core/management/project/Project.java | 19 ++++++- .../gf/core/states/DosserUploadTask.java | 19 +++++++ .../gf/core/states/PeerAssessmentTask.java | 21 +++++++ .../gf/core/states/PeerFeedbackTask.java | 22 ++++++++ .../gf/core/states/ProjectPhase.java | 9 +++ .../unipotsdam/gf/core/states/States.java | 35 ++++++++++++ .../java/unipotsdam/gf/core/states/Task.java | 56 +++++++++++++++++++ .../gf/interfaces/ICommunication.java | 1 + .../service/CommunicationDummyService.java | 6 ++ .../src/scripts/dbschema/fltrail.sql | 20 ++++++- 11 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/DosserUploadTask.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerAssessmentTask.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerFeedbackTask.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/States.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/Task.java diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java index 8d98b2c0..62744cc0 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -7,6 +7,7 @@ import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserInterests; import unipotsdam.gf.core.management.user.UserProfile; +import unipotsdam.gf.core.states.ProjectPhase; import unipotsdam.gf.modules.assessment.controller.model.Quiz; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; @@ -56,11 +57,12 @@ public class ManagementImpl implements Management { UUID uuid = UUID.randomUUID(); String token = uuid.toString(); + MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " - + "`adminPassword`, `token`) values (?,?,?,?,?,?,?)"; + + "`adminPassword`, `token`, `phase`) values (?,?,?,?,?,?,?,?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.isActive(), project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token); connect.close(); @@ -162,6 +164,7 @@ public class ManagementImpl implements Management { String author = vereinfachtesResultSet.getString("author"); String adminPassword = vereinfachtesResultSet.getString("adminpassword"); String token = vereinfachtesResultSet.getString("token"); + String phase = vereinfachtesResultSet.getString("phase"); return new Project(id, password, active, timestamp, author, adminPassword, token); } @@ -173,6 +176,7 @@ public class ManagementImpl implements Management { // TODO: determine how to get all User return new Group(id, new ArrayList<>(), projectId, chatRoomId); } + @Override public String getUserToken(User user) { MysqlConnect connect = new MysqlConnect(); @@ -200,6 +204,13 @@ public class ManagementImpl implements Management { return getUserByField("email", email); } + + /** + * TODO @Axel bitte in modules/asessment verschieben + * @param projectId + * @param quizId + * @return + */ public Quiz getQuizByProjectGroupId(String projectId, String quizId){ MysqlConnect connect = new MysqlConnect(); connect.connect(); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java index 682b5c40..0cdf93a1 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java @@ -1,5 +1,7 @@ package unipotsdam.gf.core.management.project; +import unipotsdam.gf.core.states.ProjectPhase; + import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.ZoneId; @@ -16,6 +18,8 @@ public class Project { private String author; private String adminPassword; private String token; + // using enum ProjectPhase + private String phase; public Project() { } @@ -26,8 +30,21 @@ public class Project { this.active = active; this.author = author; this.adminPassword = adminPassword; - this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); + // default starting at course creation if new + this.setPhase(ProjectPhase.CourseCreationPhase); + } + + public String getPhase() { + return phase; + } + + /** + * setting phase only with enum + * @param phase + */ + public void setPhase(ProjectPhase phase) { + this.phase = phase.name(); } public Project(String id, String password, Boolean active, String author, String adminPassword, String token) { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/DosserUploadTask.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/DosserUploadTask.java new file mode 100644 index 00000000..520f3a41 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/DosserUploadTask.java @@ -0,0 +1,19 @@ +package unipotsdam.gf.core.states; + +import unipotsdam.gf.core.management.user.User; + +public class DosserUploadTask extends Task { + public DosserUploadTask(User owner) { + super(owner); + } + + @Override + public String getTaskMessage() { + return null; + } + + @Override + protected String getTaskUrl() { + return null; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerAssessmentTask.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerAssessmentTask.java new file mode 100644 index 00000000..3808b6b3 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerAssessmentTask.java @@ -0,0 +1,21 @@ +package unipotsdam.gf.core.states; + +import unipotsdam.gf.core.management.user.User; + +public class PeerAssessmentTask extends Task { + public PeerAssessmentTask(User owner) { + super(owner); + } + + @Override + public String getTaskMessage() { + return null; + } + + @Override + protected String getTaskUrl() { + return null; + } + + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerFeedbackTask.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerFeedbackTask.java new file mode 100644 index 00000000..283977e6 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PeerFeedbackTask.java @@ -0,0 +1,22 @@ +package unipotsdam.gf.core.states; + +import unipotsdam.gf.core.management.user.User; + +public class PeerFeedbackTask extends Task { + public PeerFeedbackTask(User owner) { + super(owner); + } + + @Override + public String getTaskMessage() { + // TODO implement + return null; + } + + @Override + protected String getTaskUrl() { + // TODO implement + return null; + } + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java new file mode 100644 index 00000000..f17a652a --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java @@ -0,0 +1,9 @@ +package unipotsdam.gf.core.states; + +public enum ProjectPhase { + CourseCreationPhase, + GroupFormationPhase, + DossierFeedbackPhase, + ExecutionPhase, + AssessmentPhase +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/States.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/States.java new file mode 100644 index 00000000..638cf52b --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/States.java @@ -0,0 +1,35 @@ +package unipotsdam.gf.core.states; + +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.model.Message; + +import javax.inject.Inject; + +public class States { + + @Inject + ICommunication iCommunication; + + + public void endPhase(ProjectPhase currentPhase) { + // TODO implement + + // calculate reaction + + // if no problem change phase + + // if problem send message + + // and start recovery process + } + + + private void sendProblemMessage(String message, User user) { + iCommunication.sendSingleMessage(new Message(null, message),user); + } + + + + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/Task.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/Task.java new file mode 100644 index 00000000..821f480c --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/Task.java @@ -0,0 +1,56 @@ +package unipotsdam.gf.core.states; + +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.model.Message; + +import javax.inject.Inject; + +public abstract class Task { + + @Inject + ICommunication iCommunication; + + // the user who has to do the task + protected User owner; + + public Task(User owner) { + this.owner = owner; + } + + public abstract String getTaskMessage(); + + public void start() { + sendTaskMessage(); + save(); + } + + private void save() { + String name = getClass().getName(); // this returns the runtime name of the subclass i.e. PeerAssessmentTask + String url = getTaskUrl(); + + } + + /** + * should be a relative path like + * /dossiers/upload + * /peerfeedback/{userId}/give + * /peerassessment/{userId}/give + * or similar + * + * @return + */ + protected abstract String getTaskUrl(); + + public void sendTaskMessage() { + iCommunication.sendSingleMessage(new Message(null, getTaskMessage()), owner); + } + + public User getOwner() { + return owner; + } + + public void setOwner(User owner) { + this.owner = owner; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java index 12d3d711..d66970b8 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java @@ -85,4 +85,5 @@ public interface ICommunication { String getChatRoomLink(String userToken, String projectToken, String groupToken); + void sendSingleMessage(Message message, User user); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java index 3d989429..138e0d4a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java @@ -100,6 +100,12 @@ public class CommunicationDummyService implements ICommunication { return Constants.ROCKET_CHAT_URL + "/channel/" + channelName + "?layout=embedded"; } + @Override + public void sendSingleMessage(Message message, User user) { + // TODO implement as email or directed message, popup after login or whatever + System.out.println("sending email with message: "+ message.getMessage() + " to: "+ user.getEmail()); + } + // TODO: remove after done implementing // just for postman testing public User getUser() { diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index e0de36c8..906e40da 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -20,7 +20,9 @@ CREATE TABLE if not exists `projects` ( `adminPassword` varchar(400) NOT NULL, - `token` varchar(400) NOT NULL + `token` varchar(400) NOT NULL, + + `phase` varchar(400) NOT NULL ) @@ -125,6 +127,7 @@ CREATE TABLE if not exists projectuser ) ENGINE=InnoDB DEFAULT CHARSET=utf8;alter table users add isStudent tinyint(1) default '1' null; + CREATE TABLE if not exists quiz ( @@ -145,4 +148,19 @@ CREATE TABLE if not exists quiz ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists tasks + +( + + userId varchar(400) NOT NULL, + + projectId varchar(400) NOT NULL, + + taskUrl varchar (400) NOT NULL +) + + ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file -- GitLab