diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java
index 4e2e53d0..68a5a0ff 100644
--- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java
+++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java
@@ -3,8 +3,17 @@ package com.pqt.server.module.account;
import com.pqt.core.entities.user_account.Account;
import com.pqt.core.entities.user_account.AccountLevel;
-//TODO écrire Javadoc
+import java.util.List;
+
//TODO ajouter logs
+/**
+ * Cette classe correspond au service de gestion des comptes utilisateurs. Il permet la vérification de l'existance
+ * d'un compte, de son état (connecté/déconnecté), de changer son état ainsi que de récupérer son niveau d'accréditation.
+ *
+ * @author Guillaume "Cess" Prost
+ * @see AccountLevel
+ * @see Account
+ */
public class AccountService {
private IAccountDao dao;
@@ -13,19 +22,99 @@ public class AccountService {
dao = new FileAccountDao();
}
+ /**
+ * Vérifie si un compte utilisateur donné est actuellement connecté. Le compte utilisateur doit être existant
+ * pour être connecté.
+ *
+ * Les informations contenues dans l'objet {@code account} passé en paramètre ne sont pas directements utilisées,
+ * elles servent juste à déterminer le compte utilisateur réel correspondant. Il est nécessaire de s'assurer
+ * que les données passées en paramètres soient justes avant de faire appel à cette méthode.
+ *
+ * Pour cette méthode, seul le nom d'utilisateur est pris en compte pour établir une correspondance.
+ *
+ * Dans le cas où aucune correspondance ne peut être faite entre les informations fournies et les données
+ * enregistrées, la valeur {@code false} sera renvoyée.
+ *
+ * @param account Objet {@link Account} dont les informations seront utilisées pour déterminer le compte concerné.
+ *
+ * @return {@code true} si une correspondance a pû être établie et que le compte correspondant est connecté,
+ * {@code false} sinon.
+ */
public boolean isAccountConnected(Account account) {
return dao.isAccountConnected(account);
}
- public boolean submitAccountCredentials(Account acc, boolean desiredState) {
- return dao.submitAccountCredentials(acc, desiredState);
+ /**
+ * Soumet une demande de changement d'état pour un compte utilisateur. Les états possibles sont "connecté" ({@code true})
+ * et "déconnecté" ({@code false}).
+ *
+ * Les informations contenues dans l'objet {@code account} passé en paramètre ne sont pas directements utilisées,
+ * elles servent juste à déterminer le compte utilisateur réel correspondant. Il est nécessaire de s'assurer
+ * que les données passées en paramètres soient justes avant de faire appel à cette méthode.
+ *
+ * Pour cette méthode, seul le nom d'utilisateur est pris en compte pour établir une correspondance. Le mot de passe
+ * est uniquement requis pour une connexion, et pas pour une déconnexion.
+ *
+ * Une fois la correspondance effectuée, une tentative de changement d'état sera faite pour le compte correspondant.
+ * Cette tentative peut échouer si :
+ *
+ * - Le compte est déjà dans l'état désiré
+ * - Le mot de passe ne correspond pas (uniquement pour une connexion)
+ *
+ * Dans le cas d'un échec, l'état du compte reste inchangé et la valeur booléenne {@code false} est renvoyée,
+ * sans plus de détails. Si le changement d'état a eu lieu, la valeur booléenne {@code true} est renvoyée.
+ *
+ * @param account Objet {@link Account} dont les informations seront utilisées pour déterminer le compte concerné.
+ * @param desiredState L'état dans lequel le compte doit se trouver une fois le changement fait.
+ * @return {@code true} si le changement d'état a eu lieu, {@code false} sinon.
+ */
+ public boolean submitAccountCredentials(Account account, boolean desiredState) {
+ return dao.submitAccountCredentials(account, desiredState);
}
+ /**
+ * Vérifie si un compte utilisateur donné existe dans la base de donnée du serveur.
+ *
+ * Les informations contenues dans l'objet {@code account} passé en paramètre ne sont pas directements utilisées,
+ * elles servent juste à déterminer le compte utilisateur réel correspondant. Il est nécessaire de s'assurer
+ * que les données passées en paramètres soient justes avant de faire appel à cette méthode.
+ *
+ * Pour cette méthode, seul le nom d'utilisateur est pris en compte pour établir une correspondance.
+ *
+ * @param account Objet {@link Account} dont les informations seront utilisées pour déterminer le compte concerné.
+ * @return {@code true} si une correspondance a pû être établie entre les données fournies et un compte dans la base
+ * de données, {@code false} sinon.
+ */
public boolean isAccountRegistered(Account account){
return dao.isAccountRegistered(account);
}
+ /**
+ * Récupère le niveau de permission du compte utilisateur correspondant aux informations fournies en paramètre.
+ *
+ * Les informations contenues dans l'objet {@code account} passé en paramètre ne sont pas directements utilisées,
+ * elles servent juste à déterminer le compte utilisateur réel correspondant. Il est nécessaire de s'assurer
+ * que les données passées en paramètres soient justes avant de faire appel à cette méthode.
+ *
+ * Pour cette méthode, seul le nom d'utilisateur est pris en compte pour établir une correspondance.
+ *
+ * @param account Objet {@link Account} dont les informations seront utilisées pour déterminer le compte concerné.
+ * @return Le niveau de permission {@link AccountLevel} du compte correspondant aux informations si une correspondance
+ * a pû être établie entre {@code account} et un compte utilisateur de la base de donnée, et {@code null} si aucune
+ * correspondance n'a pû être faite.
+ */
public AccountLevel getAccountPermissionLevel(Account account){
return dao.getAccountPermissionLevel(account);
}
+
+ /**
+ * Renvoie la liste des comptes utilisateurs contenus dans la base de données sous forme d'une liste d'objets
+ * {@link Account}. Seuls les noms d'utilisateurs ainsi que les niveaux de permissions sont récupérés, les
+ * autres champs étant volontairement initialisés avec une valeur {@code null}.
+ * @return Une liste d'objet {@link Account} représsentant les différents comptes utilisateurs existant dans la base
+ * de données.
+ */
+ public List getAccountList(){
+ return dao.getAccountList();
+ }
}
diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java
index f4dd0bbc..f0c96a68 100644
--- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java
+++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java
@@ -8,6 +8,7 @@ import com.pqt.server.tools.security.IHashTool;
import com.pqt.server.tools.security.MD5HashTool;
import java.util.*;
+import java.util.stream.Collectors;
//TODO écrire Javadoc
//TODO ajouter logs
@@ -20,7 +21,7 @@ public class FileAccountDao implements IAccountDao {
private IHashTool hashTool;
private ISerialFileManager fileManager;
- public FileAccountDao() {
+ FileAccountDao() {
accountEntries = new HashSet<>();
connectedAccount = new HashSet<>();
hashTool = new MD5HashTool();
@@ -89,6 +90,11 @@ public class FileAccountDao implements IAccountDao {
return null;
}
+ @Override
+ public List getAccountList() {
+ return accountEntries.stream().map(accountEntry -> new Account(accountEntry.getUsername(), null, accountEntry.getLevel())).collect(Collectors.toList());
+ }
+
private void saveToFile(){
fileManager.saveSetToFile(accountEntries);
}
diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java
index bce955e2..3c9302a7 100644
--- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java
+++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java
@@ -3,6 +3,8 @@ package com.pqt.server.module.account;
import com.pqt.core.entities.user_account.Account;
import com.pqt.core.entities.user_account.AccountLevel;
+import java.util.List;
+
//TODO écrire Javadoc
public interface IAccountDao {
@@ -13,4 +15,6 @@ public interface IAccountDao {
boolean isAccountRegistered(Account account);
AccountLevel getAccountPermissionLevel(Account account);
+
+ List getAccountList();
}