From 9a756238259244b507643900c2639e0e083f757f Mon Sep 17 00:00:00 2001 From: Notmoo Date: Wed, 2 Aug 2017 18:20:51 +0200 Subject: [PATCH] =?UTF-8?q?Module=20Server,=20Service=20Sale=20:=20ajout?= =?UTF-8?q?=20m=C3=A9thd=20isSaleRevertSupported();=20Ajout=20Javadoc;=20C?= =?UTF-8?q?orrection=20erreur=20compilation=20li=C3=A9e=20=C3=A0=20la=20cl?= =?UTF-8?q?asse=20FileUtil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pqt/server/module/sale/ISaleDao.java | 17 +++++- .../module/sale/NoRevertFileSaleDao.java | 21 ++++++- .../pqt/server/module/sale/SaleService.java | 61 +++++++++++++++++-- .../com/pqt/server/tools/FileUtil.java | 4 ++ 4 files changed, 94 insertions(+), 9 deletions(-) diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java index b28a279f..c26d7c86 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java @@ -2,11 +2,22 @@ package com.pqt.server.module.sale; import com.pqt.core.entities.sale.Sale; -//TODO écrire Javadoc +/** + * Interface définissant les méthodes requises pour tout DAO du service de gestion des commandes {@link SaleService}. + *

+ * Les implémentations de cette interface doivent pouvoir valider des commandes, agir sur le stock et générer les + * identifiants de commandes validées. + *

+ * Les implémentations peuvent (optionnel) assurer une persistance des données relatives aux commandes validées, et + * peuvent donc assurer le revert des commandes {@link #submitSaleRevert(long)}. Le support de cette fonctionnalité + * est optionnel. + * + * @see SaleService pour de plus amples détails sur le fonctionnement attendu des méthodes + */ public interface ISaleDao { long submitSale(Sale sale); - void submitSaleRevert(long id); - + boolean isSaleRevertSupported(); + boolean submitSaleRevert(long id); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java index ef6d6db4..96e34d11 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java @@ -12,9 +12,21 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Iterator; +/** + * Implémentation de l'interface {@link ISaleDao} utilisant un fichier comme moyen pour assurer la persistance des + * données relatives aux commandes validées. Cette implémentation ne supporte pas le rollback de commandes. + *

. + * La persistance des données est faite de sorte que ces données soient lisibles par un humain lorsque le fichier est + * ouvert avecc un éditeur de texte quelconque. + *

+ * Les identifiants attribués aux commandes validées sont incrémentés à chaque fois, en se basant soit sur la dernière + * valeur attribuée (lue depuis le fichier de sauvegarde lors de l'instantiation), soit sur une valeur par défaut. Ils + * sont tous positifs et non-nuls. + */ public class NoRevertFileSaleDao implements ISaleDao { private static final String SALE_LOG_FILE_NAME = "sale_log.txt"; + private static final long DEFAULT_SALE_ID = 0; //équivaut à la valeur du premier id - 1 private StockService stockService; private long nextSaleId; private ISaleRenderer renderer; @@ -64,7 +76,7 @@ public class NoRevertFileSaleDao implements ISaleDao { * @return last sale id used in the log file, or -1 if none was found. */ private long readLastSaleIdFromFile(){ - long id = -1; + long id = DEFAULT_SALE_ID; if(FileUtil.exist(SALE_LOG_FILE_NAME)){ try(ReversedLinesFileReader rlfr = new ReversedLinesFileReader(new File("SALE_LOG_FILE_NAME"))){ boolean stop = false; @@ -89,7 +101,12 @@ public class NoRevertFileSaleDao implements ISaleDao { } @Override - public void submitSaleRevert(long id) { + public boolean isSaleRevertSupported() { + return false; + } + + @Override + public boolean submitSaleRevert(long id) { //TODO Créer un nouveau dao qui supporte le revert throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté"); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java index 9a21205a..54b31fc3 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java @@ -7,8 +7,24 @@ import com.pqt.server.module.sale.listeners.ISaleListener; import com.pqt.server.module.sale.listeners.SimpleSaleFirerer; import com.pqt.server.module.stock.StockService; -//TODO écrire Javadoc //TODO ajouter logs + +/** + * Cette classe correspond au service de validation des commandes de produits. + *

+ * Ce service est censé pouvoir déterminer si une commmande (classe {@link Sale}) est valide ou non, et doit le cas + * échéant effectuer les retraits de produits du stock. A chaque commande validée doit correspondre un identifiant + * unique, qui doit être renvoyé en réponse de la validation. Cet identifiant doit permettre de pouvoir annuler + * ultérieurement la commande correspondante via la méthode {@link #submitSaleRevert(long)}. + *

+ * Une commande est considérée comme valide si tous les produits composants la commande existent dans le stock et que + * les quantités demandées dans la commande sont disponibles en stock. + *

+ * Ce service met également à disposition la possibilité d'enregistrer des observateurs, qui seront utilisés pour + * exécuter des méthodes lors de certains événements, comme la validation d'une commande. + * + * @see ISaleListener + */ public class SaleService { private ISaleDao dao; @@ -19,20 +35,57 @@ public class SaleService { eventFirerer = new SimpleSaleFirerer(); } - public long submitSale(Sale sale) throws ServerQueryException { + /** + * Soumet une commande au service pour validation. Si la commande est validée, les stocks seront débités et + * l'identifiant de la commande sera renvoyé. Si la commande n'est pas validée, la valeur {@value -1} sera renvoyée + * et les stocks resterons inchangés. + * @param sale commande à valider + * @return l'identifiant positif non-nul attribué à la commande si elle est validée, {@value -1} sinon. + */ + public long submitSale(Sale sale) { long id = dao.submitSale(sale); if(id!=-1) eventFirerer.fireSaleValidatedEvent(sale); return id; } - public void submitSaleRevert(long id) throws ServerQueryException { - dao.submitSaleRevert(id); + /** + * Détermine si le rollback de commande est supporté par la configuration actuelle du serveur ou non. + *

+ * Tenter d'effectuer un rollback de commande alors que ce dernier n'est pas supporté lèvera une + * {@link UnsupportedOperationException}. + * + * @return {@code true} si le rollback de commande est supporté, {@code false} sinon. + */ + public boolean isSaleRevertSupported(){ + return dao.isSaleRevertSupported(); + } + + /** + * Demande le rollback d'une commande en se basant sur l'identifiant. + * @param id identifiant de la commande à annuler + * @return {@code true} si la commande a bel et bien été annulée, {@code false} si aucun changement n'a été fait. + */ + public boolean submitSaleRevert(long id) { + if(isSaleRevertSupported()) + return dao.submitSaleRevert(id); + else + throw new UnsupportedOperationException("Cette opération ('sale revert') n'est pas supportée par la configuration actuelle du serveur"); } + /** + * Ajout un observateur au service, qui sera notifié lorsque certains événements auront lieu. + * @param l observateur à ajouter. + * @see ISaleListener + */ public void addListener(ISaleListener l) { eventFirerer.addListener(l); } + /** + * Retire un observateur du service. + * @param l observateur à retirer. + * @see ISaleListener + */ public void removeListener(ISaleListener l){ eventFirerer.addListener(l); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java index 54a5d349..26cc83d0 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java @@ -33,4 +33,8 @@ public class FileUtil { public static boolean exist(Path path) { return Files.exists(path); } + + public static boolean exist(String path) { + return Files.exists(Paths.get(path)); + } }