From 9426225088ead68d7c511ad73473e0538cabfeca Mon Sep 17 00:00:00 2001
From: Julian Dehne <julian.dehne@uni-potsdam.de>
Date: Tue, 5 Jun 2018 15:20:51 +0200
Subject: [PATCH] bigfixing: the an error with the switch cases for
 docent-student

refactoring: simplified package structure (no servlet/tag folders needed)
documentation: added some comments to the service classes
---
 .../user/{tags => }/HiddenUserTag.java        |  6 +-
 .../user/{servlets => }/SessionValidator.java |  9 +--
 .../core/management/user/UserInterests.java   |  2 +-
 .../management/{ => user}/UserService.java    | 70 ++++++++++++++-----
 .../src/main/webapp/WEB-INF/web.xml           |  2 +-
 .../webapp/core/pages/hiddenUserField.tld     |  2 +-
 6 files changed, 67 insertions(+), 24 deletions(-)
 rename gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/{tags => }/HiddenUserTag.java (78%)
 rename gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/{servlets => }/SessionValidator.java (85%)
 rename gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/{ => user}/UserService.java (58%)

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/tags/HiddenUserTag.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java
similarity index 78%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/tags/HiddenUserTag.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java
index 57b65221..57b6326c 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/tags/HiddenUserTag.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java
@@ -1,4 +1,4 @@
-package unipotsdam.gf.core.management.user.tags;
+package unipotsdam.gf.core.management.user;
 
 import unipotsdam.gf.core.management.ManagementImpl;
 import unipotsdam.gf.core.management.user.User;
@@ -8,6 +8,10 @@ import javax.servlet.jsp.tagext.*;
 import javax.servlet.jsp.*;
 import java.io.*;
 
+/**
+ * implemented while porting the login page. It might be useful to have a hidden user field on the page in order to
+ * manipulate the user data with jquery
+ */
 public class HiddenUserTag extends SimpleTagSupport {
     public void doTag() throws JspException, IOException {
         PageContext pageContext = (PageContext) getJspContext();
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/servlets/SessionValidator.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java
similarity index 85%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/servlets/SessionValidator.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java
index e3b181c5..8fd6c0f6 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/servlets/SessionValidator.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java
@@ -1,16 +1,17 @@
-package unipotsdam.gf.core.management.user.servlets;
+package unipotsdam.gf.core.management.user;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import unipotsdam.gf.core.management.ManagementImpl;
-import unipotsdam.gf.core.management.user.User;
 
 import javax.servlet.*;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
+/**
+ * this filter can be applied to a given space in order to validate, that the tag in the url is a valid one
+ * not applied to to a folder yet (because might lead to confusing experiences in debugging)
+ */
 public class SessionValidator implements Filter {
 
     Logger log = LoggerFactory.getLogger(SessionValidator.class);
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserInterests.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserInterests.java
index 229421d5..eb37453d 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserInterests.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserInterests.java
@@ -3,6 +3,6 @@ package unipotsdam.gf.core.management.user;
 /**
  * Created by dehne on 31.05.2018.
  */
-// user data that is created on a project basis
+// user data that is created on a project basis - needs to be implemented by Marjen for her group formation
 public class UserInterests {
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/UserService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
similarity index 58%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/UserService.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
index 18b40c82..41af68ce 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/UserService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
@@ -1,5 +1,6 @@
-package unipotsdam.gf.core.management;
+package unipotsdam.gf.core.management.user;
 
+import unipotsdam.gf.core.management.ManagementImpl;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.interfaces.IMunschkin;
 import unipotsdam.gf.modules.munchkin.controller.MunchkinImpl;
@@ -16,6 +17,15 @@ import java.net.URISyntaxException;
 @Path("/user")
 public class UserService {
 
+    /**
+     * creates a user with given credentials
+     * @param name
+     * @param password
+     * @param email
+     * @param isStudent
+     * @return
+     * @throws URISyntaxException
+     */
     // This method is called if HTML is request
     @POST
     @Produces(MediaType.TEXT_HTML)
@@ -23,15 +33,20 @@ public class UserService {
     public Response createUser(@FormParam("name") String name, @FormParam("password") String password,
                                @FormParam("email") String email, @FormParam("isStudent") String isStudent)
             throws URISyntaxException {
-
         ManagementImpl management = new ManagementImpl();
-
         User user = new User(name, password, email, isStudent == null);
         return login(true, user);
     }
 
 
-
+    /**
+     * checks if a user exists in order to log him in
+     * @param name
+     * @param password
+     * @param email
+     * @return
+     * @throws URISyntaxException
+     */
     // This method is called if HTML is request
     @POST
     @Produces(MediaType.TEXT_HTML)
@@ -41,17 +56,23 @@ public class UserService {
             throws URISyntaxException {
 
         ManagementImpl management = new ManagementImpl();
-
         User user = new User(name, password, email,  null);
         return login(false, user);
     }
 
-
-
-
+    /**
+     * if create User is true, the user is created and logged in if he does not exist
+     * @param createUser
+     * @param user
+     * @return
+     * @throws URISyntaxException
+     */
     protected Response login(boolean createUser, User user) throws URISyntaxException {
         ManagementImpl management = new ManagementImpl();
         if (management.exists(user)) {
+            if (!createUser) {
+                return redirectToProjectPage(user, management);
+            }
             String existsUrl = "../register.jsp?userExists=true";
             return forwardToLocation(existsUrl);
         } else {
@@ -61,17 +82,34 @@ public class UserService {
                 String existsUrl = "../index.jsp?userExists=false";
                 return forwardToLocation(existsUrl);
             }
-            String successUrl;
-            if (user.getStudent() != null && user.getStudent()) {
-                successUrl = "../pages/overview-student.html?token=";
-            } else {
-                successUrl = "../pages/overview-docent.html?token=";
-            }
-            successUrl += management.getUserToken(user);
-            return forwardToLocation(successUrl);
+            return redirectToProjectPage(user, management);
+        }
+    }
+
+    /**
+     * helper function for redirecting to the right project page
+     * @param user
+     * @param management
+     * @return
+     * @throws URISyntaxException
+     */
+    private Response redirectToProjectPage(User user, ManagementImpl management) throws URISyntaxException {
+        String successUrl;
+        if (user.getStudent() != null && user.getStudent()) {
+            successUrl = "../pages/overview-student.html?token=";
+        } else {
+            successUrl = "../pages/overview-docent.html?token=";
         }
+        successUrl += management.getUserToken(user);
+        return forwardToLocation(successUrl);
     }
 
+    /**
+     *   * helper function for redirecting to a new page
+     * @param existsUrl
+     * @return
+     * @throws URISyntaxException
+     */
     private Response forwardToLocation(String existsUrl) throws URISyntaxException {
         return Response.seeOther(new URI(existsUrl)).build();
     }
diff --git a/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml b/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml
index fed2d8a9..be128ff4 100644
--- a/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml
+++ b/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml
@@ -41,7 +41,7 @@
     <!-- loginFilter -->
     <filter>
         <filter-name>RequestLoggingFilter</filter-name> <!-- mandatory -->
-        <filter-class>unipotsdam.gf.core.management.user.servlets.SessionValidator</filter-class> <!-- mandatory -->
+        <filter-class>unipotsdam.gf.core.management.user.SessionValidator</filter-class> <!-- mandatory -->
     </filter>
 
     <filter-mapping>
diff --git a/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld b/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld
index bfb16172..bb1ceeb1 100644
--- a/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld
+++ b/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld
@@ -5,7 +5,7 @@
 
     <tag>
         <name>hiddenUserTag</name>
-        <tag-class>unipotsdam.gf.core.management.user.tags.HiddenUserTag</tag-class>
+        <tag-class>unipotsdam.gf.core.management.user.HiddenUserTag</tag-class>
         <body-content>empty</body-content>
     </tag>
 </taglib>
\ No newline at end of file
-- 
GitLab