[CLIENT] #6.A : Ajout de logs

This commit is contained in:
Notmoo-PC\Notmoo 2018-01-25 20:08:16 +01:00
parent d3b5e75896
commit 7f0dc93890
11 changed files with 182 additions and 85 deletions

View File

@ -4,9 +4,13 @@ import com.pqt.client.gui.FrameManager;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Main extends Application{ public class Main extends Application{
private static Logger LOGGER = LogManager.getLogger(Main.class);
public static void main(String[] args){ public static void main(String[] args){
launch(args); launch(args);
} }
@ -15,6 +19,7 @@ public class Main extends Application{
@Override @Override
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
LOGGER.info("Instanciation de l'application JFX du client");
fm = new FrameManager(primaryStage); fm = new FrameManager(primaryStage);
primaryStage.setOnCloseRequest(event-> Platform.exit()); primaryStage.setOnCloseRequest(event-> Platform.exit());
@ -24,6 +29,7 @@ public class Main extends Application{
@Override @Override
public void stop(){ public void stop(){
LOGGER.info("Fermeture de l'application JFX du client");
if(fm!=null) if(fm!=null)
fm.onCloseEvent(); fm.onCloseEvent();
} }

View File

@ -7,6 +7,8 @@ import com.pqt.client.module.query.query_callback.ICollectionItemMessageCallback
import com.pqt.client.module.query.query_callback.INoItemMessageCallback; import com.pqt.client.module.query.query_callback.INoItemMessageCallback;
import com.pqt.core.entities.user_account.Account; import com.pqt.core.entities.user_account.Account;
import com.pqt.client.module.account.listeners.IAccountListener; import com.pqt.client.module.account.listeners.IAccountListener;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.event.EventListenerList; import javax.swing.event.EventListenerList;
import java.util.ArrayList; import java.util.ArrayList;
@ -15,10 +17,10 @@ import java.util.Collection;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
//TODO écrire javadoc //TODO écrire javadoc
//TODO Issue #6 : add log lines
//TODO Issue #17 : supporter la modif de comptes
public class AccountService { public class AccountService {
private static Logger LOGGER = LogManager.getLogger(AccountService.class);
private QueryExecutor executor; private QueryExecutor executor;
private Account currentAccount; private Account currentAccount;
private boolean connected; private boolean connected;
@ -26,9 +28,11 @@ public class AccountService {
private EventListenerList listenerList; private EventListenerList listenerList;
public AccountService(QueryExecutor executor){ public AccountService(QueryExecutor executor){
LOGGER.info("Initialisation du service 'Account'");
this.executor = executor; this.executor = executor;
listenerList = new EventListenerList(); listenerList = new EventListenerList();
accounts = new ArrayList<>(); accounts = new ArrayList<>();
LOGGER.info("Service 'Account' initialisé");
} }
public Account getCurrentAccount() { public Account getCurrentAccount() {
@ -65,30 +69,44 @@ public class AccountService {
&& currentAccount.getUsername().equals(acc.getUsername()) && currentAccount.getUsername().equals(acc.getUsername())
&& currentAccount.getPermissionLevel().equals(acc.getPermissionLevel())) { && currentAccount.getPermissionLevel().equals(acc.getPermissionLevel())) {
connected = state; connected = state;
Arrays.stream(listenerList.getListeners(IAccountListener.class)) fireAccountStatusChangedEvent(connected);
.forEach(l->l.onAccountStatusChangedEvent(connected));
}else }else
Arrays.stream(listenerList.getListeners(IAccountListener.class)) fireAccountStatusNotChangedEvent(
.forEach(l->l.onAccountStatusNotChangedEvent( new IllegalStateException("Account service not in the right state")
new IllegalStateException("Account service not in the right state") );
));
} }
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
Arrays.stream(listenerList.getListeners(IAccountListener.class)) fireAccountStatusNotChangedEvent(cause);
.forEach(l->l.onAccountStatusNotChangedEvent(cause));
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
Arrays.stream(listenerList.getListeners(IAccountListener.class)) fireAccountStatusNotChangedEvent(cause);
.forEach(l->l.onAccountStatusNotChangedEvent(cause));
} }
}); });
} }
} }
private void fireAccountStatusChangedEvent(boolean connected){
LOGGER.info("Etat du compte courant changé à {}", connected);
Arrays.stream(listenerList.getListeners(IAccountListener.class))
.forEach(l->l.onAccountStatusChangedEvent(connected));
}
private void fireAccountStatusNotChangedEvent(Throwable cause){
LOGGER.info("Etat du compte courant inchangé : {}", cause);
Arrays.stream(listenerList.getListeners(IAccountListener.class))
.forEach(l->l.onAccountStatusNotChangedEvent(cause));
}
private void fireAccountListChangedEvent(){
LOGGER.info("Liste des comptes utilisateurs changée");
Arrays.stream(listenerList.getListeners(IAccountListener.class))
.forEach(IAccountListener::onAccountListChangedEvent);
}
public void addListener(IAccountListener listener) { public void addListener(IAccountListener listener) {
listenerList.add(IAccountListener.class, listener); listenerList.add(IAccountListener.class, listener);
} }
@ -116,13 +134,13 @@ public class AccountService {
@Override @Override
public void ack(Collection<Account> obj) { public void ack(Collection<Account> obj) {
accounts = obj; accounts = obj;
Arrays.stream(listenerList.getListeners(IAccountListener.class)) fireAccountListChangedEvent();
.forEach(IAccountListener::onAccountListChangedEvent);
} }
}); });
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Account'");
if(connected) { if(connected) {
try { try {
CountDownLatch latch = new CountDownLatch(1); CountDownLatch latch = new CountDownLatch(1);
@ -130,13 +148,11 @@ public class AccountService {
this.addListener(new AccountListenerAdapter() { this.addListener(new AccountListenerAdapter() {
@Override @Override
public void onAccountStatusChangedEvent(boolean status) { public void onAccountStatusChangedEvent(boolean status) {
//TODO Issue #6 : ajouter des logs
latch.countDown(); latch.countDown();
} }
@Override @Override
public void onAccountStatusNotChangedEvent(Throwable cause) { public void onAccountStatusNotChangedEvent(Throwable cause) {
//TODO Issue #6 : ajouter des logs
cause.printStackTrace(); cause.printStackTrace();
latch.countDown(); latch.countDown();
} }
@ -145,8 +161,7 @@ public class AccountService {
}).start(); }).start();
latch.await(); // Wait for thread to call latch.countDown() latch.await(); // Wait for thread to call latch.countDown()
} catch (InterruptedException e) { } catch (InterruptedException e) {
//TODO Issue #6 : ajouter des logs LOGGER.error("Interruption de la procédure de fermeture du service 'Account' : {}", e);
e.printStackTrace();
}finally { }finally {
listenerList = null; listenerList = null;
} }
@ -159,18 +174,15 @@ public class AccountService {
executor.executeAccountUpdateQuery(builder.build(), new INoItemMessageCallback() { executor.executeAccountUpdateQuery(builder.build(), new INoItemMessageCallback() {
@Override @Override
public void ack() { public void ack() {
//TODO Issue #6 : add log line
refreshAccounts(); refreshAccounts();
} }
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
//TODO Issue #6 : add log line
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
//TODO Issue #6 : add log line
} }
}); });
} }

View File

@ -3,21 +3,27 @@ package com.pqt.client.module.connection;
import com.pqt.client.module.connection.listeners.IConnectionListener; import com.pqt.client.module.connection.listeners.IConnectionListener;
import com.pqt.client.module.connection.senders.HttpTextSender; import com.pqt.client.module.connection.senders.HttpTextSender;
import com.pqt.client.module.connection.senders.ITextSender; import com.pqt.client.module.connection.senders.ITextSender;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.concurrent.*; import java.util.concurrent.*;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
public class ConnectionService { public class ConnectionService {
private static Logger LOGGER = LogManager.getLogger(ConnectionService.class);
private String serverUrl; private String serverUrl;
private ExecutorService executor; private ExecutorService executor;
private ITextSender textSender; private ITextSender textSender;
public ConnectionService(String serverUrl) { public ConnectionService(String serverUrl) {
LOGGER.info("Initialisation du service 'Connection'");
executor = new ThreadPoolExecutor(1, 1, 1000, executor = new ThreadPoolExecutor(1, 1, 1000,
TimeUnit.SECONDS, new LinkedBlockingQueue<>()); TimeUnit.SECONDS, new LinkedBlockingQueue<>());
this.serverUrl = serverUrl; this.serverUrl = serverUrl;
this.textSender = new HttpTextSender(); this.textSender = new HttpTextSender();
LOGGER.info("Service 'Connection' initialisé");
} }
public String getServerUrl() { public String getServerUrl() {
@ -25,6 +31,7 @@ public class ConnectionService {
} }
public void setServerUrl(String url){ public void setServerUrl(String url){
LOGGER.info("L'url du serveur est : {}", url);
this.serverUrl = url; this.serverUrl = url;
} }
@ -65,6 +72,7 @@ public class ConnectionService {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Connection'");
stop(false); stop(false);
} }
} }

View File

@ -1,6 +1,8 @@
package com.pqt.client.module.connection.senders; package com.pqt.client.module.connection.senders;
import com.pqt.client.module.connection.listeners.IConnectionListener; import com.pqt.client.module.connection.listeners.IConnectionListener;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.*; import java.io.*;
import java.net.ConnectException; import java.net.ConnectException;
@ -9,10 +11,13 @@ import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
public class HttpTextSender implements ITextSender{ public class HttpTextSender implements ITextSender{
private static Logger LOGGER = LogManager.getLogger(HttpTextSender.class);
@Override @Override
public void send(String host, String text, IConnectionListener listener) { public void send(String host, String text, IConnectionListener listener) {
try { try {
String trueURL = String.format("http://%s?%s", host, format(text)); String trueURL = String.format("http://%s?%s", host, format(text));
LOGGER.trace("Envoi de la requête HTTP : {}", trueURL);
HttpURLConnection con = (HttpURLConnection) new URL(trueURL).openConnection(); HttpURLConnection con = (HttpURLConnection) new URL(trueURL).openConnection();
con.setRequestMethod("GET"); con.setRequestMethod("GET");
@ -23,6 +28,7 @@ public class HttpTextSender implements ITextSender{
con.setDoOutput(true); con.setDoOutput(true);
con.connect(); con.connect();
LOGGER.trace("Connexion du HTTPTextSender");
listener.onConnectedEvent(); listener.onConnectedEvent();
try(BufferedReader in = new BufferedReader( try(BufferedReader in = new BufferedReader(
@ -32,28 +38,28 @@ public class HttpTextSender implements ITextSender{
while ((inputLine = in.readLine()) != null) { while ((inputLine = in.readLine()) != null) {
content.append(inputLine); content.append(inputLine);
} }
LOGGER.trace("réception de la réponse : {}", content.toString());
listener.onMessageReceivedEvent(content.toString()); listener.onMessageReceivedEvent(content.toString());
} }
con.disconnect(); con.disconnect();
}catch (Exception e) { }catch (Exception e) {
//TODO Issue #6 : ajouter un log ici LOGGER.error("Erreur durant l'envoi d'un message via HTTP vers le serveur : {}", e);
e.printStackTrace();
listener.onConnexionError(e); listener.onConnexionError(e);
}finally { }finally {
LOGGER.trace("Déconnexion du HTTPTextSender");
listener.onDisconnectedEvent(); listener.onDisconnectedEvent();
} }
} }
// Méthode à modifier pour encoder le message suivant un algorithme spécifique // Méthode à modifier pour encoder le message suivant un algorithme spécifique
private String format(String toFormat){ private String format(String toFormat){
String encodeTo = "UTF-8";
try { try {
String encodeTo = "UTF-8";
return String.format("format=%s&message=%s", encodeTo, URLEncoder.encode(toFormat, encodeTo)); return String.format("format=%s&message=%s", encodeTo, URLEncoder.encode(toFormat, encodeTo));
}catch(UnsupportedEncodingException e){ }catch(UnsupportedEncodingException e){
//TODO Issue #6 : ajouter un log ici LOGGER.error("Erreur d'encodage du texte à envoyer vers format {} : {}", encodeTo, e);
e.printStackTrace(); LOGGER.error("Utilisation de la chaine non-formatée");
} }
return String.format("message=%s", toFormat); return String.format("message=%s", toFormat);
} }

View File

@ -7,6 +7,8 @@ import com.pqt.client.module.query.query_callback.IMapItemMessageCallback;
import com.pqt.client.module.query.query_callback.INoItemMessageCallback; import com.pqt.client.module.query.query_callback.INoItemMessageCallback;
import com.pqt.core.entities.server_config.ConfigFields; import com.pqt.core.entities.server_config.ConfigFields;
import com.pqt.core.entities.server_config.ServerConfig; import com.pqt.core.entities.server_config.ServerConfig;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.event.EventListenerList; import javax.swing.event.EventListenerList;
import java.util.*; import java.util.*;
@ -18,16 +20,20 @@ import java.util.*;
*/ */
public class NetworkService { public class NetworkService {
private static Logger LOGGER = LogManager.getLogger(NetworkService.class);
private final QueryExecutor queryExecutor; private final QueryExecutor queryExecutor;
private final ConnectionService connectionService; private final ConnectionService connectionService;
private final EventListenerList listenerList; private final EventListenerList listenerList;
private final ServerConfigCache configCache; private final ServerConfigCache configCache;
public NetworkService(QueryExecutor queryExecutor, ConnectionService connectionService) { public NetworkService(QueryExecutor queryExecutor, ConnectionService connectionService) {
LOGGER.info("Initialisation du service 'Network'");
this.queryExecutor = queryExecutor; this.queryExecutor = queryExecutor;
this.connectionService = connectionService; this.connectionService = connectionService;
listenerList = new EventListenerList(); listenerList = new EventListenerList();
configCache = new ServerConfigCache(); configCache = new ServerConfigCache();
LOGGER.info("Service 'Network' initialisé");
} }
public void addListener(INetworkServiceListener l){ public void addListener(INetworkServiceListener l){
@ -40,9 +46,11 @@ public class NetworkService {
public void sendPQTPing(String host, Integer port){ public void sendPQTPing(String host, Integer port){
checkData(host, port); checkData(host, port);
LOGGER.trace("Envoi d'un ping");
queryExecutor.executePingQuery(new INoItemMessageCallback() { queryExecutor.executePingQuery(new INoItemMessageCallback() {
@Override @Override
public void ack() { public void ack() {
LOGGER.trace("Réponse au ping -> ACK");
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
.forEach(l->l.onPQTPingSuccessEvent(host, port)); .forEach(l->l.onPQTPingSuccessEvent(host, port));
sendConfigRequest(host, port); sendConfigRequest(host, port);
@ -50,12 +58,14 @@ public class NetworkService {
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
LOGGER.trace("Réponse au ping -> ERR");
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
.forEach(l->l.onPQTPingFailureEvent(host, port, cause)); .forEach(l->l.onPQTPingFailureEvent(host, port, cause));
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
LOGGER.trace("Réponse au ping -> REF");
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
.forEach(l->l.onPQTPingFailureEvent(host, port, cause)); .forEach(l->l.onPQTPingFailureEvent(host, port, cause));
} }
@ -79,20 +89,22 @@ public class NetworkService {
} }
private void sendConfigRequest(String host, Integer port){ private void sendConfigRequest(String host, Integer port){
LOGGER.trace("Envoi d'une demande de configuration serveur");
queryExecutor.executeConfigListQuery(new IMapItemMessageCallback<String, String>(){ queryExecutor.executeConfigListQuery(new IMapItemMessageCallback<String, String>(){
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
//TODO Issue #6 : ajouter log erreur LOGGER.error("Erreur lors de la demande de configurations serveur : {}", cause);
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
//TODO Issue #6 : ajouter log erreur LOGGER.error("Demande de configurations serveur refusée : {}", cause);
} }
@Override @Override
public void ack(Map<String, String> obj) { public void ack(Map<String, String> obj) {
LOGGER.trace("Demande de configuration serveur acceptée");
configCache.addServerConfig(host, port, convertToServerConfig(obj)); configCache.addServerConfig(host, port, convertToServerConfig(obj));
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
.forEach(INetworkServiceListener::onNewServerConfigData); .forEach(INetworkServiceListener::onNewServerConfigData);
@ -141,6 +153,7 @@ public class NetworkService {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Network'");
//Nothing to do //Nothing to do
} }
} }

View File

@ -15,20 +15,26 @@ import com.pqt.core.entities.product.ProductUpdate;
import com.pqt.core.entities.sale.LightweightSale; import com.pqt.core.entities.sale.LightweightSale;
import com.pqt.core.entities.user_account.Account; import com.pqt.core.entities.user_account.Account;
import com.pqt.core.entities.user_account.AccountUpdate; import com.pqt.core.entities.user_account.AccountUpdate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.List; import java.util.List;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
public class QueryExecutor { public class QueryExecutor {
private static Logger LOGGER = LogManager.getLogger(QueryExecutor.class);
private IMessageToolFactory messageToolFactory; private IMessageToolFactory messageToolFactory;
private ConnectionService connectionService; private ConnectionService connectionService;
private QueryMessageFactory messageFactory; private QueryMessageFactory messageFactory;
public QueryExecutor(ConnectionService connectionService){ public QueryExecutor(ConnectionService connectionService){
LOGGER.info("Initialisation du QueryExecutor");
messageToolFactory = new GSonMessageToolFactory(); messageToolFactory = new GSonMessageToolFactory();
this.connectionService = connectionService; this.connectionService = connectionService;
this.messageFactory = new QueryMessageFactory(messageToolFactory); this.messageFactory = new QueryMessageFactory(messageToolFactory);
LOGGER.info("QueryExecutor initialisé");
} }
public void setAccountService(AccountService accountService){ public void setAccountService(AccountService accountService){
@ -56,9 +62,11 @@ public class QueryExecutor {
} }
private void sendMessage(Message message, INoItemMessageCallback callback, MessageType responseType){ private void sendMessage(Message message, INoItemMessageCallback callback, MessageType responseType){
LOGGER.debug("Envoi d'un message de type '{}' en mode no-item", message.getType().name());
connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() {
@Override @Override
public void onMessageReceivedEvent(String msg) { public void onMessageReceivedEvent(String msg) {
LOGGER.trace("Réception d'une réponse : {}",msg);
Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); Message response = messageToolFactory.getObjectParser(Message.class).parse(msg);
if(response.getType().equals(responseType)) if(response.getType().equals(responseType))
callback.ack(); callback.ack();
@ -68,21 +76,23 @@ public class QueryExecutor {
@Override @Override
public void onConnectedEvent() { public void onConnectedEvent() {
LOGGER.trace("Connexion au serveur");
} }
@Override @Override
public void onDisconnectedEvent() { public void onDisconnectedEvent() {
LOGGER.trace("Déconnexion au serveur");
} }
@Override @Override
public void onTimeOutEvent() { public void onTimeOutEvent() {
LOGGER.trace("Timeout du server");
callback.err(new MessageTimeoutException()); callback.err(new MessageTimeoutException());
} }
@Override @Override
public void onConnexionError(Throwable e) { public void onConnexionError(Throwable e) {
LOGGER.warn("Erreur durant l'envoi d'un message : {}", e);
callback.err(e); callback.err(e);
} }
}); });
@ -97,9 +107,11 @@ public class QueryExecutor {
} }
private <T> void sendMessage(Message message, ICollectionItemMessageCallback<T> callback, Class<T> clazz, MessageType responseType, String itemHeader){ private <T> void sendMessage(Message message, ICollectionItemMessageCallback<T> callback, Class<T> clazz, MessageType responseType, String itemHeader){
LOGGER.debug("Envoi d'un message de type '{}' en mode collection-item", message.getType().name());
connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() {
@Override @Override
public void onMessageReceivedEvent(String msg) { public void onMessageReceivedEvent(String msg) {
LOGGER.trace("Réception d'une réponse : {}",msg);
Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); Message response = messageToolFactory.getObjectParser(Message.class).parse(msg);
if(response.getType().equals(responseType)) { if(response.getType().equals(responseType)) {
String item = response.getField(itemHeader); String item = response.getField(itemHeader);
@ -114,21 +126,23 @@ public class QueryExecutor {
@Override @Override
public void onConnectedEvent() { public void onConnectedEvent() {
LOGGER.trace("Connexion au serveur");
} }
@Override @Override
public void onDisconnectedEvent() { public void onDisconnectedEvent() {
LOGGER.trace("Déconnexion au serveur");
} }
@Override @Override
public void onTimeOutEvent() { public void onTimeOutEvent() {
LOGGER.trace("Timeout du server");
callback.err(new MessageTimeoutException()); callback.err(new MessageTimeoutException());
} }
@Override @Override
public void onConnexionError(Throwable e) { public void onConnexionError(Throwable e) {
LOGGER.warn("Erreur durant l'envoi d'un message : {}", e);
callback.err(e); callback.err(e);
} }
}); });
@ -144,9 +158,11 @@ public class QueryExecutor {
//TODO à rendre générique pour toute Map<T, U> au lieu de Map<String, String> //TODO à rendre générique pour toute Map<T, U> au lieu de Map<String, String>
private void sendMessage(Message message, IMapItemMessageCallback<String, String> callback, MessageType responseType){ private void sendMessage(Message message, IMapItemMessageCallback<String, String> callback, MessageType responseType){
LOGGER.debug("Envoi d'un message de type '{}' en mode map-item", message.getType().name());
connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() {
@Override @Override
public void onMessageReceivedEvent(String msg) { public void onMessageReceivedEvent(String msg) {
LOGGER.trace("Réception d'une réponse : {}",msg);
Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); Message response = messageToolFactory.getObjectParser(Message.class).parse(msg);
if(response.getType().equals(responseType)){ if(response.getType().equals(responseType)){
callback.ack(response.getFields()); callback.ack(response.getFields());
@ -156,21 +172,23 @@ public class QueryExecutor {
@Override @Override
public void onConnectedEvent() { public void onConnectedEvent() {
LOGGER.trace("Connexion au serveur");
} }
@Override @Override
public void onDisconnectedEvent() { public void onDisconnectedEvent() {
LOGGER.trace("Déconnexion au serveur");
} }
@Override @Override
public void onTimeOutEvent() { public void onTimeOutEvent() {
LOGGER.trace("Timeout du server");
callback.err(new MessageTimeoutException()); callback.err(new MessageTimeoutException());
} }
@Override @Override
public void onConnexionError(Throwable e) { public void onConnexionError(Throwable e) {
LOGGER.warn("Erreur durant l'envoi d'un message : {}", e);
callback.err(e); callback.err(e);
} }
}); });
@ -204,6 +222,7 @@ public class QueryExecutor {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du QueryExecutor");
//Nothing to do //Nothing to do
} }
} }

View File

@ -6,21 +6,26 @@ import com.pqt.client.module.sale.listeners.ISaleFirerer;
import com.pqt.client.module.sale.listeners.ISaleListener; import com.pqt.client.module.sale.listeners.ISaleListener;
import com.pqt.client.module.sale.listeners.SimpleSaleFirerer; import com.pqt.client.module.sale.listeners.SimpleSaleFirerer;
import com.pqt.core.entities.sale.SaleType; import com.pqt.core.entities.sale.SaleType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.*; import java.util.*;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
//TODO Issue #6 : add log lines
public class SaleService { public class SaleService {
private static Logger LOGGER = LogManager.getLogger(SaleService.class);
private long saleId; private long saleId;
private ISaleFirerer eventFirerer; private ISaleFirerer eventFirerer;
private QueryExecutor executor; private QueryExecutor executor;
public SaleService(QueryExecutor executor) { public SaleService(QueryExecutor executor) {
LOGGER.info("Initialisation du service 'Sale'");
saleId = 0; saleId = 0;
eventFirerer = new SimpleSaleFirerer(); eventFirerer = new SimpleSaleFirerer();
this.executor = executor; this.executor = executor;
LOGGER.info("Service 'Sale' initialisé");
} }
public SaleBuilder getNewSaleBuilder() { public SaleBuilder getNewSaleBuilder() {
@ -34,19 +39,23 @@ public class SaleService {
else else
saleId = 0; saleId = 0;
LOGGER.debug("Soumission de la commande numéro {}", saleId);
executor.executeSaleQuery(saleBuilder.buildLightweight(), new INoItemMessageCallback() { executor.executeSaleQuery(saleBuilder.buildLightweight(), new INoItemMessageCallback() {
@Override @Override
public void ack() { public void ack() {
LOGGER.debug("Commande {} acceptée", saleId);
eventFirerer.fireSaleValidationSuccess(currentSaleId); eventFirerer.fireSaleValidationSuccess(currentSaleId);
} }
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
LOGGER.debug("Erreur durant la soumission de la commande {} : {}", saleId, cause.getMessage());
eventFirerer.fireSaleValidationError(currentSaleId, cause); eventFirerer.fireSaleValidationError(currentSaleId, cause);
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
LOGGER.debug("Commande {} refusée : {}", saleId, cause.getMessage());
eventFirerer.fireSaleValidationRefused(currentSaleId, cause); eventFirerer.fireSaleValidationRefused(currentSaleId, cause);
} }
}); });
@ -80,6 +89,7 @@ public class SaleService {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Sale'");
//Nothing to do //Nothing to do
} }
} }

View File

@ -5,60 +5,65 @@ import com.pqt.client.module.query.query_callback.IMapItemMessageCallback;
import com.pqt.client.module.stat.listeners.IStatFirerer; import com.pqt.client.module.stat.listeners.IStatFirerer;
import com.pqt.client.module.stat.listeners.IStatListener; import com.pqt.client.module.stat.listeners.IStatListener;
import com.pqt.client.module.stat.listeners.SimpleStatFirerer; import com.pqt.client.module.stat.listeners.SimpleStatFirerer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.*; import java.util.*;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
public class StatDao { public class StatDao {
private Date lastRefreshTimestamp; private static Logger LOGGER = LogManager.getLogger(StatDao.class);
private Map<String, String> stats;
private IStatFirerer eventFirerer;
private QueryExecutor executor;
public StatDao(QueryExecutor executor) { private Date lastRefreshTimestamp;
eventFirerer = new SimpleStatFirerer(); private Map<String, String> stats;
stats = new HashMap<>(); private IStatFirerer eventFirerer;
lastRefreshTimestamp = null; private QueryExecutor executor;
this.executor = executor;
}
public synchronized Map<String, String> getStats() { public StatDao(QueryExecutor executor) {
return new HashMap<>(stats); eventFirerer = new SimpleStatFirerer();
} stats = new HashMap<>();
lastRefreshTimestamp = null;
this.executor = executor;
}
public void refreshStats() { public synchronized Map<String, String> getStats() {
executor.executeStatQuery(new IMapItemMessageCallback<String, String>() { return new HashMap<>(stats);
@Override }
public void err(Throwable cause) {
eventFirerer.fireGetStatError(cause);
//TODO Issue #6 : add log line
}
@Override public void refreshStats() {
public void ref(Throwable cause) { LOGGER.trace("Mise à jour des statistiques");
eventFirerer.fireGetStatRefused(cause); executor.executeStatQuery(new IMapItemMessageCallback<String, String>() {
//TODO Issue #6 : add log line @Override
} public void err(Throwable cause) {
eventFirerer.fireGetStatError(cause);
LOGGER.trace("Erreur de mise à jour des statistiques : {}", cause);
}
@Override @Override
public void ack(Map<String, String> stats) { public void ref(Throwable cause) {
replaceStats(stats); eventFirerer.fireGetStatRefused(cause);
eventFirerer.fireGetStatSuccess(); LOGGER.trace("Mise à jour des statistiques refusée : {}", cause);
//TODO Issue #6 : add log line }
}
});
}
public Date getLastRefreshTimestamp(){ @Override
return lastRefreshTimestamp; public void ack(Map<String, String> stats) {
} replaceStats(stats);
eventFirerer.fireGetStatSuccess();
LOGGER.trace("Mise à jour des statistiques finie");
}
});
}
private synchronized void replaceStats(Map<String, String> stats) { public Date getLastRefreshTimestamp(){
this.stats = new HashMap<>(stats); return lastRefreshTimestamp;
this.lastRefreshTimestamp = new Date(); }
eventFirerer.fireStatChangedEvent();
} private synchronized void replaceStats(Map<String, String> stats) {
this.stats = new HashMap<>(stats);
this.lastRefreshTimestamp = new Date();
eventFirerer.fireStatChangedEvent();
}
public void removeListener(IStatListener listener) { public void removeListener(IStatListener listener) {
eventFirerer.removeListener(listener); eventFirerer.removeListener(listener);

View File

@ -2,17 +2,22 @@ package com.pqt.client.module.stat;
import com.pqt.client.module.query.QueryExecutor; import com.pqt.client.module.query.QueryExecutor;
import com.pqt.client.module.stat.listeners.IStatListener; import com.pqt.client.module.stat.listeners.IStatListener;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map; import java.util.Map;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
//TODO Issue #6 : add log lines
public class StatService { public class StatService {
private static Logger LOGGER = LogManager.getLogger(StatService.class);
private StatDao dao; private StatDao dao;
public StatService(QueryExecutor executor) { public StatService(QueryExecutor executor) {
LOGGER.info("Initialisation du service 'Stat'");
dao = new StatDao(executor); dao = new StatDao(executor);
LOGGER.info("Service 'Stat' initialisé");
} }
public Map<String,String> getStats() { public Map<String,String> getStats() {
@ -32,6 +37,7 @@ public class StatService {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Stat'");
//Nothing to do //Nothing to do
} }
} }

View File

@ -8,6 +8,8 @@ import com.pqt.client.module.stock.Listeners.IStockListener;
import com.pqt.client.module.stock.Listeners.SimpleStockFirerer; import com.pqt.client.module.stock.Listeners.SimpleStockFirerer;
import com.pqt.core.entities.product.Product; import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.product.ProductUpdate; import com.pqt.core.entities.product.ProductUpdate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -17,6 +19,8 @@ import java.util.List;
//TODO Issue #5 : écrire javadoc //TODO Issue #5 : écrire javadoc
public class StockDao { public class StockDao {
private static Logger LOGGER = LogManager.getLogger(StockDao.class);
private long updateId; private long updateId;
private IStockFirerer eventFirerer; private IStockFirerer eventFirerer;
private Date lastRefreshTimestamp; private Date lastRefreshTimestamp;
@ -40,23 +44,24 @@ public class StockDao {
} }
public void refreshProductList() { public void refreshProductList() {
LOGGER.trace("Demande de mise à jour du stock");
executor.executeStockQuery(new ICollectionItemMessageCallback<Product>() { executor.executeStockQuery(new ICollectionItemMessageCallback<Product>() {
@Override @Override
public void ack(Collection<Product> obj) { public void ack(Collection<Product> obj) {
replaceProductList(obj); replaceProductList(obj);
eventFirerer.fireGetProductListSuccessEvent(); eventFirerer.fireGetProductListSuccessEvent();
//TODO Issue #6 : add log line LOGGER.trace("Mise à jour du stock");
} }
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
//TODO Issue #6 : add log line LOGGER.trace("Demande de mise à jour du stock");
eventFirerer.fireGetProductListErrorEvent(cause); eventFirerer.fireGetProductListErrorEvent(cause);
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
//TODO Issue #6 : add log line LOGGER.trace("Demande de mise à jour du stock refusée : {}", cause);
eventFirerer.fireGetProductListRefusedEvent(cause); eventFirerer.fireGetProductListRefusedEvent(cause);
} }
}); });
@ -79,23 +84,24 @@ public class StockDao {
updateId++; updateId++;
else else
updateId = 0; updateId = 0;
LOGGER.trace("Demande de modification du stock : modification numéro {}", updateId);
executor.executeStockUpdateQuery(updates, new INoItemMessageCallback() { executor.executeStockUpdateQuery(updates, new INoItemMessageCallback() {
@Override @Override
public void ack() { public void ack() {
//TODO Issue #6 : add log line LOGGER.trace("Modification du stock numéro {} acceptée", updateId);
refreshProductList(); refreshProductList();
eventFirerer.fireProductListUpdateSuccessEvent(currentUpdateId); eventFirerer.fireProductListUpdateSuccessEvent(currentUpdateId);
} }
@Override @Override
public void err(Throwable cause) { public void err(Throwable cause) {
//TODO Issue #6 : add log line LOGGER.trace("Erreur durant la modification du stock numéro {} : {}", updateId, cause.getMessage());
eventFirerer.fireProductListUpdateErrorEvent(currentUpdateId, cause); eventFirerer.fireProductListUpdateErrorEvent(currentUpdateId, cause);
} }
@Override @Override
public void ref(Throwable cause) { public void ref(Throwable cause) {
//TODO Issue #6 : add log line LOGGER.trace("Modification du stock numéro {} refusée : {}", updateId, cause.getMessage());
eventFirerer.fireProductListUpdateRefusedEvent(currentUpdateId, cause); eventFirerer.fireProductListUpdateRefusedEvent(currentUpdateId, cause);
} }
}); });

View File

@ -3,17 +3,22 @@ package com.pqt.client.module.stock;
import com.pqt.client.module.query.QueryExecutor; import com.pqt.client.module.query.QueryExecutor;
import com.pqt.core.entities.product.Product; import com.pqt.core.entities.product.Product;
import com.pqt.client.module.stock.Listeners.IStockListener; import com.pqt.client.module.stock.Listeners.IStockListener;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
//TODO Issue #6 : Add log lines
public class StockService { public class StockService {
private static Logger LOGGER = LogManager.getLogger(StockService.class);
private StockDao dao; private StockDao dao;
public StockService(QueryExecutor executor) { public StockService(QueryExecutor executor) {
LOGGER.info("Initialisation du service 'Stock'");
dao = new StockDao(executor); dao = new StockDao(executor);
LOGGER.info("Service 'Stock' initialisé");
} }
/** /**
@ -131,6 +136,7 @@ public class StockService {
} }
public void shutdown() { public void shutdown() {
LOGGER.info("Fermeture du service 'Stock'");
//Nothing to do //Nothing to do
} }
} }