mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-12-22 15:31:08 +00:00
[SERVEUR] #13 : Les fichiers de ressources peuvent désormais être stoqués dans les dossiers de la webapp du serveur; Ajout d'un test permettant de s'assurer que la wepapp a bien été unpack
This commit is contained in:
parent
d8f096f8d9
commit
d5c3fbbdc6
@ -18,6 +18,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/WEB-INF/classes" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
|
@ -18,6 +18,8 @@ import com.pqt.server.module.sale.SaleService;
|
||||
import com.pqt.server.module.state.ServerStateService;
|
||||
import com.pqt.server.module.statistics.StatisticsService;
|
||||
import com.pqt.server.module.stock.StockService;
|
||||
import com.pqt.server.tools.io.ISerialFileManager;
|
||||
import com.pqt.server.tools.io.SimpleSerialFileManagerFactory;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -66,12 +68,13 @@ public class SimpleMessageHandler implements IMessageHandler {
|
||||
|
||||
private MessageManager manager;
|
||||
|
||||
public SimpleMessageHandler() {
|
||||
public SimpleMessageHandler(String ressourceFolderPathStr) {
|
||||
|
||||
serverStateService = new ServerStateService();
|
||||
accountService = new AccountService();
|
||||
accountService = new AccountService(ressourceFolderPathStr);
|
||||
//clientService = new ClientService();
|
||||
stockService = new StockService();
|
||||
saleService = new SaleService(stockService);
|
||||
stockService = new StockService(ressourceFolderPathStr);
|
||||
saleService = new SaleService(stockService, ressourceFolderPathStr);
|
||||
statisticsService = new StatisticsService(stockService, saleService);
|
||||
messageToolFactory = new GSonMessageToolFactory();
|
||||
|
||||
|
@ -5,7 +5,7 @@ import com.pqt.core.entities.user_account.AccountLevel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
//TODO ajouter logs
|
||||
//TODO Issue #6 : 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.
|
||||
@ -18,8 +18,8 @@ public class AccountService {
|
||||
|
||||
private IAccountDao dao;
|
||||
|
||||
public AccountService() {
|
||||
dao = new FileAccountDao();
|
||||
public AccountService(String ressourceFolderPathStr) {
|
||||
dao = new FileAccountDao(ressourceFolderPathStr);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,10 +8,11 @@ import com.pqt.server.tools.security.IHashTool;
|
||||
import com.pqt.server.tools.security.RandomString;
|
||||
import com.pqt.server.tools.security.SHA256HashTool;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//TODO ajouter logs
|
||||
//TODO Issue #6 : ajouter logs
|
||||
|
||||
/**
|
||||
* Implémentation de l'interface {@link IAccountDao} utilisant un fichier contenant des objets sérialisés comme
|
||||
@ -25,8 +26,8 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class FileAccountDao implements IAccountDao {
|
||||
|
||||
//TODO to modify
|
||||
private static final String ACCOUNT_FILE_NAME = "G:\\temp\\acc.pqt";
|
||||
private static final String ACCOUNT_FILE_NAME = "acc.pqt";
|
||||
private final String ACCOUNT_FILE_FOLDER_PATH;
|
||||
|
||||
private Set<AccountEntry> accountEntries;
|
||||
private Set<AccountEntry> connectedAccount;
|
||||
@ -34,15 +35,20 @@ public class FileAccountDao implements IAccountDao {
|
||||
private RandomString randomString;
|
||||
private ISerialFileManager<AccountEntry> fileManager;
|
||||
|
||||
public FileAccountDao() {
|
||||
public FileAccountDao(String ressourceFolderPathStr) {
|
||||
ACCOUNT_FILE_FOLDER_PATH = ressourceFolderPathStr;
|
||||
accountEntries = new HashSet<>();
|
||||
connectedAccount = new HashSet<>();
|
||||
hashTool = new SHA256HashTool();
|
||||
randomString = new RandomString(10);
|
||||
fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, ACCOUNT_FILE_NAME);
|
||||
fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, getAccountFilePathStr());
|
||||
loadFromFile();
|
||||
}
|
||||
|
||||
private String getAccountFilePathStr(){
|
||||
return ACCOUNT_FILE_FOLDER_PATH + File.separator + ACCOUNT_FILE_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recherche une correspondance entre un objet {@link Account} et les objets {@link AccountEntry} contenu dans
|
||||
* la collection {@code entries}. La correspondance se base sur la valeur renvoyée par {@link Account#getUsername()}
|
||||
|
@ -30,12 +30,14 @@ import java.util.Map;
|
||||
public class NoRevertFileSaleDao implements ISaleDao {
|
||||
|
||||
private static final String SALE_LOG_FILE_NAME = "sale_log.txt";
|
||||
private final String SALE_LOG_FILE_FOLDER_PATH;
|
||||
private static final long DEFAULT_SALE_ID = 0; //équivaut à la valeur du premier id - 1
|
||||
private StockService stockService;
|
||||
private long nextSaleId;
|
||||
private ISaleRenderer renderer;
|
||||
|
||||
NoRevertFileSaleDao(StockService stockService) {
|
||||
NoRevertFileSaleDao(StockService stockService, String ressourceFolderPathStr) {
|
||||
SALE_LOG_FILE_FOLDER_PATH = ressourceFolderPathStr;
|
||||
this.stockService = stockService;
|
||||
this.renderer = getRenderer();
|
||||
nextSaleId = readLastSaleIdFromFile()+1;
|
||||
@ -96,7 +98,7 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
||||
*/
|
||||
private long readLastSaleIdFromFile(){
|
||||
long id = DEFAULT_SALE_ID;
|
||||
if(FileUtil.exist(SALE_LOG_FILE_NAME)){
|
||||
if(FileUtil.exist(getLogFilePath())){
|
||||
try(ReversedLinesFileReader rlfr = new ReversedLinesFileReader(new File("SALE_LOG_FILE_NAME"))){
|
||||
boolean stop = false;
|
||||
do{
|
||||
@ -131,7 +133,7 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
||||
}
|
||||
|
||||
private void logSale(Sale sale, Date date, long saleId){
|
||||
try(FileOutputStream fos = new FileOutputStream(SALE_LOG_FILE_NAME);
|
||||
try(FileOutputStream fos = new FileOutputStream(getLogFilePath());
|
||||
PrintWriter pw = new PrintWriter(fos)){
|
||||
|
||||
pw.append(renderer.render(sale, date, saleId));
|
||||
@ -166,4 +168,8 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
||||
private interface ISaleRenderer{
|
||||
String render(Sale sale, Date date, long saleId);
|
||||
}
|
||||
|
||||
private String getLogFilePath(){
|
||||
return SALE_LOG_FILE_FOLDER_PATH + File.separator + SALE_LOG_FILE_NAME;
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import com.pqt.server.module.stock.StockService;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
//TODO ajouter logs
|
||||
//TODO Issue #6 : ajouter logs
|
||||
|
||||
/**
|
||||
* Cette classe correspond au service de validation des commandes de produits.
|
||||
@ -34,8 +34,8 @@ public class SaleService {
|
||||
private ISaleDao dao;
|
||||
private ISaleFirerer eventFirerer;
|
||||
|
||||
public SaleService(StockService stockService) {
|
||||
dao = new NoRevertFileSaleDao(stockService);
|
||||
public SaleService(StockService stockService, String ressourceFolderPathStr) {
|
||||
dao = new NoRevertFileSaleDao(stockService, ressourceFolderPathStr);
|
||||
eventFirerer = new SimpleSaleFirerer();
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import com.pqt.server.tools.entities.SaleContent;
|
||||
import com.pqt.server.tools.io.ISerialFileManager;
|
||||
import com.pqt.server.tools.io.SimpleSerialFileManagerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.IllegalStateException;
|
||||
import java.util.*;
|
||||
|
||||
@ -19,17 +20,22 @@ import java.util.*;
|
||||
*/
|
||||
public class FileStockDao implements IStockDao {
|
||||
|
||||
//TODO to modify
|
||||
private static final String STOCK_FILE_NAME = "G:\\temp\\stock.pqt";
|
||||
private static final String STOCK_FILE_NAME = "stock.pqt";
|
||||
private final String STOCK_FILE_FOLDER_PATH;
|
||||
private ISerialFileManager<Product> fileManager;
|
||||
private long nextProductId;
|
||||
private Random random;
|
||||
|
||||
private Map<Long, Product> products;
|
||||
|
||||
public FileStockDao() {
|
||||
private String getStockFilePathStr(){
|
||||
return STOCK_FILE_FOLDER_PATH + File.separator + STOCK_FILE_NAME;
|
||||
}
|
||||
|
||||
public FileStockDao(String ressourceFolderPathStr) {
|
||||
STOCK_FILE_FOLDER_PATH = ressourceFolderPathStr;
|
||||
random = new Random();
|
||||
fileManager = SimpleSerialFileManagerFactory.getFileManager(Product.class, STOCK_FILE_NAME);
|
||||
fileManager = SimpleSerialFileManagerFactory.getFileManager(Product.class, getStockFilePathStr());
|
||||
loadFromFile();
|
||||
generateNextProductId();
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import com.pqt.server.tools.entities.SaleContent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
//TODO ajouter logs
|
||||
//TODO Issue #6 : ajouter logs
|
||||
|
||||
/**
|
||||
* Cette classe correspond au service de gestion du stock de produits. Il est en charge de la persistance des
|
||||
@ -27,8 +27,8 @@ public class StockService {
|
||||
|
||||
private IStockDao dao;
|
||||
|
||||
public StockService() {
|
||||
dao = new FileStockDao();
|
||||
public StockService(String ressourceFolderPathStr) {
|
||||
dao = new FileStockDao(ressourceFolderPathStr);
|
||||
}
|
||||
|
||||
public List<Product> getProductList() {
|
||||
|
@ -5,6 +5,9 @@ import com.pqt.core.communication.IMessageToolFactory;
|
||||
import com.pqt.core.entities.messages.Message;
|
||||
import com.pqt.server.controller.IMessageHandler;
|
||||
import com.pqt.server.controller.SimpleMessageHandler;
|
||||
import com.pqt.server.servlets.exceptions.BadPqtServerSetupException;
|
||||
import com.pqt.server.tools.io.ISerialFileManager;
|
||||
import com.pqt.server.tools.io.SimpleSerialFileManagerFactory;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
@ -13,18 +16,15 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
//TODO ajouter logs
|
||||
//TODO Issue #6 : ajouter logs
|
||||
@WebServlet(name = "QueryServlet", urlPatterns = "/")
|
||||
public class QueryServlet extends HttpServlet {
|
||||
|
||||
private final IMessageToolFactory messageToolFactory;
|
||||
private final IMessageHandler msgHandler;
|
||||
private IMessageToolFactory messageToolFactory;
|
||||
private IMessageHandler msgHandler;
|
||||
|
||||
public QueryServlet() {
|
||||
super();
|
||||
|
||||
this.messageToolFactory = new GSonMessageToolFactory();
|
||||
this.msgHandler = new SimpleMessageHandler();
|
||||
}
|
||||
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
@ -36,20 +36,38 @@ public class QueryServlet extends HttpServlet {
|
||||
}
|
||||
|
||||
private void executeServletProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
try {
|
||||
if (this.getServletContext().getRealPath("/WEB-INF/classes") == null) {
|
||||
response.getWriter().write(new BadPqtServerSetupException("Real path of ressource folder is null. Current PQT server only works with web server that unpack webapps' WAR files.").toString());
|
||||
} else {
|
||||
if (messageToolFactory == null)
|
||||
this.messageToolFactory = new GSonMessageToolFactory();
|
||||
|
||||
if (request.getQueryString() != null && !request.getQueryString().isEmpty() && request.getParameter("message")!=null) {
|
||||
try {
|
||||
Message resp = msgHandler.handleMessage(messageToolFactory.getObjectParser(Message.class).parse(request.getParameter("message")));
|
||||
if (msgHandler == null) {
|
||||
/*
|
||||
* Le chemin passé en paramètre correspond au chemin réel vers le dossier contenant tous les fichiers de ressources
|
||||
* Cela ne fonctionne que si le webserver utilisé unpackage le war du serveur.
|
||||
*/
|
||||
this.msgHandler = new SimpleMessageHandler(this.getServletContext().getRealPath("/WEB-INF/classes"));
|
||||
}
|
||||
if (request.getQueryString() != null && !request.getQueryString().isEmpty() && request.getParameter("message") != null) {
|
||||
try {
|
||||
Message resp = msgHandler.handleMessage(messageToolFactory.getObjectParser(Message.class).parse(request.getParameter("message")));
|
||||
|
||||
response.getWriter().write(messageToolFactory.getObjectFormatter(Message.class).format(resp));
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
response.getWriter().write(String.format("%s : %s", e.getClass().getName(), e.getMessage()));
|
||||
response.getWriter().write("StackTrace :");
|
||||
e.printStackTrace(response.getWriter());
|
||||
response.getWriter().write(messageToolFactory.getObjectFormatter(Message.class).format(resp));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
response.getWriter().write(String.format("%s : %s", e.getClass().getName(), e.getMessage()));
|
||||
response.getWriter().write("StackTrace :");
|
||||
e.printStackTrace(response.getWriter());
|
||||
}
|
||||
} else {
|
||||
response.getWriter().write("Query message was not correctly made : " + request.getQueryString());
|
||||
}
|
||||
}
|
||||
}else{
|
||||
response.getWriter().write("Query message was not correctly made : "+request.getQueryString());
|
||||
}catch (Throwable e){
|
||||
e.printStackTrace();
|
||||
response.getWriter().write(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user