mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-12-22 23:41:09 +00:00
Module Server, Service Sale : ajout méthd isSaleRevertSupported(); Ajout Javadoc; Correction erreur compilation liée à la classe FileUtil
This commit is contained in:
parent
d9462b4a13
commit
9a75623825
@ -2,11 +2,22 @@ package com.pqt.server.module.sale;
|
|||||||
|
|
||||||
import com.pqt.core.entities.sale.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}.
|
||||||
|
* <p/>
|
||||||
|
* 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.
|
||||||
|
* <p/>
|
||||||
|
* 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)}. <b>Le support de cette fonctionnalité
|
||||||
|
* est optionnel</b>.
|
||||||
|
*
|
||||||
|
* @see SaleService pour de plus amples détails sur le fonctionnement attendu des méthodes
|
||||||
|
*/
|
||||||
public interface ISaleDao {
|
public interface ISaleDao {
|
||||||
|
|
||||||
long submitSale(Sale sale);
|
long submitSale(Sale sale);
|
||||||
|
|
||||||
void submitSaleRevert(long id);
|
boolean isSaleRevertSupported();
|
||||||
|
boolean submitSaleRevert(long id);
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,21 @@ import java.text.DateFormat;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Iterator;
|
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. <b>Cette implémentation ne supporte pas le rollback de commandes</b>.
|
||||||
|
* <p/>.
|
||||||
|
* 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.
|
||||||
|
* <p/>
|
||||||
|
* 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 <b>positifs et non-nuls</b>.
|
||||||
|
*/
|
||||||
public class NoRevertFileSaleDao implements ISaleDao {
|
public class NoRevertFileSaleDao implements ISaleDao {
|
||||||
|
|
||||||
private static final String SALE_LOG_FILE_NAME = "sale_log.txt";
|
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 StockService stockService;
|
||||||
private long nextSaleId;
|
private long nextSaleId;
|
||||||
private ISaleRenderer renderer;
|
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.
|
* @return last sale id used in the log file, or -1 if none was found.
|
||||||
*/
|
*/
|
||||||
private long readLastSaleIdFromFile(){
|
private long readLastSaleIdFromFile(){
|
||||||
long id = -1;
|
long id = DEFAULT_SALE_ID;
|
||||||
if(FileUtil.exist(SALE_LOG_FILE_NAME)){
|
if(FileUtil.exist(SALE_LOG_FILE_NAME)){
|
||||||
try(ReversedLinesFileReader rlfr = new ReversedLinesFileReader(new File("SALE_LOG_FILE_NAME"))){
|
try(ReversedLinesFileReader rlfr = new ReversedLinesFileReader(new File("SALE_LOG_FILE_NAME"))){
|
||||||
boolean stop = false;
|
boolean stop = false;
|
||||||
@ -89,7 +101,12 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
//TODO Créer un nouveau dao qui supporte le revert
|
||||||
throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté");
|
throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté");
|
||||||
}
|
}
|
||||||
|
@ -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.sale.listeners.SimpleSaleFirerer;
|
||||||
import com.pqt.server.module.stock.StockService;
|
import com.pqt.server.module.stock.StockService;
|
||||||
|
|
||||||
//TODO écrire Javadoc
|
|
||||||
//TODO ajouter logs
|
//TODO ajouter logs
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cette classe correspond au service de validation des commandes de produits.
|
||||||
|
* <p/>
|
||||||
|
* 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)}.
|
||||||
|
* <p/>
|
||||||
|
* 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.
|
||||||
|
* <p/>
|
||||||
|
* 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 {
|
public class SaleService {
|
||||||
|
|
||||||
private ISaleDao dao;
|
private ISaleDao dao;
|
||||||
@ -19,20 +35,57 @@ public class SaleService {
|
|||||||
eventFirerer = new SimpleSaleFirerer();
|
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);
|
long id = dao.submitSale(sale);
|
||||||
if(id!=-1) eventFirerer.fireSaleValidatedEvent(sale);
|
if(id!=-1) eventFirerer.fireSaleValidatedEvent(sale);
|
||||||
return id;
|
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.
|
||||||
|
* <p/>
|
||||||
|
* 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) {
|
public void addListener(ISaleListener l) {
|
||||||
eventFirerer.addListener(l);
|
eventFirerer.addListener(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retire un observateur du service.
|
||||||
|
* @param l observateur à retirer.
|
||||||
|
* @see ISaleListener
|
||||||
|
*/
|
||||||
public void removeListener(ISaleListener l){
|
public void removeListener(ISaleListener l){
|
||||||
eventFirerer.addListener(l);
|
eventFirerer.addListener(l);
|
||||||
}
|
}
|
||||||
|
@ -33,4 +33,8 @@ public class FileUtil {
|
|||||||
public static boolean exist(Path path) {
|
public static boolean exist(Path path) {
|
||||||
return Files.exists(path);
|
return Files.exists(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean exist(String path) {
|
||||||
|
return Files.exists(Paths.get(path));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user