From e6af406d63e7bc6f35cd85f5c7f45286035d12ac Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Wed, 23 Aug 2017 13:51:03 +0200 Subject: [PATCH 01/18] Update fichiers .iml --- Workspace/client/client.iml | 1 - Workspace/core/core.iml | 1 - Workspace/server/server.iml | 4 ++++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Workspace/client/client.iml b/Workspace/client/client.iml index b561a70c..d00773ef 100644 --- a/Workspace/client/client.iml +++ b/Workspace/client/client.iml @@ -11,7 +11,6 @@ - diff --git a/Workspace/core/core.iml b/Workspace/core/core.iml index 192d284a..033f05b0 100644 --- a/Workspace/core/core.iml +++ b/Workspace/core/core.iml @@ -21,6 +21,5 @@ - \ No newline at end of file diff --git a/Workspace/server/server.iml b/Workspace/server/server.iml index 3284aafa..9e96cbf1 100644 --- a/Workspace/server/server.iml +++ b/Workspace/server/server.iml @@ -29,6 +29,10 @@ + + + + From d2c89a31aea2ca1413ce30f63c421312e5a56de0 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Wed, 23 Aug 2017 20:30:30 +0200 Subject: [PATCH 02/18] =?UTF-8?q?Module=20Client,=20service=20Connexion=20?= =?UTF-8?q?:=20ajout=20code=20du=20service=20+=20classes=20utilis=C3=A9es?= =?UTF-8?q?=20dans=20le=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/connection/ConnectionService.java | 86 ++++++++++++------- .../listeners/ConnectionListenerAdapter.java | 16 +++- .../listeners/IConnectionFirerer.java | 12 +-- .../listeners/IConnectionListener.java | 8 +- .../listeners/SimpleConnectionFirerer.java | 38 +++++--- .../connection/senders/HttpTextSender.java | 53 ++++++++++++ .../connection/senders/ITextSender.java | 7 ++ 7 files changed, 167 insertions(+), 53 deletions(-) create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/connection/senders/HttpTextSender.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/connection/senders/ITextSender.java diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/ConnectionService.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/ConnectionService.java index 71757842..48ddabc8 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/connection/ConnectionService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/ConnectionService.java @@ -1,46 +1,66 @@ package com.pqt.client.module.connection; import com.pqt.client.module.connection.listeners.IConnectionListener; +import com.pqt.client.module.connection.senders.HttpTextSender; +import com.pqt.client.module.connection.senders.ITextSender; + +import java.util.concurrent.*; -//TODO écrire contenu méthodes //TODO écrire javadoc -//TODO add log lines? public class ConnectionService { - public boolean isConnectedToServer() { - return false; + private String serverUrl; + private ExecutorService executor; + private ITextSender textSender; + + public ConnectionService(String serverUrl) { + executor = new ThreadPoolExecutor(1, 1, 1000, + TimeUnit.SECONDS, new LinkedBlockingQueue<>()); + this.serverUrl = serverUrl; + this.textSender = new HttpTextSender(); + } + + public String getServerUrl() { + return serverUrl; } - public void connectToServer(String ip_address) { - - } - - public void disconnectFromServer() { - - } - - public String getCurrentServerIpAddress() { - return null; - } - - public void start() { - - } - - public void stop() { - - } - - public void sendText(String text) { - - } - - public void addListener(IConnectionListener listener) { - - } - - public void removeListener(IConnectionListener listener) { + public void setServerUrl(String url){ + this.serverUrl = url; + } + /** + * Arrête le service d'envoi. + *

+ * Si ce service est arrêté, il ne sera plus possible de l'utiliser, et ne pourra pas être redémarré. Une + * autre isntance devra être utilisée pour pouvoir recommencer à se servir de ce service. + *

+ * Si {@code force} vaut true, le service tentera d'interrompre tous les envois de texte en cours, même s'il ne + * sont pas terminés. Sinon, le service attendra que tous les envois en cours soient terminé avant de s'arrêter, mais + * n'acceptera pas de nouveaux envois. + * @param force {@code true} si l'arrêt du service doit être forcé, {@code false} sinon + */ + public void stop(boolean force) { + if(executor!=null) + if(force) + executor.shutdownNow(); + else + executor.shutdown(); } + /** + * Envoie la chaîne de caractères {@code text} au serveur de donnée correspondant à l'URL {@link #getServerUrl()}, et + * utilise {@code listener} pour notifier l'avancement de l'envoi. + * + * @param text texte à envoyer + * @param listener listener à utiliser pour notifier l'avancement de l'envoi (voir {@link IConnectionListener}) + * @throws IllegalStateException Si l'url du serveur vaut {@code null} (à spécifier à la constructyion ou avec + * {@link #setServerUrl(String)}, ou si le service à été arrêté via la méthode {@link #stop(boolean)}. + */ + public void sendText(String text, IConnectionListener listener) throws IllegalStateException{ + if(serverUrl==null) + throw new IllegalStateException("No url specified for data server"); + if(executor.isShutdown() || executor.isTerminated()) + throw new IllegalStateException("Service was shut down : unable to send text"); + executor.submit(()->textSender.send(serverUrl, text, listener)); + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/ConnectionListenerAdapter.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/ConnectionListenerAdapter.java index 1b99f8fa..a681450a 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/ConnectionListenerAdapter.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/ConnectionListenerAdapter.java @@ -1,7 +1,5 @@ package com.pqt.client.module.connection.listeners; -//TODO écrire contenu méthodes -//TODO écrire javadoc public class ConnectionListenerAdapter implements IConnectionListener { @@ -10,6 +8,7 @@ public class ConnectionListenerAdapter implements IConnectionListener { * * */ + @Override public void onMessageReceivedEvent(String msg) { } @@ -20,6 +19,7 @@ public class ConnectionListenerAdapter implements IConnectionListener { * * */ + @Override public void onConnectedEvent() { } @@ -30,8 +30,20 @@ public class ConnectionListenerAdapter implements IConnectionListener { * * */ + @Override public void onDisconnectedEvent() { } + + /** + * @see com.pqt.client.module.connection.listeners.IConnectionListener#onTimeOutEvent() + * + * + */ + @Override + public void onTimeOutEvent() { + + } + } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionFirerer.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionFirerer.java index 4afdde4d..a9a24609 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionFirerer.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionFirerer.java @@ -2,14 +2,16 @@ package com.pqt.client.module.connection.listeners; public interface IConnectionFirerer { - public abstract void fireMessageReceivedEvent(String msg); + void fireMessageReceivedEvent(String msg); - public abstract void fireConnectedEvent(); + void fireConnectedEvent(); - public abstract void fireDisconnectedEvent(); + void fireDisconnectedEvent(); - public abstract void addListener(IConnectionListener listener); + void fireTimeOutEvent(); - public abstract void removeListener(IConnectionListener listener); + void addListener(IConnectionListener listener); + + void removeListener(IConnectionListener listener); } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionListener.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionListener.java index c04b3b52..1444d908 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionListener.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/IConnectionListener.java @@ -4,10 +4,12 @@ import java.util.EventListener; public interface IConnectionListener extends EventListener { - public abstract void onMessageReceivedEvent(String msg); + void onMessageReceivedEvent(String msg); - public abstract void onConnectedEvent(); + void onConnectedEvent(); - public abstract void onDisconnectedEvent(); + void onDisconnectedEvent(); + + void onTimeOutEvent(); } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/SimpleConnectionFirerer.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/SimpleConnectionFirerer.java index d8bbf425..e4b2f47f 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/SimpleConnectionFirerer.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/listeners/SimpleConnectionFirerer.java @@ -1,49 +1,67 @@ package com.pqt.client.module.connection.listeners; -//TODO écrire contenu méthodes -//TODO écrire javadoc +import javax.swing.event.EventListenerList; +import java.util.Arrays; + public class SimpleConnectionFirerer implements IConnectionFirerer { + private EventListenerList listenerList; + + public SimpleConnectionFirerer() { + listenerList = new EventListenerList(); + } /** * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireMessageReceivedEvent(String) - * - * + * */ + @Override public void fireMessageReceivedEvent(String msg) { - + Arrays.stream(listenerList.getListeners(IConnectionListener.class)).forEach(listener->listener.onMessageReceivedEvent(msg)); } /** * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireConnectedEvent() */ + @Override public void fireConnectedEvent() { - + Arrays.stream(listenerList.getListeners(IConnectionListener.class)).forEach(IConnectionListener::onConnectedEvent); } /** * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireDisconnectedEvent() */ + @Override public void fireDisconnectedEvent() { - + Arrays.stream(listenerList.getListeners(IConnectionListener.class)).forEach(IConnectionListener::onDisconnectedEvent); } + /** + * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireTimeOutEvent() + */ + @Override + public void fireTimeOutEvent() { + Arrays.stream(listenerList.getListeners(IConnectionListener.class)).forEach(IConnectionListener::onDisconnectedEvent); + } - /** + + /** * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#addListener(com.pqt.client.module.connection.listeners.IConnectionListener) */ + @Override public void addListener(IConnectionListener listener) { - + listenerList.add(IConnectionListener.class, listener); } /** * @see com.pqt.client.module.connection.listeners.IConnectionFirerer#removeListener(com.pqt.client.module.connection.listeners.IConnectionListener) */ + @Override public void removeListener(IConnectionListener listener) { - + listenerList.remove(IConnectionListener.class, listener); } } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/HttpTextSender.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/HttpTextSender.java new file mode 100644 index 00000000..993d434f --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/HttpTextSender.java @@ -0,0 +1,53 @@ +package com.pqt.client.module.connection.senders; + +import com.pqt.client.module.connection.listeners.IConnectionListener; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +public class HttpTextSender implements ITextSender{ + @Override + public void send(String url, String text, IConnectionListener listener) { + try { + HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); + con.setRequestMethod("GET"); + con.setRequestProperty("Content-Type", "application/json"); + con.setConnectTimeout(5000); + con.setReadTimeout(5000); + con.setInstanceFollowRedirects(true); + + String params = URLEncoder.encode("message="+text, "UTF-8"); + con.setDoOutput(true); + try(DataOutputStream out = new DataOutputStream(con.getOutputStream())) { + out.writeBytes(params); + out.flush(); + } + con.connect(); + listener.onConnectedEvent(); + + try(BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream()))) { + StringBuilder content = new StringBuilder(); + String inputLine; + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + listener.onMessageReceivedEvent(content.toString()); + } + + con.disconnect(); + + }catch (java.net.SocketTimeoutException e){ + listener.onTimeOutEvent(); + }catch (IOException e) { + e.printStackTrace(); + }finally { + listener.onDisconnectedEvent(); + } + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/ITextSender.java b/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/ITextSender.java new file mode 100644 index 00000000..e269dbcd --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/connection/senders/ITextSender.java @@ -0,0 +1,7 @@ +package com.pqt.client.module.connection.senders; + +import com.pqt.client.module.connection.listeners.IConnectionListener; + +public interface ITextSender { + void send(String url, String text, IConnectionListener listener); +} From 57b950e4651bb33c949b65e6801f93d23fe33dd5 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Fri, 25 Aug 2017 16:07:08 +0200 Subject: [PATCH 03/18] Module Client : ajout code QueryExecutor + ajout code AccountService; Modif services et dao de service existants pour utiliser le nouveau QueryExecutor --- .../client/module/account/AccountService.java | 101 ++++++++-- .../listeners/AccountListenerAdapter.java | 10 + .../account/listeners/IAccountListener.java | 1 + .../client/module/query/QueryExecutor.java | 181 +++++++++++++++--- .../pqt/client/module/query/QueryFactory.java | 38 ---- .../module/query/QueryMessageFactory.java | 69 +++++++ .../exceptions/HeaderNotFoundException.java | 19 ++ .../exceptions/MessageTimeoutException.java | 19 ++ .../ICollectionItemMessageCallback.java | 6 + .../query_callback/IIdQueryCallback.java | 7 - .../query_callback/IItemMessageCallback.java | 5 + .../IMapItemMessageCallback.java | 7 + .../query_callback/IMessageCallback.java | 6 + .../INoItemMessageCallback.java | 5 + .../query_callback/ISimpleQueryCallback.java | 7 - .../query_callback/IStatQueryCallback.java | 10 - .../query_callback/IStockQueryCallback.java | 11 -- .../pqt/client/module/sale/SaleService.java | 33 +++- .../com/pqt/client/module/stat/StatDao.java | 24 +-- .../pqt/client/module/stat/StatService.java | 5 +- .../com/pqt/client/module/stock/StockDao.java | 43 +++-- .../pqt/client/module/stock/StockService.java | 7 +- 22 files changed, 461 insertions(+), 153 deletions(-) delete mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/QueryFactory.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/QueryMessageFactory.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/HeaderNotFoundException.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/MessageTimeoutException.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ICollectionItemMessageCallback.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IIdQueryCallback.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IItemMessageCallback.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMapItemMessageCallback.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMessageCallback.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/INoItemMessageCallback.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ISimpleQueryCallback.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStatQueryCallback.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStockQueryCallback.java diff --git a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java index 9f6c76a0..1c46f8a6 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java @@ -1,48 +1,123 @@ package com.pqt.client.module.account; +import com.pqt.client.module.query.QueryExecutor; +import com.pqt.client.module.query.query_callback.ICollectionItemMessageCallback; +import com.pqt.client.module.query.query_callback.INoItemMessageCallback; +import com.pqt.core.entities.product.Product; import com.pqt.core.entities.user_account.Account; import com.pqt.client.module.account.listeners.IAccountListener; +import javax.swing.event.EventListenerList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.List; -//TODO écrire contenu méthodes //TODO écrire javadoc //TODO add log lines public class AccountService { + private QueryExecutor executor; + private Account currentAccount; + private boolean connected; + private Collection accounts; + private EventListenerList listenerList; + + public AccountService(QueryExecutor executor){ + this.executor = executor; + listenerList = new EventListenerList(); + accounts = new ArrayList<>(); + refreshAccounts(); + } + public Account getCurrentAccount() { - return null; + return currentAccount; } public void setCurrentAccount(Account account) { - + if(connected) + logOutCurrentAccount(); + this.currentAccount = account; } public boolean isCurrentAccountLoggedIn() { - return false; + return connected; } public void logInCurrentAccount(String password) { - + setCurrentAccountState(password, true); } public void logOutCurrentAccount() { - + setCurrentAccountState(null, false); } - public List getRecentAccounts() { - return null; - } + private void setCurrentAccountState(String password, boolean state){ + if(currentAccount!=null && connected!=state) { + Account acc = new Account(currentAccount); + acc.setPassword(password); + executor.executeConnectAccountQuery(acc, state, new INoItemMessageCallback() { + @Override + public void ack() { + if (currentAccount != null + && connected != state + && currentAccount.getUsername().equals(acc.getUsername()) + && currentAccount.getPermissionLevel().equals(acc.getPermissionLevel())) { + connected = state; + Arrays.stream(listenerList.getListeners(IAccountListener.class)) + .forEach(l->l.onAccountStatusChangedEvent(connected)); + }else + Arrays.stream(listenerList.getListeners(IAccountListener.class)) + .forEach(l->l.onAccountStatusNotChangedEvent( + new IllegalStateException("Account service not in the right state") + )); + } + + @Override + public void err(Throwable cause) { + Arrays.stream(listenerList.getListeners(IAccountListener.class)) + .forEach(l->l.onAccountStatusNotChangedEvent(cause)); + } + + @Override + public void ref(Throwable cause) { + Arrays.stream(listenerList.getListeners(IAccountListener.class)) + .forEach(l->l.onAccountStatusNotChangedEvent(cause)); + } + }); + } + } public void addListener(IAccountListener listener) { - + listenerList.add(IAccountListener.class, listener); } public void removeListener(IAccountListener listener) { - + listenerList.remove(IAccountListener.class, listener); } - public List getAllAccounts() { - return null; + public Collection getAllAccounts() { + return accounts; + } + + public void refreshAccounts(){ + executor.executeAccountListQuery(new ICollectionItemMessageCallback() { + @Override + public void err(Throwable cause) { + + } + + @Override + public void ref(Throwable cause) { + + } + + @Override + public void ack(Collection obj) { + accounts = obj; + Arrays.stream(listenerList.getListeners(IAccountListener.class)) + .forEach(IAccountListener::onAccountListChangedEvent); + } + }); } } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/AccountListenerAdapter.java b/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/AccountListenerAdapter.java index 6abd0649..cf29f75a 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/AccountListenerAdapter.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/AccountListenerAdapter.java @@ -8,13 +8,23 @@ public class AccountListenerAdapter implements IAccountListener { /** * @see com.pqt.client.module.account.listeners.IAccountListener#onAccountStatusChangedEvent(boolean) */ + @Override public void onAccountStatusChangedEvent(boolean status) { } + /** + * @see com.pqt.client.module.account.listeners.IAccountListener#onAccountStatusNotChangedEvent(Throwable) + */ + @Override + public void onAccountStatusNotChangedEvent(Throwable cause) { + + } + /** * @see com.pqt.client.module.account.listeners.IAccountListener#onAccountListChangedEvent() */ + @Override public void onAccountListChangedEvent() { } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/IAccountListener.java b/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/IAccountListener.java index 0de33085..821f3798 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/IAccountListener.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/account/listeners/IAccountListener.java @@ -5,5 +5,6 @@ import java.util.EventListener; public interface IAccountListener extends EventListener { void onAccountStatusChangedEvent(boolean status); + void onAccountStatusNotChangedEvent(Throwable cause); void onAccountListChangedEvent(); } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/QueryExecutor.java b/Workspace/client/src/main/java/com/pqt/client/module/query/QueryExecutor.java index 63167cee..0472a3a5 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/QueryExecutor.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/QueryExecutor.java @@ -1,35 +1,170 @@ package com.pqt.client.module.query; -import com.pqt.client.module.query.query_callback.IIdQueryCallback; -import com.pqt.core.entities.query.IQuery; -import com.pqt.client.module.query.query_callback.ISimpleQueryCallback; -import com.pqt.client.module.query.query_callback.IStatQueryCallback; -import com.pqt.client.module.query.query_callback.IStockQueryCallback; +import com.pqt.client.module.connection.ConnectionService; +import com.pqt.client.module.connection.listeners.IConnectionListener; +import com.pqt.client.module.query.exceptions.HeaderNotFoundException; +import com.pqt.client.module.query.exceptions.MessageTimeoutException; +import com.pqt.client.module.query.query_callback.*; +import com.pqt.core.communication.GSonMessageToolFactory; +import com.pqt.core.communication.IMessageToolFactory; +import com.pqt.core.entities.messages.Message; +import com.pqt.core.entities.messages.MessageType; +import com.pqt.core.entities.product.Product; +import com.pqt.core.entities.product.ProductUpdate; +import com.pqt.core.entities.sale.Sale; +import com.pqt.core.entities.user_account.Account; + +import java.util.List; -//TODO écrire contenu méthodes //TODO écrire javadoc public class QueryExecutor { - public static final QueryExecutor INSTANCE = new QueryExecutor(); - - private QueryExecutor(){ + private IMessageToolFactory messageToolFactory; + private ConnectionService connectionService; + private QueryMessageFactory messageFactory; + public QueryExecutor(ConnectionService connectionService){ + messageToolFactory = new GSonMessageToolFactory(); + this.connectionService = connectionService; + this.messageFactory = new QueryMessageFactory(messageToolFactory); } - public long execute(IQuery query, ISimpleQueryCallback callback) { - return 0; - } - - public long execute(IQuery query, IStatQueryCallback callback) { - return 0; - } - - public long execute(IQuery query, IStockQueryCallback callback) { - return 0; - } - - public long execute(IQuery query, IIdQueryCallback callback) { - return 0; + public void executeSaleQuery(Sale sale, INoItemMessageCallback callback) { + sendMessage(messageFactory.newSaleMessage(sale), callback, MessageType.ACK_SALE); } + public void executePingQuery(INoItemMessageCallback callback){ + sendMessage(messageFactory.newPingMessage(), callback, MessageType.ACK_PING); + } + + public void executeUpdateQuery(List updates, INoItemMessageCallback callback) { + sendMessage(messageFactory.newUpdateMessage(updates), callback, MessageType.ACK_UPDATE); + } + + public void executeConnectAccountQuery(Account account, boolean desiredState, INoItemMessageCallback callback){ + sendMessage(messageFactory.newConnectAccountMessage(account,desiredState), callback, MessageType.ACK_CONNECT_ACCOUNT); + } + + private void sendMessage(Message message, INoItemMessageCallback callback, MessageType responseType){ + connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { + @Override + public void onMessageReceivedEvent(String msg) { + Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); + if(response.getType().equals(responseType)) + callback.ack(); + else + handleUnexpectedTypeInResponse(response, callback); + } + + @Override + public void onConnectedEvent() { + + } + + @Override + public void onDisconnectedEvent() { + + } + + @Override + public void onTimeOutEvent() { + callback.err(new MessageTimeoutException()); + } + }); + } + + public void executeStockQuery(ICollectionItemMessageCallback callback) { + sendMessage(messageFactory.newStockMessage(), callback, Product.class, MessageType.MSG_STOCK, "stock"); + } + + public void executeAccountListQuery(ICollectionItemMessageCallback callback){ + sendMessage(messageFactory.newAccountListMessage(), callback, Account.class, MessageType.MSG_ACCOUNT_LIST, "accounts"); + } + + private void sendMessage(Message message, ICollectionItemMessageCallback callback, Class clazz, MessageType responseType, String itemHeader){ + connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { + @Override + public void onMessageReceivedEvent(String msg) { + Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); + if(response.getType().equals(responseType)) { + String item = response.getField(itemHeader); + if (item != null) + callback.ack(messageToolFactory.getListParser(clazz).parse(item)); + else + callback.err(new HeaderNotFoundException("Missing expected header \""+ + itemHeader+"\" in response \""+responseType.name()+"\"")); + }else + handleUnexpectedTypeInResponse(response, callback); + } + + @Override + public void onConnectedEvent() { + + } + + @Override + public void onDisconnectedEvent() { + + } + + @Override + public void onTimeOutEvent() { + callback.err(new MessageTimeoutException()); + } + }); + } + + public void executeStatQuery(IMapItemMessageCallback callback) { + sendMessage(messageFactory.newStatMessage(), callback, MessageType.MSG_STAT); + } + + public void executeConfigListQuery(IMapItemMessageCallback callback){ + sendMessage(messageFactory.newConfigListMessage(), callback, MessageType.MSG_CONFIG_LIST); + } + + //TODO à rendre générique pour toute Map au lieu de Map + private void sendMessage(Message message, IMapItemMessageCallback callback, MessageType responseType){ + connectionService.sendText(messageToolFactory.getObjectFormatter(Message.class).format(message), new IConnectionListener() { + @Override + public void onMessageReceivedEvent(String msg) { + Message response = messageToolFactory.getObjectParser(Message.class).parse(msg); + if(response.getType().equals(responseType)){ + callback.ack(response.getFields()); + }else + handleUnexpectedTypeInResponse(response, callback); + } + + @Override + public void onConnectedEvent() { + + } + + @Override + public void onDisconnectedEvent() { + + } + + @Override + public void onTimeOutEvent() { + callback.err(new MessageTimeoutException()); + } + }); + } + + private void handleUnexpectedTypeInResponse(Message response, IMessageCallback callback){ + switch (response.getType()) { + case ERROR_QUERY: + callback.err(messageToolFactory.getObjectParser(Throwable.class).parse(response.getField("Detail_erreur"))); + break; + case REFUSED_QUERY: + callback.ref(messageToolFactory.getObjectParser(Throwable.class).parse(response.getField("Detail_refus"))); + break; + default: + callback.err(new IllegalArgumentException( + "Illegal message type for response : " + + "expected \"ACK_SALE\"`, found \"" + response.getType().name() + "\"" + )); + break; + } + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/QueryFactory.java b/Workspace/client/src/main/java/com/pqt/client/module/query/QueryFactory.java deleted file mode 100644 index 6335c44d..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/QueryFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.pqt.client.module.query; - -import com.pqt.core.entities.product.ProductUpdate; -import com.pqt.core.entities.query.IQuery; -import com.pqt.core.entities.sale.Sale; -import com.pqt.core.entities.user_account.Account; - -import java.util.List; - -//TODO écrire contenu méthodes -//TODO écrire javadoc -public class QueryFactory { - - public static IQuery newConnectQuery(String serverAddress) { - return null; - } - - public static IQuery newSaleQuery(Sale sale) { - return null; - } - - public static IQuery newStockQuery() { - return null; - } - - public static IQuery newStatQuery() { - return null; - } - - public static IQuery newLogQuery(Account account, boolean state) { - return null; - } - - public static IQuery newUpdateQuery(List updates) { - return null; - } - -} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/QueryMessageFactory.java b/Workspace/client/src/main/java/com/pqt/client/module/query/QueryMessageFactory.java new file mode 100644 index 00000000..52e934c7 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/QueryMessageFactory.java @@ -0,0 +1,69 @@ +package com.pqt.client.module.query; + +import com.pqt.core.communication.IMessageToolFactory; +import com.pqt.core.entities.messages.Message; +import com.pqt.core.entities.messages.MessageType; +import com.pqt.core.entities.product.ProductUpdate; +import com.pqt.core.entities.sale.Sale; +import com.pqt.core.entities.user_account.Account; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +//TODO écrire javadoc +class QueryMessageFactory { + + private final IMessageToolFactory messageToolFactory; + + QueryMessageFactory(IMessageToolFactory messageToolFactory) { + this.messageToolFactory = messageToolFactory; + } + + Message newSaleMessage(Sale sale) { + Map fields = new HashMap<>(); + fields.put("sale", messageToolFactory.getObjectFormatter(Sale.class).format(sale)); + return newSimpleMessage(MessageType.QUERY_SALE, fields); + } + + Message newStockMessage() { + return newSimpleMessage(MessageType.QUERY_STOCK); + } + + Message newStatMessage() { + return newSimpleMessage(MessageType.QUERY_STAT); + } + + Message newUpdateMessage(List updates) { + Map fields = new HashMap<>(); + fields.put("updates", messageToolFactory.getListFormatter(ProductUpdate.class).format(updates)); + return newSimpleMessage(MessageType.QUERY_UPDATE, fields); + } + + Message newAccountListMessage(){ + return newSimpleMessage(MessageType.QUERY_ACCOUNT_LIST); + } + + Message newConnectAccountMessage(Account account, boolean desiredState){ + Map fields = new HashMap<>(); + fields.put("account", messageToolFactory.getObjectFormatter(Account.class).format(account)); + fields.put("desired_state", messageToolFactory.getObjectFormatter(Boolean.class).format(desiredState)); + return newSimpleMessage(MessageType.QUERY_CONNECT_ACCOUNT, fields); + } + + Message newPingMessage(){ + return newSimpleMessage(MessageType.QUERY_PING); + } + + Message newConfigListMessage(){ + return newSimpleMessage(MessageType.QUERY_CONFIG_LIST); + } + + private Message newSimpleMessage(MessageType type, Map fields){ + return new Message(type, null, null, null, null, fields); + } + + private Message newSimpleMessage(MessageType type){ + return newSimpleMessage(type, null); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/HeaderNotFoundException.java b/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/HeaderNotFoundException.java new file mode 100644 index 00000000..5ce2a4b1 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/HeaderNotFoundException.java @@ -0,0 +1,19 @@ +package com.pqt.client.module.query.exceptions; + +public class HeaderNotFoundException extends Exception { + public HeaderNotFoundException() { + super(); + } + + public HeaderNotFoundException(String message) { + super(message); + } + + public HeaderNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + public HeaderNotFoundException(Throwable cause) { + super(cause); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/MessageTimeoutException.java b/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/MessageTimeoutException.java new file mode 100644 index 00000000..c25463af --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/exceptions/MessageTimeoutException.java @@ -0,0 +1,19 @@ +package com.pqt.client.module.query.exceptions; + +public class MessageTimeoutException extends Exception { + public MessageTimeoutException() { + super(); + } + + public MessageTimeoutException(String message) { + super(message); + } + + public MessageTimeoutException(String message, Throwable cause) { + super(message, cause); + } + + public MessageTimeoutException(Throwable cause) { + super(cause); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ICollectionItemMessageCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ICollectionItemMessageCallback.java new file mode 100644 index 00000000..95b5382b --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ICollectionItemMessageCallback.java @@ -0,0 +1,6 @@ +package com.pqt.client.module.query.query_callback; + +import java.util.Collection; + +public interface ICollectionItemMessageCallback extends IItemMessageCallback> { +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IIdQueryCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IIdQueryCallback.java deleted file mode 100644 index 6abe97de..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IIdQueryCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.pqt.client.module.query.query_callback; - -public interface IIdQueryCallback { - public void ack(long id); - public void err(long id, Throwable cause); - public void ref(long id, Throwable cause); -} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IItemMessageCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IItemMessageCallback.java new file mode 100644 index 00000000..9aca2954 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IItemMessageCallback.java @@ -0,0 +1,5 @@ +package com.pqt.client.module.query.query_callback; + +public interface IItemMessageCallback extends IMessageCallback { + void ack(T obj); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMapItemMessageCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMapItemMessageCallback.java new file mode 100644 index 00000000..c9d4cb1a --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMapItemMessageCallback.java @@ -0,0 +1,7 @@ +package com.pqt.client.module.query.query_callback; + + +import java.util.Map; + +public interface IMapItemMessageCallback extends IItemMessageCallback> { +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMessageCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMessageCallback.java new file mode 100644 index 00000000..5efcf8ad --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IMessageCallback.java @@ -0,0 +1,6 @@ +package com.pqt.client.module.query.query_callback; + +public interface IMessageCallback { + void err(Throwable cause); + void ref(Throwable cause); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/INoItemMessageCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/INoItemMessageCallback.java new file mode 100644 index 00000000..60c242ed --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/INoItemMessageCallback.java @@ -0,0 +1,5 @@ +package com.pqt.client.module.query.query_callback; + +public interface INoItemMessageCallback extends IMessageCallback { + void ack(); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ISimpleQueryCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ISimpleQueryCallback.java deleted file mode 100644 index 83428624..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/ISimpleQueryCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.pqt.client.module.query.query_callback; - -public interface ISimpleQueryCallback { - public void ack(); - public void err(Throwable cause); - public void ref(Throwable cause); -} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStatQueryCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStatQueryCallback.java deleted file mode 100644 index 4de628dc..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStatQueryCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.pqt.client.module.query.query_callback; - - -import java.util.Map; - -public interface IStatQueryCallback { - public void ack(Map stats); - public void err(Throwable cause); - public void ref(Throwable cause); -} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStockQueryCallback.java b/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStockQueryCallback.java deleted file mode 100644 index f85a7fe5..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/module/query/query_callback/IStockQueryCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pqt.client.module.query.query_callback; - -import com.pqt.core.entities.product.Product; - -import java.util.List; - -public interface IStockQueryCallback { - public void ack(List products); - public void err(Throwable cause); - public void ref(Throwable cause); -} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java b/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java index 081df440..53eefc4a 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java @@ -1,8 +1,9 @@ package com.pqt.client.module.sale; import com.pqt.client.module.query.QueryExecutor; -import com.pqt.client.module.query.QueryFactory; -import com.pqt.client.module.query.query_callback.IIdQueryCallback; +import com.pqt.client.module.query.QueryMessageFactory; +import com.pqt.client.module.query.query_callback.ICollectionItemMessageCallback; +import com.pqt.client.module.query.query_callback.INoItemMessageCallback; import com.pqt.client.module.sale.listeners.ISaleFirerer; import com.pqt.client.module.sale.listeners.ISaleListener; import com.pqt.client.module.sale.listeners.SimpleSaleFirerer; @@ -14,10 +15,14 @@ import java.util.List; //TODO add log lines public class SaleService { + private long saleId; private ISaleFirerer eventFirerer; + private QueryExecutor executor; - public SaleService() { + public SaleService(QueryExecutor executor) { + saleId = 0; eventFirerer = new SimpleSaleFirerer(); + this.executor = executor; } public SaleBuilder getNewSaleBuilder() { @@ -25,22 +30,30 @@ public class SaleService { } public long commitSale(SaleBuilder saleBuilder) { - return QueryExecutor.INSTANCE.execute(QueryFactory.newSaleQuery(saleBuilder.build()), new IIdQueryCallback() { + final long currentSaleId = saleId; + if(saleId stats; private IStatFirerer eventFirerer; + private QueryExecutor executor; - public StatDao() { + public StatDao(QueryExecutor executor) { eventFirerer = new SimpleStatFirerer(); stats = new HashMap<>(); lastRefreshTimestamp = null; + this.executor = executor; } public synchronized Map getStats() { @@ -27,14 +29,7 @@ public class StatDao { } public void refreshStats() { - QueryExecutor.INSTANCE.execute(QueryFactory.newStockQuery(), new IStatQueryCallback() { - @Override - public void ack(Map stats) { - replaceStats(stats); - eventFirerer.fireGetStatSuccess(); - //TODO add log line - } - + executor.executeStatQuery(new IMapItemMessageCallback() { @Override public void err(Throwable cause) { eventFirerer.fireGetStatError(cause); @@ -46,6 +41,13 @@ public class StatDao { eventFirerer.fireGetStatRefused(cause); //TODO add log line } + + @Override + public void ack(Map stats) { + replaceStats(stats); + eventFirerer.fireGetStatSuccess(); + //TODO add log line + } }); } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/stat/StatService.java b/Workspace/client/src/main/java/com/pqt/client/module/stat/StatService.java index 8a642b0a..e8278ca3 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/stat/StatService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/stat/StatService.java @@ -1,5 +1,6 @@ package com.pqt.client.module.stat; +import com.pqt.client.module.query.QueryExecutor; import com.pqt.client.module.stat.listeners.IStatListener; import java.util.Map; @@ -10,8 +11,8 @@ public class StatService { private StatDao dao; - public StatService() { - dao = new StatDao(); + public StatService(QueryExecutor executor) { + dao = new StatDao(executor); } public Map getStats() { diff --git a/Workspace/client/src/main/java/com/pqt/client/module/stock/StockDao.java b/Workspace/client/src/main/java/com/pqt/client/module/stock/StockDao.java index 08439d66..8ea55f44 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/stock/StockDao.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/stock/StockDao.java @@ -1,9 +1,8 @@ package com.pqt.client.module.stock; import com.pqt.client.module.query.QueryExecutor; -import com.pqt.client.module.query.QueryFactory; -import com.pqt.client.module.query.query_callback.IStockQueryCallback; -import com.pqt.client.module.query.query_callback.IIdQueryCallback; +import com.pqt.client.module.query.query_callback.ICollectionItemMessageCallback; +import com.pqt.client.module.query.query_callback.INoItemMessageCallback; import com.pqt.client.module.stock.Listeners.IStockFirerer; import com.pqt.client.module.stock.Listeners.IStockListener; import com.pqt.client.module.stock.Listeners.SimpleStockFirerer; @@ -11,18 +10,22 @@ import com.pqt.core.entities.product.Product; import com.pqt.core.entities.product.ProductUpdate; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Optional; //TODO écrire javadoc public class StockDao { + private long updateId; private IStockFirerer eventFirerer; private Date lastRefreshTimestamp; private List products; + private QueryExecutor executor; - public StockDao() { + public StockDao(QueryExecutor executor) { + this.executor = executor; + updateId = 0; eventFirerer = new SimpleStockFirerer(); products = new ArrayList<>(); lastRefreshTimestamp = null; @@ -37,9 +40,9 @@ public class StockDao { } public void refreshProductList() { - QueryExecutor.INSTANCE.execute(QueryFactory.newStockQuery(), new IStockQueryCallback() { + executor.executeStockQuery(new ICollectionItemMessageCallback() { @Override - public void ack(List products) { + public void ack(Collection obj) { replaceProductList(products); eventFirerer.fireGetProductListSuccessEvent(); //TODO add log line @@ -71,27 +74,33 @@ public class StockDao { } public long commitUpdate(List updates){ - return QueryExecutor.INSTANCE.execute(QueryFactory.newUpdateQuery(updates),new IIdQueryCallback(){ - + final long currentUpdateId = updateId; + if(updateId Date: Fri, 25 Aug 2017 16:07:40 +0200 Subject: [PATCH 04/18] =?UTF-8?q?Module=20Core,=20packg=20"entities.query"?= =?UTF-8?q?=20:=20suppression=20de=20ce=20package=20(inutilis=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pqt/core/entities/query/IQuery.java | 5 ---- .../pqt/core/entities/query/QueryType.java | 6 ----- .../pqt/core/entities/query/SaleQuery.java | 21 ----------------- .../pqt/core/entities/query/SimpleQuery.java | 21 ----------------- .../pqt/core/entities/query/UpdateQuery.java | 23 ------------------- 5 files changed, 76 deletions(-) delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/IQuery.java delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/QueryType.java delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/SaleQuery.java delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/SimpleQuery.java delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/UpdateQuery.java diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/IQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/IQuery.java deleted file mode 100644 index c14de50a..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/IQuery.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.pqt.core.entities.query; - -public interface IQuery { - -} diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/QueryType.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/QueryType.java deleted file mode 100644 index adeb0936..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/QueryType.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.pqt.core.entities.query; - -public enum QueryType { - - CONNECT, SALE, STOCK, STAT, LOG, UPDATE -} diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/SaleQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/SaleQuery.java deleted file mode 100644 index c205abf2..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/SaleQuery.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.pqt.core.entities.query; - -import com.pqt.core.entities.sale.Sale; - -public class SaleQuery extends SimpleQuery { - - private Sale sale; - - public SaleQuery(Sale sale) { - super(QueryType.SALE); - this.sale = sale; - } - - public Sale getSale() { - return sale; - } - - public void setSale(Sale sale) { - this.sale = sale; - } -} diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/SimpleQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/SimpleQuery.java deleted file mode 100644 index 463653cd..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/SimpleQuery.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.pqt.core.entities.query; - -public class SimpleQuery implements IQuery { - - private QueryType type; - - /** - * - * @param type - * @throws NullPointerException if type is null - */ - public SimpleQuery(QueryType type) { - if(type==null) throw new NullPointerException("null value not allowed as query type"); - - this.type = type; - } - - public QueryType getType() { - return type; - } -} diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/UpdateQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/UpdateQuery.java deleted file mode 100644 index 3a996bd4..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/UpdateQuery.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.pqt.core.entities.query; - -import com.pqt.core.entities.product.ProductUpdate; - -import java.util.List; - -public class UpdateQuery extends SimpleQuery { - - private List updates; - - public UpdateQuery(List updates) { - super(QueryType.UPDATE); - this.updates = updates; - } - - public List getUpdates() { - return updates; - } - - public void setUpdates(List updates) { - this.updates = updates; - } -} From 3b735c18ae15e25aa96d57323869a6f057e3353f Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Fri, 25 Aug 2017 16:08:53 +0200 Subject: [PATCH 05/18] =?UTF-8?q?Module=20Client=20:=20update=20GUi=20suit?= =?UTF-8?q?e=20modif=20services;=20Ajout=20clss=20ClientBackEndModuleManag?= =?UTF-8?q?er=20pour=20g=C3=A9rer=20l'instanciation=20des=20services;=20Aj?= =?UTF-8?q?out=20TODO=20dans=20clss=20Main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/pqt/client/Main.java | 24 ++++------- .../client/gui/main_frame/MainFrameModel.java | 5 +++ .../modules/sale_screen/SaleScreenModel.java | 5 +++ .../stock_screen/StockScreenModel.java | 5 +++ .../module/ClientBackEndModuleManager.java | 41 +++++++++++++++++++ 5 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java diff --git a/Workspace/client/src/main/java/com/pqt/client/Main.java b/Workspace/client/src/main/java/com/pqt/client/Main.java index c7240576..7bed42e7 100644 --- a/Workspace/client/src/main/java/com/pqt/client/Main.java +++ b/Workspace/client/src/main/java/com/pqt/client/Main.java @@ -5,15 +5,10 @@ import com.pqt.client.gui.modules.account_screen.AccountScreen; import com.pqt.client.gui.modules.sale_screen.SaleScreen; import com.pqt.client.gui.modules.stat_screen.StatScreen; import com.pqt.client.gui.modules.stock_screen.StockScreen; -import com.pqt.client.gui.ressources.components.generics.others.SideBar; -import com.pqt.client.gui.ressources.components.generics.others.listeners.ISideBarListener; import com.pqt.client.gui.ressources.components.generics.toast.ToastFactory; import com.pqt.client.gui.ressources.css.GUICssTool; import com.pqt.client.gui.ressources.strings.GUIStringTool; -import com.pqt.client.module.account.AccountService; -import com.pqt.client.module.sale.SaleService; -import com.pqt.client.module.stat.StatService; -import com.pqt.client.module.stock.StockService; +import com.pqt.client.module.ClientBackEndModuleManager; import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; @@ -26,16 +21,15 @@ public class Main extends Application{ @Override public void start(Stage primaryStage) throws Exception { - SaleService saleService = new SaleService(); - StockService stockService = new StockService(); - AccountService accountService = new AccountService(); - StatService statService = new StatService(); + //TODO ajouter écran de préloading - MainFrame mainFrame = new MainFrame(accountService); - mainFrame.addModule(new SaleScreen(accountService, stockService, saleService), true); - mainFrame.addModule(new StockScreen(stockService, accountService)); - mainFrame.addModule(new StatScreen(statService)); - mainFrame.addModule(new AccountScreen(accountService)); + ClientBackEndModuleManager moduleManager = new ClientBackEndModuleManager(null); + + MainFrame mainFrame = new MainFrame(moduleManager.getAccountService()); + mainFrame.addModule(new SaleScreen(moduleManager.getAccountService(), moduleManager.getStockService(), moduleManager.getSaleService()), true); + mainFrame.addModule(new StockScreen(moduleManager.getStockService(), moduleManager.getAccountService())); + mainFrame.addModule(new StatScreen(moduleManager.getStatService())); + mainFrame.addModule(new AccountScreen(moduleManager.getAccountService())); Scene scene = new Scene(mainFrame.getPane(), 800, 600); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java index c8cb5fc7..755269a1 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java @@ -23,6 +23,11 @@ class MainFrameModel { MainFrameModel.this.fireAccountStatusChangedEvent(status); } + @Override + public void onAccountStatusNotChangedEvent(Throwable cause) { + + } + @Override public void onAccountListChangedEvent() { MainFrameModel.this.fireAccountCollectionChangedEvent(); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java index 4cfc6d54..8a07a511 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java @@ -104,6 +104,11 @@ class SaleScreenModel { fireAccountConnectedStatusUpdateEvent(); } + @Override + public void onAccountStatusNotChangedEvent(Throwable cause) { + + } + @Override public void onAccountListChangedEvent() { fireAccountListUpdatedEvent(); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/StockScreenModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/StockScreenModel.java index 365c0648..225fcb4f 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/StockScreenModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/StockScreenModel.java @@ -34,6 +34,11 @@ class StockScreenModel { StockScreenModel.this.fireConnectedStatusChanged(); } + @Override + public void onAccountStatusNotChangedEvent(Throwable cause) { + + } + @Override public void onAccountListChangedEvent() { diff --git a/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java new file mode 100644 index 00000000..9f2a0fb5 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java @@ -0,0 +1,41 @@ +package com.pqt.client.module; + +import com.pqt.client.module.account.AccountService; +import com.pqt.client.module.connection.ConnectionService; +import com.pqt.client.module.query.QueryExecutor; +import com.pqt.client.module.sale.SaleService; +import com.pqt.client.module.stat.StatService; +import com.pqt.client.module.stock.StockService; + +public class ClientBackEndModuleManager { + + private SaleService saleService; + private StockService stockService; + private AccountService accountService; + private StatService statService; + + public ClientBackEndModuleManager(String serverUrl) { + ConnectionService connectionService = new ConnectionService(serverUrl); + QueryExecutor queryExecutor = new QueryExecutor(connectionService); + saleService = new SaleService(queryExecutor); + stockService = new StockService(queryExecutor); + accountService = new AccountService(queryExecutor); + statService = new StatService(queryExecutor); + } + + public SaleService getSaleService() { + return saleService; + } + + public StockService getStockService() { + return stockService; + } + + public AccountService getAccountService() { + return accountService; + } + + public StatService getStatService() { + return statService; + } +} From 96a45958dee3e069dc455bce9ea92102b400aa9d Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Sun, 8 Oct 2017 13:14:45 +0200 Subject: [PATCH 06/18] Module Client, clss Main : update TODO --- Workspace/client/src/main/java/com/pqt/client/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Workspace/client/src/main/java/com/pqt/client/Main.java b/Workspace/client/src/main/java/com/pqt/client/Main.java index 7bed42e7..2231489d 100644 --- a/Workspace/client/src/main/java/com/pqt/client/Main.java +++ b/Workspace/client/src/main/java/com/pqt/client/Main.java @@ -21,7 +21,7 @@ public class Main extends Application{ @Override public void start(Stage primaryStage) throws Exception { - //TODO ajouter écran de préloading + //TODO ajouter écran de préloading : StartupFrame ClientBackEndModuleManager moduleManager = new ClientBackEndModuleManager(null); From a34a6230036916581be24a31ad675864b819a567 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Sun, 8 Oct 2017 13:15:54 +0200 Subject: [PATCH 07/18] Module Client : ajout service NetworkService --- .../module/ClientBackEndModuleManager.java | 15 +- .../client/module/network/NetworkService.java | 128 ++++++++++++++++++ .../module/network/ServerConfigCache.java | 77 +++++++++++ .../listeners/INetworkServiceListener.java | 9 ++ 4 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/network/ServerConfigCache.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/module/network/listeners/INetworkServiceListener.java diff --git a/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java index 9f2a0fb5..c2666208 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java @@ -2,6 +2,7 @@ package com.pqt.client.module; import com.pqt.client.module.account.AccountService; import com.pqt.client.module.connection.ConnectionService; +import com.pqt.client.module.network.NetworkService; import com.pqt.client.module.query.QueryExecutor; import com.pqt.client.module.sale.SaleService; import com.pqt.client.module.stat.StatService; @@ -9,10 +10,11 @@ import com.pqt.client.module.stock.StockService; public class ClientBackEndModuleManager { - private SaleService saleService; - private StockService stockService; - private AccountService accountService; - private StatService statService; + private final SaleService saleService; + private final StockService stockService; + private final AccountService accountService; + private final StatService statService; + private final NetworkService networkService; public ClientBackEndModuleManager(String serverUrl) { ConnectionService connectionService = new ConnectionService(serverUrl); @@ -21,6 +23,7 @@ public class ClientBackEndModuleManager { stockService = new StockService(queryExecutor); accountService = new AccountService(queryExecutor); statService = new StatService(queryExecutor); + networkService = new NetworkService(queryExecutor); } public SaleService getSaleService() { @@ -38,4 +41,8 @@ public class ClientBackEndModuleManager { public StatService getStatService() { return statService; } + + public NetworkService getNetworkService() { + return networkService; + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java b/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java new file mode 100644 index 00000000..9dee5ebe --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java @@ -0,0 +1,128 @@ +package com.pqt.client.module.network; + +import com.pqt.client.module.network.listeners.INetworkServiceListener; +import com.pqt.client.module.query.QueryExecutor; +import com.pqt.client.module.query.query_callback.IMapItemMessageCallback; +import com.pqt.client.module.query.query_callback.INoItemMessageCallback; +import com.pqt.core.entities.server_config.ConfigFields; +import com.pqt.core.entities.server_config.ServerConfig; + +import javax.swing.event.EventListenerList; +import java.util.*; + +//TODO ajout javadoc + +/* + * Ce service doit permettre de faire des ping et de récupérer la config d'un serveur distant + */ +public class NetworkService { + + private final QueryExecutor queryExecutor; + private final EventListenerList listenerList; + private final ServerConfigCache configCache; + + public NetworkService(QueryExecutor queryExecutor) { + this.queryExecutor = queryExecutor; + listenerList = new EventListenerList(); + configCache = new ServerConfigCache(); + } + + public void addListener(INetworkServiceListener l){ + listenerList.add(INetworkServiceListener.class, l); + } + + public void removeListener(INetworkServiceListener l){ + listenerList.remove(INetworkServiceListener.class, l); + } + + public void sendPQTPing(String host, Integer port){ + checkData(host, port); + queryExecutor.executePingQuery(new INoItemMessageCallback() { + @Override + public void ack() { + Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) + .forEach(l->l.onPQTPingSuccessEvent(host, port)); + sendConfigRequest(host, port); + } + + @Override + public void err(Throwable cause) { + Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) + .forEach(l->l.onPQTPingFailureEvent(host, port, cause)); + } + + @Override + public void ref(Throwable cause) { + Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) + .forEach(l->l.onPQTPingFailureEvent(host, port, cause)); + } + }); + } + + public ServerConfig getServerConfig(String host, Integer port){ + checkData(host, port); + return configCache.getConfig(host, port); + } + + private void sendConfigRequest(String host, Integer port){ + queryExecutor.executeConfigListQuery(new IMapItemMessageCallback(){ + + @Override + public void err(Throwable cause) { + //TODO ajouter log erreur + } + + @Override + public void ref(Throwable cause) { + //TODO ajouter log erreur + } + + @Override + public void ack(Map obj) { + configCache.addServerConfig(host, port, convertToServerConfig(obj)); + Arrays.stream(listenerList.getListeners(INetworkServiceListener.class)) + .forEach(INetworkServiceListener::onNewServerConfigData); + } + }); + } + + private ServerConfig convertToServerConfig(Map data){ + + ServerConfig serverConfig = new ServerConfig(); + List allowedFields = new ArrayList<>(); + EnumSet.allOf(ConfigFields.class).forEach(e->allowedFields.add(e.name())); + + data.keySet() + .stream() + .filter(allowedFields::contains) + .filter(key->isBoolean(data.get(key))) + .forEach(key->serverConfig.add(getMatchingConfigFields(key), Boolean.parseBoolean(data.get(key)))); + + return serverConfig; + } + + private boolean isBoolean(String str){ + return str.equals("true") || str.equals("false"); + } + + private ConfigFields getMatchingConfigFields(String str){ + ConfigFields match = null; + + EnumSet enumSet = EnumSet.allOf(ConfigFields.class); + for(ConfigFields field : enumSet){ + if(str.equals(field.name())) + match = field; + } + + return match; + } + + private void checkData(String host, Integer port){ + if(host==null || port == null) + throw new NullPointerException("Null value as server data is not allowed"); + if(host.isEmpty()) + throw new IllegalArgumentException("host cannot be empty"); + if(port<1 || port>65535) + throw new IllegalArgumentException("port number must be an unsigned 16-bit integer (0 cache; + + public ServerConfigCache() { + cache = new HashMap<>(); + } + + public void addServerConfig(String host, Integer port, ServerConfig config){ + ServerData match = cache.keySet().stream().filter(key->key.getHost().equals(host)&&key.getPort().equals(port)).findFirst().orElse(null); + if(match==null){ + cache.put(new ServerData(host, port), config); + }else{ + cache.replace(match, config); + } + } + + public void removeServerData(String host, Integer port){ + ServerData data = new ServerData(host, port); + if(cache.containsKey(data)) + cache.remove(data); + } + + public boolean hasConfig(String host, Integer port){ + return cache.containsKey(new ServerData(host, port)); + } + + public ServerConfig getConfig(String host, Integer port){ + if(hasConfig(host, port)) + return cache.get(new ServerData(host, port)); + + return null; + } + + private class ServerData{ + private String host; + private Integer port; + + public ServerData(String host, Integer port) { + this.host = host; + this.port = port; + } + + public String getHost() { + return host; + } + + public Integer getPort() { + return port; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ServerData that = (ServerData) o; + + if (host != null ? !host.equals(that.host) : that.host != null) return false; + return port != null ? port.equals(that.port) : that.port == null; + } + + @Override + public int hashCode() { + int result = host != null ? host.hashCode() : 0; + result = 31 * result + (port != null ? port.hashCode() : 0); + return result; + } + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/network/listeners/INetworkServiceListener.java b/Workspace/client/src/main/java/com/pqt/client/module/network/listeners/INetworkServiceListener.java new file mode 100644 index 00000000..33ed8073 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/module/network/listeners/INetworkServiceListener.java @@ -0,0 +1,9 @@ +package com.pqt.client.module.network.listeners; + +import java.util.EventListener; + +public interface INetworkServiceListener extends EventListener { + void onPQTPingSuccessEvent(String host, Integer port); + void onPQTPingFailureEvent(String host, Integer port, Throwable cause); + void onNewServerConfigData(); +} From 8ce7fba7a9a6bb8fc286c48c9532547012ca6666 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Sun, 8 Oct 2017 13:17:14 +0200 Subject: [PATCH 08/18] =?UTF-8?q?Module=20Core,=20clss=20ServerConfig=20:?= =?UTF-8?q?=20Ajout=20initialisation=20attribut=20de=20classe=20dans=20le?= =?UTF-8?q?=20constructeur=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/pqt/core/entities/server_config/ServerConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/server_config/ServerConfig.java b/Workspace/core/src/main/java/com/pqt/core/entities/server_config/ServerConfig.java index 1111a8df..5abca08f 100644 --- a/Workspace/core/src/main/java/com/pqt/core/entities/server_config/ServerConfig.java +++ b/Workspace/core/src/main/java/com/pqt/core/entities/server_config/ServerConfig.java @@ -10,6 +10,7 @@ public class ServerConfig { private Map fields; public ServerConfig() { + fields = new HashMap<>(); } public ServerConfig(Map fields) { From 0a9356fdbe20d2135f2d7948f0426910e2f086dd Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Sun, 8 Oct 2017 13:19:21 +0200 Subject: [PATCH 09/18] =?UTF-8?q?Module=20Client,=20=C3=A9cran=20StartupFr?= =?UTF-8?q?ame=20:=20ajout=20des=20classes=20(MVC=20+=20listeners)=20ainsi?= =?UTF-8?q?=20que=20les=20m=C3=A9thds=20de=20base=20(StartupFrame=20non=20?= =?UTF-8?q?fonctionnelle=20actuellement)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/startup_frame/StartupFrame.java | 27 +++++++++++++++++++ .../startup_frame/StartupFrameController.java | 21 +++++++++++++++ .../gui/startup_frame/StartupFrameModel.java | 24 +++++++++++++++++ .../gui/startup_frame/StartupFrameView.java | 26 ++++++++++++++++++ .../listeners/IStartupFrameModelListener.java | 6 +++++ 5 files changed, 104 insertions(+) create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java new file mode 100644 index 00000000..330a1914 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java @@ -0,0 +1,27 @@ +package com.pqt.client.gui.startup_frame; + +import com.pqt.client.gui.ressources.components.generics.IFXComponent; +import com.pqt.client.module.account.AccountService; +import com.pqt.client.module.network.NetworkService; +import javafx.scene.layout.Pane; + +public class StartupFrame implements IFXComponent{ + + private StartupFrameView view; + private StartupFrameController ctrl; + + public StartupFrame(AccountService accountService, NetworkService networkService) { + StartupFrameModel model = new StartupFrameModel(accountService, networkService); + ctrl = new StartupFrameController(model); + model.addListener(ctrl); + + view = new StartupFrameView(ctrl); + ctrl.setView(view); + ctrl.updateView(); + } + + @Override + public Pane getMainPane() { + return view.getMainPane(); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java new file mode 100644 index 00000000..2aca60ca --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java @@ -0,0 +1,21 @@ +package com.pqt.client.gui.startup_frame; + +import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener; + +public class StartupFrameController implements IStartupFrameModelListener { + + private final StartupFrameModel model; + private StartupFrameView view; + + public StartupFrameController(StartupFrameModel model) { + this.model = model; + } + + public void setView(StartupFrameView view) { + this.view = view; + } + + public void updateView() { + //TODO écrire corps méthd StartupFrameController.updateView() + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java new file mode 100644 index 00000000..37d29221 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java @@ -0,0 +1,24 @@ +package com.pqt.client.gui.startup_frame; + +import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener; +import com.pqt.client.module.account.AccountService; +import com.pqt.client.module.network.NetworkService; + +import javax.swing.event.EventListenerList; + +public class StartupFrameModel { + + private final AccountService accountService; + private final NetworkService networkService; + private final EventListenerList listenerList; + + public StartupFrameModel(AccountService accountService, NetworkService networkService) { + this.accountService = accountService; + this.networkService = networkService; + this.listenerList = new EventListenerList(); + } + + public void addListener(IStartupFrameModelListener ctrl) { + listenerList.add(IStartupFrameModelListener.class, ctrl); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java new file mode 100644 index 00000000..9b29aa2b --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java @@ -0,0 +1,26 @@ +package com.pqt.client.gui.startup_frame; + +import com.pqt.client.gui.ressources.components.generics.IFXComponent; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; + +public class StartupFrameView implements IFXComponent{ + + private BorderPane mainPane; + private final StartupFrameController ctrl; + + public StartupFrameView(StartupFrameController ctrl) { + this.ctrl = ctrl; + initGui(); + } + + private void initGui() { + mainPane = new BorderPane(); + //TODO ajouter GUI StartupFrameView + } + + @Override + public Pane getMainPane() { + return mainPane; + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java new file mode 100644 index 00000000..154cfe07 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java @@ -0,0 +1,6 @@ +package com.pqt.client.gui.startup_frame.listeners; + +import java.util.EventListener; + +public interface IStartupFrameModelListener extends EventListener { +} From 20ac907c734ac2b341c780e9b4e88ffbc498341e Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Mon, 9 Oct 2017 16:20:57 +0200 Subject: [PATCH 10/18] Module Client : correction erreurs de compilation + suppression import inutiles --- .../gui/modules/sale_screen/SaleScreenController.java | 6 ++++-- .../pqt/client/gui/modules/sale_screen/SaleScreenModel.java | 3 ++- .../main/java/com/pqt/client/module/sale/SaleService.java | 2 -- .../src/main/java/com/pqt/client/module/stat/StatDao.java | 1 - 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenController.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenController.java index 6640d324..6bdfb43f 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenController.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenController.java @@ -13,7 +13,9 @@ import com.pqt.core.entities.user_account.Account; import com.pqt.core.entities.user_account.AccountLevel; import javafx.event.Event; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; class SaleScreenController { @@ -45,7 +47,7 @@ class SaleScreenController { @Override public void onAccountListUpdatedEvent() { - view.setAccounts(model.getAccountList()); + view.setAccounts(new ArrayList<>(model.getAccountList())); } @@ -99,7 +101,7 @@ class SaleScreenController { return model.getProductList(); } private List fetchAccountList(){ - return model.getAccountList(); + return new ArrayList<>(model.getAccountList()); } private List fetchSaleTypeList(){ return model.getSaleTypeList(); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java index 8a07a511..2aeed7e0 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/sale_screen/SaleScreenModel.java @@ -17,6 +17,7 @@ import com.pqt.core.entities.user_account.AccountLevel; import javax.swing.event.EventListenerList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -143,7 +144,7 @@ class SaleScreenModel { .forEach(ISaleScreenModelListener::onAccountConnectedStateUpdatedEvent); } - List getAccountList() { + Collection getAccountList() { return accountService.getAllAccounts(); } diff --git a/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java b/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java index 53eefc4a..7f3235a9 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/sale/SaleService.java @@ -1,8 +1,6 @@ package com.pqt.client.module.sale; import com.pqt.client.module.query.QueryExecutor; -import com.pqt.client.module.query.QueryMessageFactory; -import com.pqt.client.module.query.query_callback.ICollectionItemMessageCallback; import com.pqt.client.module.query.query_callback.INoItemMessageCallback; import com.pqt.client.module.sale.listeners.ISaleFirerer; import com.pqt.client.module.sale.listeners.ISaleListener; diff --git a/Workspace/client/src/main/java/com/pqt/client/module/stat/StatDao.java b/Workspace/client/src/main/java/com/pqt/client/module/stat/StatDao.java index 881c73ce..5a0444b5 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/stat/StatDao.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/stat/StatDao.java @@ -1,7 +1,6 @@ package com.pqt.client.module.stat; import com.pqt.client.module.query.QueryExecutor; -import com.pqt.client.module.query.QueryMessageFactory; import com.pqt.client.module.query.query_callback.IMapItemMessageCallback; import com.pqt.client.module.stat.listeners.IStatFirerer; import com.pqt.client.module.stat.listeners.IStatListener; From 0ed6d78cacf5d9a1783636e34ac30eb647ebfd84 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Mon, 9 Oct 2017 16:21:45 +0200 Subject: [PATCH 11/18] =?UTF-8?q?Module=20Client,=20=C3=A9cran=20StartupFr?= =?UTF-8?q?ame=20:=20ajout=20GUI=20+=20portion=20du=20code=20m=C3=A9tier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/ressources/strings/GUIStringTool.java | 16 +++ .../gui/startup_frame/StartupFrame.java | 4 +- .../startup_frame/StartupFrameController.java | 13 +++ .../gui/startup_frame/StartupFrameModel.java | 34 ++++++ .../gui/startup_frame/StartupFrameView.java | 67 ++++++++++- .../StartupProcedureHandler.java | 106 ++++++++++++++++++ .../client/module/account/AccountService.java | 1 - .../client/module/network/NetworkService.java | 14 ++- .../client/src/main/resources/nightmode.css | 27 +++-- 9 files changed, 262 insertions(+), 20 deletions(-) create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java index af5f1781..698af73f 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java @@ -331,6 +331,22 @@ public class GUIStringTool { public static String getAccountLevelColumnHeaderLabel() { return "Niveau d'accréditation"; } + + public static String getServerSectionTitleLabel() { + return "Serveur"; + } + + public static String getAccountSectionTitleLabel() { + return "Compte"; + } + + public static String getServerHostLabel() { + return "Host : "; + } + + public static String getServerPortLabel() { + return "Port : "; + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java index 330a1914..07721397 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java @@ -21,7 +21,7 @@ public class StartupFrame implements IFXComponent{ } @Override - public Pane getMainPane() { - return view.getMainPane(); + public Pane getPane() { + return view.getPane(); } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java index 2aca60ca..8500064e 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java @@ -18,4 +18,17 @@ public class StartupFrameController implements IStartupFrameModelListener { public void updateView() { //TODO écrire corps méthd StartupFrameController.updateView() } + + public void onValidation() { + if(!model.isStartupProcessRunning()){ + //TODO catch following exceptions and update GUI when needed : + //NullPointerException && IllegalArgumentException + model.beginStartupProcess( + view.getServerHostTextFieldContent(), + view.getServerPortTextFieldContent(), + view.getAccountUsernameTextFieldContent(), + view.getAccountPasswordTextFieldContent() + ); + } + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java index 37d29221..daf3dc0a 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java @@ -2,7 +2,10 @@ package com.pqt.client.gui.startup_frame; import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener; import com.pqt.client.module.account.AccountService; +import com.pqt.client.module.account.listeners.AccountListenerAdapter; +import com.pqt.client.module.account.listeners.IAccountListener; import com.pqt.client.module.network.NetworkService; +import com.pqt.client.module.network.listeners.INetworkServiceListener; import javax.swing.event.EventListenerList; @@ -12,13 +15,44 @@ public class StartupFrameModel { private final NetworkService networkService; private final EventListenerList listenerList; + private boolean startupProcessBegan; + public StartupFrameModel(AccountService accountService, NetworkService networkService) { this.accountService = accountService; this.networkService = networkService; this.listenerList = new EventListenerList(); + startupProcessBegan = false; } public void addListener(IStartupFrameModelListener ctrl) { listenerList.add(IStartupFrameModelListener.class, ctrl); } + + public boolean isStartupProcessRunning() { + return startupProcessBegan; + } + + public void beginStartupProcess(String requiredHost, String requiredPort, String username, String password) { + if(!startupProcessBegan){ + checkParameters(requiredHost, requiredPort, username, password); + startupProcessBegan = true; + + Integer requiredIntPort = Integer.parseInt(requiredPort); + + new StartupProcedureHandler(networkService, accountService) + .init(requiredHost, requiredIntPort, username, password) + .handle(); + } + } + + private void checkParameters(String host, String port, String username, String password) { + if(host==null || port == null || username == null || password == null) + throw new NullPointerException("Null parameters are not allowed on startup"); + + if(username.isEmpty() || host.isEmpty() || port.isEmpty()) + throw new IllegalArgumentException("The following parameters must be filled : host, port, username"); + + if(!port.matches("^\\d+$")) + throw new IllegalArgumentException("Given port is not a positive integer"); + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java index 9b29aa2b..3cc5dcd4 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java @@ -1,26 +1,81 @@ package com.pqt.client.gui.startup_frame; import com.pqt.client.gui.ressources.components.generics.IFXComponent; -import javafx.scene.layout.BorderPane; -import javafx.scene.layout.Pane; +import com.pqt.client.gui.ressources.strings.GUIStringTool; +import javafx.scene.control.*; +import javafx.scene.layout.*; public class StartupFrameView implements IFXComponent{ - private BorderPane mainPane; + private VBox mainPane; private final StartupFrameController ctrl; + private TextField serverHostTextField; + private TextField serverPortTextField; + private TextField usernameTextField; + private TextField passwordTextField; + public StartupFrameView(StartupFrameController ctrl) { this.ctrl = ctrl; initGui(); } private void initGui() { - mainPane = new BorderPane(); - //TODO ajouter GUI StartupFrameView + mainPane = new VBox(); + + Label serverHostLabel = new Label(GUIStringTool.getServerHostLabel()); + serverHostTextField = new TextField(); + Label serverPortLabel = new Label(GUIStringTool.getServerPortLabel()); + serverPortTextField = new TextField(); + + GridPane serverFieldGridPane = new GridPane(); + serverFieldGridPane.add(serverHostLabel,0,0); + serverFieldGridPane.add(serverHostTextField,1,0); + serverFieldGridPane.add(serverPortLabel,0,1); + serverFieldGridPane.add(serverPortTextField,1,1); + + TitledPane serverTitledPane = new TitledPane(GUIStringTool.getServerSectionTitleLabel(),serverFieldGridPane); + + + Label usernameLabel = new Label(GUIStringTool.getUsernameLabel()); + usernameTextField = new TextField(); + Label passwordLabel = new Label(GUIStringTool.getPasswordLabel()); + passwordTextField = new PasswordField(); + + GridPane accountFieldGridPane = new GridPane(); + accountFieldGridPane.add(usernameLabel,0,0); + accountFieldGridPane.add(usernameTextField,1,0); + accountFieldGridPane.add(passwordLabel,0,1); + accountFieldGridPane.add(passwordTextField,1,1); + + TitledPane accountTitledPane = new TitledPane(GUIStringTool.getAccountSectionTitleLabel(),accountFieldGridPane); + + Button validationButton = new Button(GUIStringTool.getValidationButtonLabel()); + validationButton.setOnAction((event)->{ + ctrl.onValidation(); + }); + + mainPane.getChildren().addAll(serverTitledPane, accountTitledPane, validationButton); + } + + String getServerHostTextFieldContent(){ + return serverHostTextField.getText(); + } + + String getServerPortTextFieldContent(){ + return serverPortTextField.getText(); + } + + String getAccountUsernameTextFieldContent(){ + return usernameTextField.getText(); + } + + String getAccountPasswordTextFieldContent(){ + return passwordTextField.getText(); } @Override - public Pane getMainPane() { + public Pane getPane() { return mainPane; } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java new file mode 100644 index 00000000..7471d3cf --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java @@ -0,0 +1,106 @@ +package com.pqt.client.gui.startup_frame; + +import com.pqt.client.module.account.AccountService; +import com.pqt.client.module.account.listeners.AccountListenerAdapter; +import com.pqt.client.module.account.listeners.IAccountListener; +import com.pqt.client.module.network.NetworkService; +import com.pqt.client.module.network.listeners.INetworkServiceListener; +import com.pqt.core.entities.user_account.Account; + +class StartupProcedureHandler { + + private NetworkService networkService; + private AccountService accountService; + + private String host, username, password; + private Integer port; + + StartupProcedureHandler(NetworkService networkService, AccountService accountService) { + this.networkService = networkService; + this.accountService = accountService; + } + + StartupProcedureHandler init(String host, Integer port, String username, String password){ + this.host = host; + this.port = port; + this.username = username; + this.password = password; + + return this; + } + + void handle(){ + testConnection(); + } + + private void testConnection(){ + networkService.addListener(getPingListener()); + networkService.sendPQTPing(host, port); + } + + private void useRequestedServer(){ + //TODO notify this + networkService.setActiveServer(host, port); + accountService.addListener(getUpdateAccountListListener()); + accountService.refreshAccounts(); + } + + private void connectAccount(){ + Account match = accountService.getAllAccounts().stream() + .filter(account -> account.getUsername().equals(username)) + .findFirst() + .orElse(null); + + if(match==null){ + //TODO notify this + }else{ + accountService.setCurrentAccount(match); + accountService.addListener(getConnectAccountListener()); + accountService.logInCurrentAccount(StartupProcedureHandler.this.password); + } + } + + private INetworkServiceListener getPingListener(){ + return new INetworkServiceListener() { + @Override + public void onPQTPingSuccessEvent(String host, Integer port) { + if(StartupProcedureHandler.this.host.equals(host) + && StartupProcedureHandler.this.port.equals(port)){ + useRequestedServer(); + } + } + + @Override + public void onPQTPingFailureEvent(String host, Integer port, Throwable cause) { + + } + + @Override + public void onNewServerConfigData() { + + } + }; + } + + private IAccountListener getUpdateAccountListListener(){ + return new AccountListenerAdapter(){ + @Override + public void onAccountListChangedEvent(){ + connectAccount(); + } + }; + } + + private IAccountListener getConnectAccountListener(){ + return new AccountListenerAdapter(){ + @Override + public void onAccountStatusChangedEvent(boolean status) { + if(status){ + //TODO notify this + }else{ + //TODO notify this + } + } + }; + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java index 1c46f8a6..9c9c96bb 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java @@ -27,7 +27,6 @@ public class AccountService { this.executor = executor; listenerList = new EventListenerList(); accounts = new ArrayList<>(); - refreshAccounts(); } public Account getCurrentAccount() { diff --git a/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java b/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java index 9dee5ebe..154265d6 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/network/NetworkService.java @@ -1,5 +1,6 @@ package com.pqt.client.module.network; +import com.pqt.client.module.connection.ConnectionService; import com.pqt.client.module.network.listeners.INetworkServiceListener; import com.pqt.client.module.query.QueryExecutor; import com.pqt.client.module.query.query_callback.IMapItemMessageCallback; @@ -18,11 +19,13 @@ import java.util.*; public class NetworkService { private final QueryExecutor queryExecutor; + private final ConnectionService connectionService; private final EventListenerList listenerList; private final ServerConfigCache configCache; - public NetworkService(QueryExecutor queryExecutor) { + public NetworkService(QueryExecutor queryExecutor, ConnectionService connectionService) { this.queryExecutor = queryExecutor; + this.connectionService = connectionService; listenerList = new EventListenerList(); configCache = new ServerConfigCache(); } @@ -59,11 +62,20 @@ public class NetworkService { }); } + public boolean hasServerConfig(String host, Integer port){ + checkData(host, port); + return configCache.hasConfig(host, port); + } + public ServerConfig getServerConfig(String host, Integer port){ checkData(host, port); return configCache.getConfig(host, port); } + public void setActiveServer(String host, Integer port){ + connectionService.setServerUrl(String.format("%s:%s", host, port)); + } + private void sendConfigRequest(String host, Integer port){ queryExecutor.executeConfigListQuery(new IMapItemMessageCallback(){ diff --git a/Workspace/client/src/main/resources/nightmode.css b/Workspace/client/src/main/resources/nightmode.css index a33217d2..080c1589 100644 --- a/Workspace/client/src/main/resources/nightmode.css +++ b/Workspace/client/src/main/resources/nightmode.css @@ -2,13 +2,6 @@ -fx-background-color: #1d1d1d; } -.label { - -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Semibold"; - -fx-text-fill: white; - -fx-opacity: 0.8; -} - .label-bright { -fx-font-size: 11pt; -fx-font-family: "Segoe UI Semibold"; @@ -127,15 +120,29 @@ .context-menu { -fx-background-color: derive(#1d1d1d,5%); } -.text-field, .password-field, .choice-box, .text-area, .combo-box, .button { + +.titled-pane, .titled-pane > .title, .titled-pane > *.content, .text-field, +.password-field, .choice-box, .text-area, .combo-box, .button, .label { -fx-font-size: 12pt; -fx-font-family: "Segoe UI Semibold"; + -fx-background-color: #1d1d1d; + -fx-text-fill: #d8d8d8; +} + +.titled-pane, .titled-pane > .title, .titled-pane > *.content { + -fx-border-width: 0; +} + +.text-field, .password-field, .choice-box, .text-area, .combo-box, .button{ -fx-pref-width: 150; -fx-pref-height: 30; - -fx-background-color: #1d1d1d; -fx-border-color: #e2e2e2; -fx-border-width: 2; - -fx-text-fill: #d8d8d8; +} + +.label{ + -fx-pref-width: 150; + -fx-pref-height: 30; } .button:hover { From 82c6a6684c1b1276f81e0339544e6f86412d149a Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Mon, 9 Oct 2017 16:22:30 +0200 Subject: [PATCH 12/18] =?UTF-8?q?Module=20Client,=20clss=20Main=20:=20lanc?= =?UTF-8?q?er=20l'application=20affiche=20d=C3=A9sormais=20l'=C3=A9cran=20?= =?UTF-8?q?StartupFrame=20au=20lieu=20de=20MainFrame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Workspace/client/src/main/java/com/pqt/client/Main.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Workspace/client/src/main/java/com/pqt/client/Main.java b/Workspace/client/src/main/java/com/pqt/client/Main.java index 2231489d..65ae061c 100644 --- a/Workspace/client/src/main/java/com/pqt/client/Main.java +++ b/Workspace/client/src/main/java/com/pqt/client/Main.java @@ -8,6 +8,7 @@ import com.pqt.client.gui.modules.stock_screen.StockScreen; import com.pqt.client.gui.ressources.components.generics.toast.ToastFactory; import com.pqt.client.gui.ressources.css.GUICssTool; import com.pqt.client.gui.ressources.strings.GUIStringTool; +import com.pqt.client.gui.startup_frame.StartupFrame; import com.pqt.client.module.ClientBackEndModuleManager; import javafx.application.Application; import javafx.scene.Scene; @@ -31,8 +32,8 @@ public class Main extends Application{ mainFrame.addModule(new StatScreen(moduleManager.getStatService())); mainFrame.addModule(new AccountScreen(moduleManager.getAccountService())); - - Scene scene = new Scene(mainFrame.getPane(), 800, 600); + StartupFrame startupFrame = new StartupFrame(moduleManager.getAccountService(), moduleManager.getNetworkService()); + Scene scene = new Scene(startupFrame.getPane()); scene.getStylesheets().clear(); scene.getStylesheets().addAll(getClass().getResource(GUICssTool.getCssFilePath()).toExternalForm()); From a62d7e0cc5a2f1c70df29a8297eb8e8eeab0aefb Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 16:05:32 +0200 Subject: [PATCH 13/18] =?UTF-8?q?Module=20Client=20:=20ajout=20code=20tran?= =?UTF-8?q?sition=20frames=20startup<->main;=20bouton=20connexion=20d?= =?UTF-8?q?=C3=A9sormais=20gris=C3=A9=20si=20saisie=20insuffisante(startup?= =?UTF-8?q?=20frame);=20Afficheur=20de=20compte=20d=C3=A9sormais=20=C3=A0?= =?UTF-8?q?=20un=20seul=20=C3=A9tat=20(uniquement=20connect=C3=A9);=20Supp?= =?UTF-8?q?ression=20du=20composant=20graphique=20AccountManager=20(inutil?= =?UTF-8?q?e);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/pqt/client/Main.java | 43 ++++- .../pqt/client/gui/main_frame/MainFrame.java | 9 +- .../gui/main_frame/MainFrameController.java | 57 +----- .../client/gui/main_frame/MainFrameModel.java | 26 +-- .../client/gui/main_frame/MainFrameView.java | 32 +--- .../listeners/IMainFrameModelListener.java | 3 +- .../AccountManagerScreen.java | 1 - .../ressources/components/AccountManager.java | 162 ------------------ .../IFXAccountsDisplayerComponent.java | 11 -- .../listeners/IAccountComponentListener.java | 7 - .../SimpleAccountComponentFirerer.java | 10 -- .../gui/startup_frame/StartupFrame.java | 11 +- .../startup_frame/StartupFrameController.java | 15 +- .../gui/startup_frame/StartupFrameModel.java | 41 ++++- .../gui/startup_frame/StartupFrameView.java | 75 +++++--- .../StartupProcedureHandler.java | 26 ++- .../frame/IStartupFrameModelEventFirerer.java | 8 + .../IStartupFrameModelListener.java | 3 +- .../SimpleStartupFrameModelEventFirerer.java | 29 ++++ .../IStartupProcedureEventFirerer.java | 12 ++ .../procedure/IStartupProcedureListener.java | 11 ++ .../SimpleStartupProcedureEventFirerer.java | 47 +++++ .../module/ClientBackEndModuleManager.java | 2 +- 23 files changed, 300 insertions(+), 341 deletions(-) delete mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/AccountManager.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/IFXAccountsDisplayerComponent.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/IAccountComponentListener.java delete mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/SimpleAccountComponentFirerer.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelEventFirerer.java rename Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/{ => frame}/IStartupFrameModelListener.java (53%) create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/SimpleStartupFrameModelEventFirerer.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureEventFirerer.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureListener.java create mode 100644 Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/SimpleStartupProcedureEventFirerer.java diff --git a/Workspace/client/src/main/java/com/pqt/client/Main.java b/Workspace/client/src/main/java/com/pqt/client/Main.java index 65ae061c..311fd517 100644 --- a/Workspace/client/src/main/java/com/pqt/client/Main.java +++ b/Workspace/client/src/main/java/com/pqt/client/Main.java @@ -1,6 +1,7 @@ package com.pqt.client; import com.pqt.client.gui.main_frame.MainFrame; +import com.pqt.client.gui.main_frame.listeners.IMainFrameModelListener; import com.pqt.client.gui.modules.account_screen.AccountScreen; import com.pqt.client.gui.modules.sale_screen.SaleScreen; import com.pqt.client.gui.modules.stat_screen.StatScreen; @@ -9,9 +10,12 @@ import com.pqt.client.gui.ressources.components.generics.toast.ToastFactory; import com.pqt.client.gui.ressources.css.GUICssTool; import com.pqt.client.gui.ressources.strings.GUIStringTool; import com.pqt.client.gui.startup_frame.StartupFrame; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; import com.pqt.client.module.ClientBackEndModuleManager; import javafx.application.Application; +import javafx.application.Platform; import javafx.scene.Scene; +import javafx.scene.layout.Pane; import javafx.stage.Stage; public class Main extends Application{ @@ -22,24 +26,53 @@ public class Main extends Application{ @Override public void start(Stage primaryStage) throws Exception { - //TODO ajouter écran de préloading : StartupFrame ClientBackEndModuleManager moduleManager = new ClientBackEndModuleManager(null); + MainFrame mainFrame = new MainFrame(moduleManager.getAccountService()); mainFrame.addModule(new SaleScreen(moduleManager.getAccountService(), moduleManager.getStockService(), moduleManager.getSaleService()), true); mainFrame.addModule(new StockScreen(moduleManager.getStockService(), moduleManager.getAccountService())); mainFrame.addModule(new StatScreen(moduleManager.getStatService())); mainFrame.addModule(new AccountScreen(moduleManager.getAccountService())); + Scene mainFrameScene = initScene(mainFrame.getPane()); StartupFrame startupFrame = new StartupFrame(moduleManager.getAccountService(), moduleManager.getNetworkService()); - Scene scene = new Scene(startupFrame.getPane()); - scene.getStylesheets().clear(); - scene.getStylesheets().addAll(getClass().getResource(GUICssTool.getCssFilePath()).toExternalForm()); + Scene startupFrameScene = initScene(startupFrame.getPane()); + + mainFrame.addFrameModelListener(getMainFrameListener(primaryStage, startupFrameScene)); + startupFrame.addFrameModelListener(getStartupFrameListener(primaryStage, mainFrameScene)); ToastFactory.init(primaryStage); primaryStage.setTitle(GUIStringTool.getAppTitle()); - primaryStage.setScene(scene); + primaryStage.setScene(startupFrameScene); primaryStage.show(); } + + private Scene initScene(Pane pane){ + Scene scene = new Scene(pane); + scene.getStylesheets().clear(); + scene.getStylesheets().addAll(getClass().getResource(GUICssTool.getCssFilePath()).toExternalForm()); + + return scene; + } + + private IStartupFrameModelListener getStartupFrameListener(Stage primaryStage, Scene sceneToDisplay){ + return () -> trySwitchScene(primaryStage, sceneToDisplay, true); + } + + private IMainFrameModelListener getMainFrameListener(Stage primaryStage, Scene sceneToDisplay){ + return () -> trySwitchScene(primaryStage, sceneToDisplay, false); + } + + private void trySwitchScene(Stage primaryStage, Scene sceneToDisplay, boolean maximize){ + if(sceneToDisplay!=null) { + primaryStage.hide(); + primaryStage.setScene(sceneToDisplay); + primaryStage.setMaximized(maximize); + primaryStage.show(); + }else{ + Platform.exit(); + } + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrame.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrame.java index 4ded52f6..bccfbce8 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrame.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrame.java @@ -1,7 +1,9 @@ package com.pqt.client.gui.main_frame; +import com.pqt.client.gui.main_frame.listeners.IMainFrameModelListener; import com.pqt.client.gui.modules.IGuiModule; import com.pqt.client.gui.ressources.components.generics.IFXComponent; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; import com.pqt.client.module.account.AccountService; import javafx.scene.layout.Pane; @@ -9,9 +11,10 @@ public class MainFrame implements IFXComponent { private MainFrameView view; private MainFrameController ctrl; + private MainFrameModel model; public MainFrame(AccountService accountService) { - MainFrameModel model = new MainFrameModel(accountService); + model = new MainFrameModel(accountService); ctrl = new MainFrameController(model); model.addListener(ctrl); @@ -28,6 +31,10 @@ public class MainFrame implements IFXComponent { ctrl.addModule(module, false); } + public void addFrameModelListener(IMainFrameModelListener l){ + model.addListener(l); + } + @Override public Pane getPane() { return view.getPane(); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameController.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameController.java index 180f7802..15f43711 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameController.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameController.java @@ -2,17 +2,12 @@ package com.pqt.client.gui.main_frame; import com.pqt.client.gui.main_frame.listeners.IMainFrameModelListener; import com.pqt.client.gui.modules.IGuiModule; -import com.pqt.client.gui.ressources.components.generics.validators.listeners.IValidatorComponentListener; -import com.pqt.client.gui.ressources.components.specifics.account.listeners.IAccountComponentListener; -import com.pqt.core.entities.user_account.Account; import com.pqt.core.entities.user_account.AccountLevel; -import javafx.event.Event; class MainFrameController implements IMainFrameModelListener { private MainFrameModel model; private MainFrameView view; - private IValidatorComponentListener accountManagerAccountListener; MainFrameController(MainFrameModel model) { this.model = model; @@ -23,7 +18,6 @@ class MainFrameController implements IMainFrameModelListener { } void updateView(){ - view.feedAccountCollectionToManager(model.getAccounts()); view.setCurrentAccount(model.getCurrentAccount()); if(model.getCurrentAccount()!=null) view.updateModuleButtonLock(model.getCurrentAccount().getPermissionLevel()); @@ -38,57 +32,12 @@ class MainFrameController implements IMainFrameModelListener { this.view.addGuiModule(module.getModuleName(),module.getPane(), module.getLowestRequiredAccountLevel(), activate); } - IValidatorComponentListener getAccountManagerValidatorListener() { - return new IValidatorComponentListener() { - @Override - public void onValidationEvent() { - if(view.isAccountCreationPossible()) - model.connectAccount(view.create()); - } - - @Override - public void onCancelEvent() { - model.disconnectCurrentAccount(); - } - }; - } - - IAccountComponentListener getAccountManagerAccountListener() { - return new IAccountComponentListener() { - @Override - public void onRefreshContentRequestEvent() { - - } - - @Override - public void onContentClickEvent(Event event, Account eventTarget) { - - } - - @Override - public void onAddContentRequestEvent() { - - } - - @Override - public void onRemoveContentRequestEvent(Account content) { - - } - - @Override - public void onDetailContentRequestEvent(Account content) { - - } - }; + public void onAccountDisconnectionRequested() { + model.disconnectCurrentAccount(); } @Override - public void onAccountStatusChangedEvent(boolean status) { - updateView(); - } + public void onAccountDisconnectedEvent() { - @Override - public void onAccountCollectionChangedEvent() { - updateView(); } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java index 755269a1..4a0133a6 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java @@ -20,7 +20,9 @@ class MainFrameModel { this.accountService.addListener(new IAccountListener() { @Override public void onAccountStatusChangedEvent(boolean status) { - MainFrameModel.this.fireAccountStatusChangedEvent(status); + if(!status){ + MainFrameModel.this.fireAccountDisconnectedEvent(); + } } @Override @@ -30,30 +32,20 @@ class MainFrameModel { @Override public void onAccountListChangedEvent() { - MainFrameModel.this.fireAccountCollectionChangedEvent(); } }); } - private void fireAccountCollectionChangedEvent() { - Arrays.stream(listenerList.getListeners(IMainFrameModelListener.class)).forEach(IMainFrameModelListener::onAccountCollectionChangedEvent); - } - - private void fireAccountStatusChangedEvent(boolean status) { - Arrays.stream(listenerList.getListeners(IMainFrameModelListener.class)).forEach(l->l.onAccountStatusChangedEvent(status)); - } - - void connectAccount(Account account) { - accountService.setCurrentAccount(account); - accountService.logInCurrentAccount(account.getPassword()); + private void fireAccountDisconnectedEvent() { + Arrays.stream(listenerList.getListeners(IMainFrameModelListener.class)).forEach(IMainFrameModelListener::onAccountDisconnectedEvent); } void disconnectCurrentAccount() { + fireAccountDisconnectedEvent(); + //TODO uncomment code when test are to be done + /* accountService.logOutCurrentAccount(); - } - - Collection getAccounts(){ - return accountService.getAllAccounts(); + */ } void addListener(IMainFrameModelListener listener){ diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameView.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameView.java index 7b951581..fbe883b1 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameView.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameView.java @@ -1,6 +1,5 @@ package com.pqt.client.gui.main_frame; -import com.pqt.client.gui.ressources.components.AccountManager; import com.pqt.client.gui.ressources.components.generics.IFXComponent; import com.pqt.client.gui.ressources.components.generics.others.SideBar; import com.pqt.client.gui.ressources.components.generics.others.listeners.ISideBarListener; @@ -10,11 +9,9 @@ import com.pqt.core.entities.user_account.AccountLevel; import javafx.application.Platform; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.value.ObservableValue; -import javafx.geometry.Orientation; import javafx.scene.Node; import javafx.scene.control.Button; -import javafx.scene.control.ToolBar; +import javafx.scene.control.Label; import javafx.scene.input.KeyCode; import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; @@ -22,16 +19,14 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; -import java.util.Collection; - class MainFrameView implements IFXComponent{ private final MainFrameController ctrl; private BorderPane mainPane; - private AccountManager accountManager; private VBox buttonHolder; private ObjectProperty currentAccountLevel; + private Label accountNameLabel; MainFrameView(MainFrameController ctrl) { this.ctrl = ctrl; @@ -51,11 +46,10 @@ class MainFrameView implements IFXComponent{ buttonHolder.prefWidthProperty().bind(sidebar.widthProperty()); sidebar.getChildren().add(buttonHolder); - accountManager = new AccountManager(); - accountManager.addListener(ctrl.getAccountManagerValidatorListener()); - accountManager.addListener(ctrl.getAccountManagerAccountListener()); - accountManager.getPane().prefWidthProperty().bind(sidebar.widthProperty()); - sidebar.getChildren().add(accountManager.getPane()); + accountNameLabel = new Label(); + Button disconnectionButton = new Button(GUIStringTool.getLogoutButtonLabel()); + disconnectionButton.setOnAction((event -> ctrl.onAccountDisconnectionRequested())); + sidebar.getChildren().addAll(accountNameLabel, disconnectionButton); mainPane.setLeft(sidebar); @@ -120,20 +114,8 @@ class MainFrameView implements IFXComponent{ buttonHolder.getChildren().add(button); } - boolean isAccountCreationPossible(){ - return accountManager.isCreationPossible(); - } - - Account create(){ - return accountManager.create(); - } - void setCurrentAccount(Account account){ - accountManager.setCurrentAccount(account); - } - - void feedAccountCollectionToManager(Collection accounts){ - accountManager.display(accounts); + accountNameLabel.setText(GUIStringTool.getAccountStringConverter().toString(account)); } void updateModuleButtonLock(AccountLevel level) { diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/listeners/IMainFrameModelListener.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/listeners/IMainFrameModelListener.java index 5c876e26..d9c1229f 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/listeners/IMainFrameModelListener.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/listeners/IMainFrameModelListener.java @@ -3,6 +3,5 @@ package com.pqt.client.gui.main_frame.listeners; import java.util.EventListener; public interface IMainFrameModelListener extends EventListener{ - void onAccountStatusChangedEvent(boolean status); - void onAccountCollectionChangedEvent(); + void onAccountDisconnectedEvent(); } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/account_manager_screen/AccountManagerScreen.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/account_manager_screen/AccountManagerScreen.java index 26cd33e2..ae980085 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/account_manager_screen/AccountManagerScreen.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/account_manager_screen/AccountManagerScreen.java @@ -9,7 +9,6 @@ import javafx.scene.layout.Pane; import java.util.Collection; -//TODO à faire public class AccountManagerScreen implements IFXValidatorComponent, IFXCreatorComponent{ private AccountManagerScreenModel model; diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/AccountManager.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/AccountManager.java deleted file mode 100644 index a88fb26c..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/AccountManager.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.pqt.client.gui.ressources.components; - -import com.pqt.client.gui.ressources.components.generics.creators.IFXCreatorComponent; -import com.pqt.client.gui.ressources.components.generics.validators.IFXValidatorComponent; -import com.pqt.client.gui.ressources.components.specifics.account.listeners.IAccountComponentListener; -import com.pqt.client.gui.ressources.components.generics.validators.listeners.IValidatorComponentListener; -import com.pqt.client.gui.ressources.components.generics.validators.listeners.SimpleValidatorComponentFirerer; -import com.pqt.client.gui.ressources.components.specifics.account.IFXAccountsDisplayerComponent; -import com.pqt.client.gui.ressources.components.specifics.account.listeners.SimpleAccountComponentFirerer; -import com.pqt.client.gui.ressources.strings.GUIStringTool; -import com.pqt.core.entities.user_account.Account; -import com.pqt.core.entities.user_account.AccountLevel; -import javafx.application.Platform; -import javafx.collections.FXCollections; -import javafx.scene.control.Button; -import javafx.scene.control.ChoiceBox; -import javafx.scene.control.PasswordField; -import javafx.scene.control.TextField; -import javafx.scene.input.KeyCode; -import javafx.scene.layout.HBox; -import javafx.scene.layout.Pane; -import javafx.scene.layout.VBox; - -import java.util.Collection; - -public class AccountManager implements IFXAccountsDisplayerComponent, IFXValidatorComponent, IFXCreatorComponent { - - private Pane mainPane; - - private VBox mainDisconnectedPane, mainConnectedPane; - private TextField connectedUsernameField; - private ChoiceBox disconnectedUsernameField; - private PasswordField passwordField; - - private SimpleAccountComponentFirerer accountEventFirerer; - private SimpleValidatorComponentFirerer validatorEventFirerer; - - private Account currentAccount; - - public AccountManager() { - accountEventFirerer = new SimpleAccountComponentFirerer(); - validatorEventFirerer = new SimpleValidatorComponentFirerer(); - - currentAccount = null; - - init(); - } - - private void init() { - mainPane = new Pane(); - - mainConnectedPane = new VBox(); - mainDisconnectedPane = new VBox(); - - connectedUsernameField = new TextField(); - connectedUsernameField.setEditable(false); - - Button disconnectButton = new Button(GUIStringTool.getLogoutButtonLabel()); - disconnectButton.setOnMouseClicked(event->validatorEventFirerer.fireCancelEvent()); - disconnectButton.setOnKeyTyped(event->{if(event.getCode().equals(KeyCode.ENTER)) validatorEventFirerer.fireCancelEvent();}); - - mainConnectedPane.getChildren().addAll(connectedUsernameField, disconnectButton); - - - disconnectedUsernameField = new ChoiceBox<>(); - disconnectedUsernameField.setConverter(GUIStringTool.getAccountStringConverter()); - - passwordField = new PasswordField(); - passwordField.setPromptText(GUIStringTool.getPasswordFieldPromptText()); - - Button validationButton = new Button(GUIStringTool.getLoginButtonLabel()); - validationButton.setOnMouseClicked(event-> validatorEventFirerer.fireValidationEvent()); - validationButton.setOnKeyTyped(event->{if(event.getCode().equals(KeyCode.ENTER)) validatorEventFirerer.fireValidationEvent();}); - - mainDisconnectedPane.getChildren().addAll(disconnectedUsernameField, passwordField, validationButton); - - refreshMainPane(); - display(null); - } - - @Override - public void display(Collection content) { - Platform.runLater(()->{ - if(content!=null && content.size()>0) - disconnectedUsernameField.setItems(FXCollections.observableArrayList(content)); - else{ - disconnectedUsernameField.getItems().clear(); - disconnectedUsernameField.getItems().add(new Account("null", "", AccountLevel.getLowest())); - } - }); - } - - public void setCurrentAccount(Account account){ - currentAccount = account; - Platform.runLater(()->connectedUsernameField.setText(GUIStringTool.getAccountStringConverter().toString(currentAccount))); - refreshMainPane(); - } - - private void refreshMainPane() { - if(currentAccount!=null) - Platform.runLater( - ()->{ - mainPane.getChildren().clear(); - mainPane.getChildren().add(mainConnectedPane); - } - ); - else - Platform.runLater( - ()->{ - mainPane.getChildren().clear(); - mainPane.getChildren().add(mainDisconnectedPane); - } - ); - } - - public Account getCurrentAccount() { - return currentAccount; - } - - @Override - public void addListener(IAccountComponentListener l) { - accountEventFirerer.addListener(l); - } - - @Override - public void removeListener(IAccountComponentListener l) { - accountEventFirerer.removeListener(l); - } - - @Override - public Pane getPane() { - return mainPane; - } - - @Override - public void addListener(IValidatorComponentListener l) { - validatorEventFirerer.addListener(l); - } - - @Override - public void removeListener(IValidatorComponentListener l) { - validatorEventFirerer.removeListener(l); - } - - @Override - public Account create() { - if(!isCreationPossible()) - return null; - - return new Account(disconnectedUsernameField.getValue().getUsername(), passwordField.getText(), disconnectedUsernameField.getValue().getPermissionLevel()); - } - - @Override - public boolean isCreationPossible() { - return currentAccount==null - && disconnectedUsernameField.getAccessibleText()!=null - && !disconnectedUsernameField.getAccessibleText().isEmpty() - && passwordField.getText()!=null - && !passwordField.getText().isEmpty(); - - } -} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/IFXAccountsDisplayerComponent.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/IFXAccountsDisplayerComponent.java deleted file mode 100644 index 1c459115..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/IFXAccountsDisplayerComponent.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pqt.client.gui.ressources.components.specifics.account; - -import com.pqt.client.gui.ressources.components.generics.displayers.IFXDisplayerComponent; -import com.pqt.client.gui.ressources.components.specifics.account.listeners.IAccountComponentListener; -import com.pqt.core.entities.user_account.Account; - -import java.util.Collection; - -public interface IFXAccountsDisplayerComponent extends IFXDisplayerComponent, IAccountComponentListener> { - -} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/IAccountComponentListener.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/IAccountComponentListener.java deleted file mode 100644 index 9fe3ff70..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/IAccountComponentListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.pqt.client.gui.ressources.components.specifics.account.listeners; - -import com.pqt.client.gui.ressources.components.generics.displayers.listeners.IDisplayerComponentListener; -import com.pqt.core.entities.user_account.Account; - -public interface IAccountComponentListener extends IDisplayerComponentListener{ -} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/SimpleAccountComponentFirerer.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/SimpleAccountComponentFirerer.java deleted file mode 100644 index 8f06f6a2..00000000 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/components/specifics/account/listeners/SimpleAccountComponentFirerer.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.pqt.client.gui.ressources.components.specifics.account.listeners; - -import com.pqt.client.gui.ressources.components.generics.displayers.listeners.SimpleDisplayerComponentFirerer; -import com.pqt.core.entities.user_account.Account; - -public class SimpleAccountComponentFirerer extends SimpleDisplayerComponentFirerer { - public SimpleAccountComponentFirerer() { - super(IAccountComponentListener.class); - } -} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java index 07721397..29e2c7e0 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrame.java @@ -1,6 +1,7 @@ package com.pqt.client.gui.startup_frame; import com.pqt.client.gui.ressources.components.generics.IFXComponent; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; import com.pqt.client.module.account.AccountService; import com.pqt.client.module.network.NetworkService; import javafx.scene.layout.Pane; @@ -8,11 +9,11 @@ import javafx.scene.layout.Pane; public class StartupFrame implements IFXComponent{ private StartupFrameView view; - private StartupFrameController ctrl; + private StartupFrameModel model; public StartupFrame(AccountService accountService, NetworkService networkService) { - StartupFrameModel model = new StartupFrameModel(accountService, networkService); - ctrl = new StartupFrameController(model); + model = new StartupFrameModel(accountService, networkService); + StartupFrameController ctrl = new StartupFrameController(model); model.addListener(ctrl); view = new StartupFrameView(ctrl); @@ -20,6 +21,10 @@ public class StartupFrame implements IFXComponent{ ctrl.updateView(); } + public void addFrameModelListener(IStartupFrameModelListener l){ + model.addListener(l); + } + @Override public Pane getPane() { return view.getPane(); diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java index 8500064e..346335d4 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java @@ -1,6 +1,6 @@ package com.pqt.client.gui.startup_frame; -import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; public class StartupFrameController implements IStartupFrameModelListener { @@ -16,7 +16,13 @@ public class StartupFrameController implements IStartupFrameModelListener { } public void updateView() { - //TODO écrire corps méthd StartupFrameController.updateView() + view.setValidationButtonEnable(enableValidationButton()); + } + + private boolean enableValidationButton() { + return !view.getAccountUsernameTextFieldContent().isEmpty() + && !view.getServerPortTextFieldContent().isEmpty() + && !view.getServerPortTextFieldContent().isEmpty(); } public void onValidation() { @@ -31,4 +37,9 @@ public class StartupFrameController implements IStartupFrameModelListener { ); } } + + @Override + public void onStartupValidated() { + view.clearPasswordField(); + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java index daf3dc0a..998e931a 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java @@ -1,31 +1,29 @@ package com.pqt.client.gui.startup_frame; -import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelEventFirerer; +import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; +import com.pqt.client.gui.startup_frame.listeners.frame.SimpleStartupFrameModelEventFirerer; +import com.pqt.client.gui.startup_frame.listeners.procedure.IStartupProcedureListener; import com.pqt.client.module.account.AccountService; -import com.pqt.client.module.account.listeners.AccountListenerAdapter; -import com.pqt.client.module.account.listeners.IAccountListener; import com.pqt.client.module.network.NetworkService; -import com.pqt.client.module.network.listeners.INetworkServiceListener; - -import javax.swing.event.EventListenerList; public class StartupFrameModel { private final AccountService accountService; private final NetworkService networkService; - private final EventListenerList listenerList; + private final IStartupFrameModelEventFirerer firerer; private boolean startupProcessBegan; public StartupFrameModel(AccountService accountService, NetworkService networkService) { this.accountService = accountService; this.networkService = networkService; - this.listenerList = new EventListenerList(); + firerer = new SimpleStartupFrameModelEventFirerer(); startupProcessBegan = false; } public void addListener(IStartupFrameModelListener ctrl) { - listenerList.add(IStartupFrameModelListener.class, ctrl); + firerer.addListener(ctrl); } public boolean isStartupProcessRunning() { @@ -33,6 +31,9 @@ public class StartupFrameModel { } public void beginStartupProcess(String requiredHost, String requiredPort, String username, String password) { + //TODO uncomment code when test are to be done + firerer.fireStartupValidated(); + /* if(!startupProcessBegan){ checkParameters(requiredHost, requiredPort, username, password); startupProcessBegan = true; @@ -41,8 +42,30 @@ public class StartupFrameModel { new StartupProcedureHandler(networkService, accountService) .init(requiredHost, requiredIntPort, username, password) + .addListener(new IStartupProcedureListener() { + @Override + public void onServerFoundEvent(String URL, Integer Port) { + + } + + @Override + public void onUserAccountUnknownEvent(String username) { + + } + + @Override + public void onUserAccountConnectedEvent(String username) { + firerer.fireStartupValidated(); + } + + @Override + public void onUserAccountDisconnectedEvent(String username) { + + } + }) .handle(); } + */ } private void checkParameters(String host, String port, String username, String password) { diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java index 3cc5dcd4..b2d03caa 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java @@ -15,47 +15,62 @@ public class StartupFrameView implements IFXComponent{ private TextField usernameTextField; private TextField passwordTextField; + private Button validationButton; + public StartupFrameView(StartupFrameController ctrl) { this.ctrl = ctrl; initGui(); } private void initGui() { - mainPane = new VBox(); + try { + mainPane = new VBox(); - Label serverHostLabel = new Label(GUIStringTool.getServerHostLabel()); - serverHostTextField = new TextField(); - Label serverPortLabel = new Label(GUIStringTool.getServerPortLabel()); - serverPortTextField = new TextField(); + Label serverHostLabel = new Label(GUIStringTool.getServerHostLabel()); + serverHostTextField = makeTextField(TextField.class); + Label serverPortLabel = new Label(GUIStringTool.getServerPortLabel()); + serverPortTextField = makeTextField(TextField.class); - GridPane serverFieldGridPane = new GridPane(); - serverFieldGridPane.add(serverHostLabel,0,0); - serverFieldGridPane.add(serverHostTextField,1,0); - serverFieldGridPane.add(serverPortLabel,0,1); - serverFieldGridPane.add(serverPortTextField,1,1); + GridPane serverFieldGridPane = new GridPane(); + serverFieldGridPane.add(serverHostLabel, 0, 0); + serverFieldGridPane.add(serverHostTextField, 1, 0); + serverFieldGridPane.add(serverPortLabel, 0, 1); + serverFieldGridPane.add(serverPortTextField, 1, 1); - TitledPane serverTitledPane = new TitledPane(GUIStringTool.getServerSectionTitleLabel(),serverFieldGridPane); + TitledPane serverTitledPane = new TitledPane(GUIStringTool.getServerSectionTitleLabel(), serverFieldGridPane); - Label usernameLabel = new Label(GUIStringTool.getUsernameLabel()); - usernameTextField = new TextField(); - Label passwordLabel = new Label(GUIStringTool.getPasswordLabel()); - passwordTextField = new PasswordField(); + Label usernameLabel = new Label(GUIStringTool.getUsernameLabel()); + usernameTextField = makeTextField(TextField.class); + Label passwordLabel = new Label(GUIStringTool.getPasswordLabel()); + passwordTextField = makeTextField(PasswordField.class); - GridPane accountFieldGridPane = new GridPane(); - accountFieldGridPane.add(usernameLabel,0,0); - accountFieldGridPane.add(usernameTextField,1,0); - accountFieldGridPane.add(passwordLabel,0,1); - accountFieldGridPane.add(passwordTextField,1,1); + GridPane accountFieldGridPane = new GridPane(); + accountFieldGridPane.add(usernameLabel, 0, 0); + accountFieldGridPane.add(usernameTextField, 1, 0); + accountFieldGridPane.add(passwordLabel, 0, 1); + accountFieldGridPane.add(passwordTextField, 1, 1); - TitledPane accountTitledPane = new TitledPane(GUIStringTool.getAccountSectionTitleLabel(),accountFieldGridPane); + TitledPane accountTitledPane = new TitledPane(GUIStringTool.getAccountSectionTitleLabel(), accountFieldGridPane); - Button validationButton = new Button(GUIStringTool.getValidationButtonLabel()); - validationButton.setOnAction((event)->{ - ctrl.onValidation(); + validationButton = new Button(GUIStringTool.getValidationButtonLabel()); + validationButton.setOnAction((event) -> { + ctrl.onValidation(); + }); + + mainPane.getChildren().addAll(serverTitledPane, accountTitledPane, validationButton); + }catch(Exception e){ + //TODO Shutdown software on exception + e.printStackTrace(); + } + } + + private T makeTextField(Class clazz) throws IllegalAccessException, InstantiationException { + T ntf = clazz.newInstance(); + ntf.textProperty().addListener((obs, oldVal, newVal)->{ + ctrl.updateView(); }); - - mainPane.getChildren().addAll(serverTitledPane, accountTitledPane, validationButton); + return ntf; } String getServerHostTextFieldContent(){ @@ -78,4 +93,12 @@ public class StartupFrameView implements IFXComponent{ public Pane getPane() { return mainPane; } + + public void setValidationButtonEnable(boolean enable) { + this.validationButton.setDisable(!enable); + } + + public void clearPasswordField() { + passwordTextField.setText(""); + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java index 7471d3cf..b79c9f22 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupProcedureHandler.java @@ -1,5 +1,7 @@ package com.pqt.client.gui.startup_frame; +import com.pqt.client.gui.startup_frame.listeners.procedure.IStartupProcedureEventFirerer; +import com.pqt.client.gui.startup_frame.listeners.procedure.IStartupProcedureListener; import com.pqt.client.module.account.AccountService; import com.pqt.client.module.account.listeners.AccountListenerAdapter; import com.pqt.client.module.account.listeners.IAccountListener; @@ -15,6 +17,8 @@ class StartupProcedureHandler { private String host, username, password; private Integer port; + private IStartupProcedureEventFirerer firerer; + StartupProcedureHandler(NetworkService networkService, AccountService accountService) { this.networkService = networkService; this.accountService = accountService; @@ -39,7 +43,8 @@ class StartupProcedureHandler { } private void useRequestedServer(){ - //TODO notify this + //Server found + firerer.fireServerFoundEvent(host, port); networkService.setActiveServer(host, port); accountService.addListener(getUpdateAccountListListener()); accountService.refreshAccounts(); @@ -52,7 +57,8 @@ class StartupProcedureHandler { .orElse(null); if(match==null){ - //TODO notify this + //Compte spécifié inconnu + firerer.fireUserAccountUnknownEvent(username); }else{ accountService.setCurrentAccount(match); accountService.addListener(getConnectAccountListener()); @@ -96,11 +102,23 @@ class StartupProcedureHandler { @Override public void onAccountStatusChangedEvent(boolean status) { if(status){ - //TODO notify this + //Compte connecté + firerer.fireUserAccountConnectedEvent(username); }else{ - //TODO notify this + //Compte non-connecté + firerer.fireUserAccountDisconnectedEvent(username); } } }; } + + public StartupProcedureHandler addListener(IStartupProcedureListener l){ + firerer.addListener(l); + return this; + } + + public StartupProcedureHandler removeListener(IStartupProcedureListener l){ + firerer.removeListener(l); + return this; + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelEventFirerer.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelEventFirerer.java new file mode 100644 index 00000000..877df58f --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelEventFirerer.java @@ -0,0 +1,8 @@ +package com.pqt.client.gui.startup_frame.listeners.frame; + +public interface IStartupFrameModelEventFirerer { + void fireStartupValidated(); + + void addListener(IStartupFrameModelListener l); + void removeListener(IStartupFrameModelListener l); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelListener.java similarity index 53% rename from Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java rename to Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelListener.java index 154cfe07..5249ede1 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/IStartupFrameModelListener.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/IStartupFrameModelListener.java @@ -1,6 +1,7 @@ -package com.pqt.client.gui.startup_frame.listeners; +package com.pqt.client.gui.startup_frame.listeners.frame; import java.util.EventListener; public interface IStartupFrameModelListener extends EventListener { + void onStartupValidated(); } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/SimpleStartupFrameModelEventFirerer.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/SimpleStartupFrameModelEventFirerer.java new file mode 100644 index 00000000..1ada34ae --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/frame/SimpleStartupFrameModelEventFirerer.java @@ -0,0 +1,29 @@ +package com.pqt.client.gui.startup_frame.listeners.frame; + +import javax.swing.event.EventListenerList; +import java.util.Arrays; + +public class SimpleStartupFrameModelEventFirerer implements IStartupFrameModelEventFirerer { + + private final EventListenerList listenerList; + + public SimpleStartupFrameModelEventFirerer() { + this.listenerList = new EventListenerList(); + } + + @Override + public void fireStartupValidated() { + Arrays.stream(listenerList.getListeners(IStartupFrameModelListener.class)) + .forEach(IStartupFrameModelListener::onStartupValidated); + } + + @Override + public void addListener(IStartupFrameModelListener l) { + listenerList.add(IStartupFrameModelListener.class, l); + } + + @Override + public void removeListener(IStartupFrameModelListener l) { + listenerList.remove(IStartupFrameModelListener.class, l); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureEventFirerer.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureEventFirerer.java new file mode 100644 index 00000000..e06829c7 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureEventFirerer.java @@ -0,0 +1,12 @@ +package com.pqt.client.gui.startup_frame.listeners.procedure; + +public interface IStartupProcedureEventFirerer { + + void fireServerFoundEvent(String URL, Integer Port); + void fireUserAccountUnknownEvent(String username); + void fireUserAccountConnectedEvent(String username); + void fireUserAccountDisconnectedEvent(String username); + + void addListener(IStartupProcedureListener l ); + void removeListener(IStartupProcedureListener l ); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureListener.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureListener.java new file mode 100644 index 00000000..cdf6f189 --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/IStartupProcedureListener.java @@ -0,0 +1,11 @@ +package com.pqt.client.gui.startup_frame.listeners.procedure; + +import java.util.EventListener; + +public interface IStartupProcedureListener extends EventListener{ + + void onServerFoundEvent(String URL, Integer Port); + void onUserAccountUnknownEvent(String username); + void onUserAccountConnectedEvent(String username); + void onUserAccountDisconnectedEvent(String username); +} diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/SimpleStartupProcedureEventFirerer.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/SimpleStartupProcedureEventFirerer.java new file mode 100644 index 00000000..f0cef5cb --- /dev/null +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/listeners/procedure/SimpleStartupProcedureEventFirerer.java @@ -0,0 +1,47 @@ +package com.pqt.client.gui.startup_frame.listeners.procedure; + +import javax.swing.event.EventListenerList; +import java.util.Arrays; + +public class SimpleStartupProcedureEventFirerer implements IStartupProcedureEventFirerer { + + private final EventListenerList listenerList; + + public SimpleStartupProcedureEventFirerer() { + this.listenerList = new EventListenerList(); + } + + @Override + public void fireServerFoundEvent(String URL, Integer port) { + Arrays.stream(listenerList.getListeners(IStartupProcedureListener.class)) + .forEach(l->l.onServerFoundEvent(URL, port)); + } + + @Override + public void fireUserAccountUnknownEvent(String username) { + Arrays.stream(listenerList.getListeners(IStartupProcedureListener.class)) + .forEach(l->l.onUserAccountUnknownEvent(username)); + } + + @Override + public void fireUserAccountConnectedEvent(String username) { + Arrays.stream(listenerList.getListeners(IStartupProcedureListener.class)) + .forEach(l->l.onUserAccountConnectedEvent(username)); + } + + @Override + public void fireUserAccountDisconnectedEvent(String username) { + Arrays.stream(listenerList.getListeners(IStartupProcedureListener.class)) + .forEach(l->l.onUserAccountDisconnectedEvent(username)); + } + + @Override + public void addListener(IStartupProcedureListener l) { + listenerList.add(IStartupProcedureListener.class, l); + } + + @Override + public void removeListener(IStartupProcedureListener l) { + listenerList.remove(IStartupProcedureListener.class, l); + } +} diff --git a/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java index c2666208..d7c12a3b 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/ClientBackEndModuleManager.java @@ -23,7 +23,7 @@ public class ClientBackEndModuleManager { stockService = new StockService(queryExecutor); accountService = new AccountService(queryExecutor); statService = new StatService(queryExecutor); - networkService = new NetworkService(queryExecutor); + networkService = new NetworkService(queryExecutor, connectionService); } public SaleService getSaleService() { From f628244e85d7b67b4a9261a88c4a7cb38ab39e19 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 16:51:37 +0200 Subject: [PATCH 14/18] =?UTF-8?q?Module=20Server=20:=20ajout=20d'un=20hash?= =?UTF-8?q?tool=20SHA-256;=20Cr=C3=A9ation=20d'une=20classe=20AbstractSimp?= =?UTF-8?q?leHashTool=20pour=20centraliser=20le=20code=20des=20deux=20hash?= =?UTF-8?q?tool=20existant;=20utilisation=20de=20SHA256HashTool=20dans=20l?= =?UTF-8?q?e=20module=20serveur=20g=C3=A9rant=20les=20identifiants=20de=20?= =?UTF-8?q?comptes=20utilisateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/module/account/FileAccountDao.java | 6 +-- .../security/AbstractSimpleHashTool.java | 39 +++++++++++++++++++ .../pqt/server/tools/security/IHashTool.java | 2 +- .../server/tools/security/MD5HashTool.java | 25 ++---------- .../server/tools/security/SHA256HashTool.java | 7 ++++ 5 files changed, 53 insertions(+), 26 deletions(-) create mode 100644 Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java create mode 100644 Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java 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 3695b015..24364a18 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 @@ -5,7 +5,7 @@ import com.pqt.core.entities.user_account.AccountLevel; import com.pqt.server.tools.io.ISerialFileManager; import com.pqt.server.tools.io.SimpleSerialFileManagerFactory; import com.pqt.server.tools.security.IHashTool; -import com.pqt.server.tools.security.MD5HashTool; +import com.pqt.server.tools.security.SHA256HashTool; import java.util.*; import java.util.stream.Collectors; @@ -19,7 +19,7 @@ import java.util.stream.Collectors; * Cette classe n'est pas faite pour gérer les accès concurentiels au fichier assurant la persistance, et n'est donc pas * thread-safe. Elle est conçue pour que tous les accès soient effectués depuis un même thread et depuis un unique objet. *

- * Cette classe manipule les mot de passe sous forme chiffrée via un système de hash (md5) + salt, et ne fait pas + * Cette classe manipule les mot de passe sous forme chiffrée via un système de hash (SHA-256) + salt, et ne fait pas * persister les mots de passes non-chiffrées. Les noms d'utilisateurs sont stockés sans chiffrage. */ class FileAccountDao implements IAccountDao { @@ -34,7 +34,7 @@ class FileAccountDao implements IAccountDao { FileAccountDao() { accountEntries = new HashSet<>(); connectedAccount = new HashSet<>(); - hashTool = new MD5HashTool(); + hashTool = new SHA256HashTool(); fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, ACCOUNT_FILE_NAME); loadFromFile(); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java new file mode 100644 index 00000000..0cf31c97 --- /dev/null +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java @@ -0,0 +1,39 @@ +package com.pqt.server.tools.security; + +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public abstract class AbstractSimpleHashTool implements IHashTool { + + private static final String DEFAULT_INSTANCE_CODE = "SHA-256"; + + private String instanceCode; + + @Override + public final String hashAndSalt(String input, String salt) { + String encryptedInput = null; + + if(input == null || salt == null) return null; + + try { + String str = salt+input; + //Create MessageDigest object with the instance code + MessageDigest digest = (instanceCode!=null?MessageDigest.getInstance(instanceCode):MessageDigest.getInstance(DEFAULT_INSTANCE_CODE)); + + //Update input string in message digest + digest.update(str.getBytes(), 0, str.length()); + + //Converts message digest value in base 16 (hex) + encryptedInput = new BigInteger(1, digest.digest()).toString(16); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return encryptedInput; + } + + protected void setInstanceCode(String instanceCode){ + this.instanceCode = instanceCode; + } +} diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java index 57cee938..9fefd6dc 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java @@ -1,5 +1,5 @@ package com.pqt.server.tools.security; public interface IHashTool { - String hashAndSalt(String str, String salt); + String hashAndSalt(String input, String salt); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java index ffb2ebca..b3b34da9 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java @@ -4,27 +4,8 @@ import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -public class MD5HashTool implements IHashTool{ - @Override - public String hashAndSalt(String input, String salt) { - String md5 = null; - - if(input == null || salt == null) return null; - - try { - String str = salt+input; - //Create MessageDigest object for MD5 - MessageDigest digest = MessageDigest.getInstance("MD5"); - - //Update input string in message digest - digest.update(str.getBytes(), 0, str.length()); - - //Converts message digest value in base 16 (hex) - md5 = new BigInteger(1, digest.digest()).toString(16); - - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - return md5; +public class MD5HashTool extends AbstractSimpleHashTool{ + public MD5HashTool() { + setInstanceCode("MD5"); } } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java new file mode 100644 index 00000000..02db548a --- /dev/null +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java @@ -0,0 +1,7 @@ +package com.pqt.server.tools.security; + +public class SHA256HashTool extends AbstractSimpleHashTool { + public SHA256HashTool() { + setInstanceCode("SHA-256"); + } +} From a958fdd7b999f5b433ab55fdcdeedd1ffca2c60d Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 17:04:25 +0200 Subject: [PATCH 15/18] =?UTF-8?q?Module=20Client=20:=20Module=20d=C3=A9sor?= =?UTF-8?q?mais=20configur=C3=A9=20pour=20g=C3=A9n=C3=A9rer=20un=20Uber-ja?= =?UTF-8?q?r=20lors=20de=20l'install=20Maven;=20Ajout=20properties=20au=20?= =?UTF-8?q?fichier=20META-INF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Workspace/client/dependency-reduced-pom.xml | 39 +++++++++++++++++++++ Workspace/client/pom.xml | 31 +++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 Workspace/client/dependency-reduced-pom.xml diff --git a/Workspace/client/dependency-reduced-pom.xml b/Workspace/client/dependency-reduced-pom.xml new file mode 100644 index 00000000..bfbe2632 --- /dev/null +++ b/Workspace/client/dependency-reduced-pom.xml @@ -0,0 +1,39 @@ + + + + Main + com.pqt + 1.0-SNAPSHOT + + 4.0.0 + client + + + + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + + com.pqt.client.Main + 1.0-SNAPSHOT + Guillaume 'Cess' Prost + 26/10/2017 + + + + + + + + + + + diff --git a/Workspace/client/pom.xml b/Workspace/client/pom.xml index 8c3e701a..8d19b526 100644 --- a/Workspace/client/pom.xml +++ b/Workspace/client/pom.xml @@ -17,6 +17,35 @@ 1.0-SNAPSHOT - + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + + + com.pqt.client.Main + 1.0-SNAPSHOT + Guillaume 'Cess' Prost + 26/10/2017 + + + + + + + + + \ No newline at end of file From 183f99d25beb110ea91df9a7f9402e148039654a Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 21:51:44 +0200 Subject: [PATCH 16/18] =?UTF-8?q?Module=20Server=20:=20r=C3=A9organisation?= =?UTF-8?q?=20arborescence=20pour=20corriger=20anomalies=20de=20g=C3=A9n?= =?UTF-8?q?=C3=A9ration=20de=20war?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Workspace/server/server.iml | 8 -------- .../com/pqt/server/controller/IMessageHandler.java | 0 .../com/pqt/server/controller/SimpleMessageHandler.java | 0 .../com/pqt/server/exception/ServerQueryException.java | 0 .../com/pqt/server/module/account/AccountEntry.java | 0 .../com/pqt/server/module/account/AccountService.java | 0 .../com/pqt/server/module/account/FileAccountDao.java | 0 .../com/pqt/server/module/account/IAccountDao.java | 0 .../com/pqt/server/module/client/ClientEntry.java | 0 .../com/pqt/server/module/client/ClientService.java | 0 .../com/pqt/server/module/sale/ISaleDao.java | 0 .../com/pqt/server/module/sale/NoRevertFileSaleDao.java | 0 .../com/pqt/server/module/sale/SaleService.java | 1 - .../pqt/server/module/sale/listeners/ISaleFirerer.java | 0 .../pqt/server/module/sale/listeners/ISaleListener.java | 0 .../server/module/sale/listeners/SaleListenerAdapter.java | 0 .../server/module/sale/listeners/SimpleSaleFirerer.java | 0 .../com/pqt/server/module/state/ServerState.java | 0 .../com/pqt/server/module/state/ServerStateService.java | 2 -- .../pqt/server/module/statistics/StatisticsService.java | 2 -- .../com/pqt/server/module/stock/FileStockDao.java | 0 .../com/pqt/server/module/stock/IStockDao.java | 1 - .../com/pqt/server/module/stock/StockService.java | 1 - .../com/pqt/server/servlets/QueryServlet.java | 0 .../classes => java}/com/pqt/server/tools/FileUtil.java | 0 .../com/pqt/server/tools/entities/SaleContent.java | 0 .../com/pqt/server/tools/io/ISerialFileManager.java | 0 .../com/pqt/server/tools/io/SimpleSerialFileManager.java | 0 .../server/tools/io/SimpleSerialFileManagerFactory.java | 0 .../pqt/server/tools/security/AbstractSimpleHashTool.java | 0 .../com/pqt/server/tools/security/IHashTool.java | 0 .../com/pqt/server/tools/security/MD5HashTool.java | 4 ---- .../com/pqt/server/tools/security/SHA256HashTool.java | 0 33 files changed, 19 deletions(-) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/controller/IMessageHandler.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/controller/SimpleMessageHandler.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/exception/ServerQueryException.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/account/AccountEntry.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/account/AccountService.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/account/FileAccountDao.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/account/IAccountDao.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/client/ClientEntry.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/client/ClientService.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/ISaleDao.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/NoRevertFileSaleDao.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/SaleService.java (98%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/listeners/ISaleFirerer.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/listeners/ISaleListener.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/listeners/SaleListenerAdapter.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/sale/listeners/SimpleSaleFirerer.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/state/ServerState.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/state/ServerStateService.java (98%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/statistics/StatisticsService.java (96%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/stock/FileStockDao.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/stock/IStockDao.java (99%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/module/stock/StockService.java (98%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/servlets/QueryServlet.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/FileUtil.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/entities/SaleContent.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/io/ISerialFileManager.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/io/SimpleSerialFileManager.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/io/SimpleSerialFileManagerFactory.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/security/AbstractSimpleHashTool.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/security/IHashTool.java (100%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/security/MD5HashTool.java (59%) rename Workspace/server/src/main/{WEB-INF/classes => java}/com/pqt/server/tools/security/SHA256HashTool.java (100%) diff --git a/Workspace/server/server.iml b/Workspace/server/server.iml index 9e96cbf1..a82b0167 100644 --- a/Workspace/server/server.iml +++ b/Workspace/server/server.iml @@ -25,14 +25,6 @@ - - - - - - - - diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/IMessageHandler.java b/Workspace/server/src/main/java/com/pqt/server/controller/IMessageHandler.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/IMessageHandler.java rename to Workspace/server/src/main/java/com/pqt/server/controller/IMessageHandler.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java b/Workspace/server/src/main/java/com/pqt/server/controller/SimpleMessageHandler.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java rename to Workspace/server/src/main/java/com/pqt/server/controller/SimpleMessageHandler.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/exception/ServerQueryException.java b/Workspace/server/src/main/java/com/pqt/server/exception/ServerQueryException.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/exception/ServerQueryException.java rename to Workspace/server/src/main/java/com/pqt/server/exception/ServerQueryException.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountEntry.java b/Workspace/server/src/main/java/com/pqt/server/module/account/AccountEntry.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountEntry.java rename to Workspace/server/src/main/java/com/pqt/server/module/account/AccountEntry.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java b/Workspace/server/src/main/java/com/pqt/server/module/account/AccountService.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java rename to Workspace/server/src/main/java/com/pqt/server/module/account/AccountService.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java b/Workspace/server/src/main/java/com/pqt/server/module/account/FileAccountDao.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/FileAccountDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/account/FileAccountDao.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java b/Workspace/server/src/main/java/com/pqt/server/module/account/IAccountDao.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/account/IAccountDao.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java b/Workspace/server/src/main/java/com/pqt/server/module/client/ClientEntry.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java rename to Workspace/server/src/main/java/com/pqt/server/module/client/ClientEntry.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java b/Workspace/server/src/main/java/com/pqt/server/module/client/ClientService.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java rename to Workspace/server/src/main/java/com/pqt/server/module/client/ClientService.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/ISaleDao.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/ISaleDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/ISaleDao.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/NoRevertFileSaleDao.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/NoRevertFileSaleDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/NoRevertFileSaleDao.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/SaleService.java similarity index 98% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/SaleService.java index 54b31fc3..6364ce68 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/SaleService.java +++ b/Workspace/server/src/main/java/com/pqt/server/module/sale/SaleService.java @@ -1,7 +1,6 @@ package com.pqt.server.module.sale; import com.pqt.core.entities.sale.Sale; -import com.pqt.server.exception.ServerQueryException; import com.pqt.server.module.sale.listeners.ISaleFirerer; import com.pqt.server.module.sale.listeners.ISaleListener; import com.pqt.server.module.sale.listeners.SimpleSaleFirerer; diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/ISaleFirerer.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/ISaleFirerer.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/ISaleFirerer.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/ISaleFirerer.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/ISaleListener.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/ISaleListener.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/ISaleListener.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/ISaleListener.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/SaleListenerAdapter.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/SaleListenerAdapter.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/SaleListenerAdapter.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/SaleListenerAdapter.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/SimpleSaleFirerer.java b/Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/SimpleSaleFirerer.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/sale/listeners/SimpleSaleFirerer.java rename to Workspace/server/src/main/java/com/pqt/server/module/sale/listeners/SimpleSaleFirerer.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/state/ServerState.java b/Workspace/server/src/main/java/com/pqt/server/module/state/ServerState.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/state/ServerState.java rename to Workspace/server/src/main/java/com/pqt/server/module/state/ServerState.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/state/ServerStateService.java b/Workspace/server/src/main/java/com/pqt/server/module/state/ServerStateService.java similarity index 98% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/state/ServerStateService.java rename to Workspace/server/src/main/java/com/pqt/server/module/state/ServerStateService.java index 107394e6..7ed4aea6 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/state/ServerStateService.java +++ b/Workspace/server/src/main/java/com/pqt/server/module/state/ServerStateService.java @@ -4,8 +4,6 @@ import com.pqt.core.entities.members.DataServer; import com.pqt.core.entities.server_config.ConfigFields; import com.pqt.core.entities.server_config.ServerConfig; -import java.util.Date; - /** * Cette classe correspond au service interne du serveur, chargé de conserver les données propres au serveur, comme * son adresse IP ou encore les différents aspects de la configuration actuelle. Il permet également de récupérer un diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/statistics/StatisticsService.java b/Workspace/server/src/main/java/com/pqt/server/module/statistics/StatisticsService.java similarity index 96% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/statistics/StatisticsService.java rename to Workspace/server/src/main/java/com/pqt/server/module/statistics/StatisticsService.java index 8d925c90..b4865c05 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/statistics/StatisticsService.java +++ b/Workspace/server/src/main/java/com/pqt/server/module/statistics/StatisticsService.java @@ -3,12 +3,10 @@ package com.pqt.server.module.statistics; import com.pqt.core.entities.product.LightweightProduct; import com.pqt.core.entities.product.Product; import com.pqt.core.entities.sale.Sale; -import com.pqt.server.module.sale.listeners.ISaleListener; import com.pqt.server.module.sale.listeners.SaleListenerAdapter; import com.pqt.server.module.stock.StockService; import com.pqt.server.module.sale.SaleService; -import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/FileStockDao.java b/Workspace/server/src/main/java/com/pqt/server/module/stock/FileStockDao.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/FileStockDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/stock/FileStockDao.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/IStockDao.java b/Workspace/server/src/main/java/com/pqt/server/module/stock/IStockDao.java similarity index 99% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/IStockDao.java rename to Workspace/server/src/main/java/com/pqt/server/module/stock/IStockDao.java index 1eff2683..c6ec0b07 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/IStockDao.java +++ b/Workspace/server/src/main/java/com/pqt/server/module/stock/IStockDao.java @@ -4,7 +4,6 @@ import com.pqt.core.entities.product.Product; import com.pqt.server.tools.entities.SaleContent; import java.util.List; -import java.util.Map; /** * Interface définissant les méthodes requises pour tout DAO du service de gestion des commandes {@link StockService}. diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java b/Workspace/server/src/main/java/com/pqt/server/module/stock/StockService.java similarity index 98% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java rename to Workspace/server/src/main/java/com/pqt/server/module/stock/StockService.java index fe184569..13e3fef3 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java +++ b/Workspace/server/src/main/java/com/pqt/server/module/stock/StockService.java @@ -6,7 +6,6 @@ import com.pqt.server.exception.ServerQueryException; import com.pqt.server.tools.entities.SaleContent; import java.util.List; -import java.util.Map; //TODO ajouter logs diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/servlets/QueryServlet.java b/Workspace/server/src/main/java/com/pqt/server/servlets/QueryServlet.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/servlets/QueryServlet.java rename to Workspace/server/src/main/java/com/pqt/server/servlets/QueryServlet.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java b/Workspace/server/src/main/java/com/pqt/server/tools/FileUtil.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/FileUtil.java rename to Workspace/server/src/main/java/com/pqt/server/tools/FileUtil.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/entities/SaleContent.java b/Workspace/server/src/main/java/com/pqt/server/tools/entities/SaleContent.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/entities/SaleContent.java rename to Workspace/server/src/main/java/com/pqt/server/tools/entities/SaleContent.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/ISerialFileManager.java b/Workspace/server/src/main/java/com/pqt/server/tools/io/ISerialFileManager.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/ISerialFileManager.java rename to Workspace/server/src/main/java/com/pqt/server/tools/io/ISerialFileManager.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/SimpleSerialFileManager.java b/Workspace/server/src/main/java/com/pqt/server/tools/io/SimpleSerialFileManager.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/SimpleSerialFileManager.java rename to Workspace/server/src/main/java/com/pqt/server/tools/io/SimpleSerialFileManager.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/SimpleSerialFileManagerFactory.java b/Workspace/server/src/main/java/com/pqt/server/tools/io/SimpleSerialFileManagerFactory.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/io/SimpleSerialFileManagerFactory.java rename to Workspace/server/src/main/java/com/pqt/server/tools/io/SimpleSerialFileManagerFactory.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java b/Workspace/server/src/main/java/com/pqt/server/tools/security/AbstractSimpleHashTool.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/AbstractSimpleHashTool.java rename to Workspace/server/src/main/java/com/pqt/server/tools/security/AbstractSimpleHashTool.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java b/Workspace/server/src/main/java/com/pqt/server/tools/security/IHashTool.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/IHashTool.java rename to Workspace/server/src/main/java/com/pqt/server/tools/security/IHashTool.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java b/Workspace/server/src/main/java/com/pqt/server/tools/security/MD5HashTool.java similarity index 59% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java rename to Workspace/server/src/main/java/com/pqt/server/tools/security/MD5HashTool.java index b3b34da9..3d7c711e 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/MD5HashTool.java +++ b/Workspace/server/src/main/java/com/pqt/server/tools/security/MD5HashTool.java @@ -1,9 +1,5 @@ package com.pqt.server.tools.security; -import java.math.BigInteger; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - public class MD5HashTool extends AbstractSimpleHashTool{ public MD5HashTool() { setInstanceCode("MD5"); diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java b/Workspace/server/src/main/java/com/pqt/server/tools/security/SHA256HashTool.java similarity index 100% rename from Workspace/server/src/main/WEB-INF/classes/com/pqt/server/tools/security/SHA256HashTool.java rename to Workspace/server/src/main/java/com/pqt/server/tools/security/SHA256HashTool.java From aaa0cac636869ceaf8e96f08ecac1d0d51e2983f Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 22:21:38 +0200 Subject: [PATCH 17/18] Module Client : ajout d'un affichage d'erreur minimaliste dans la startup frame --- .../gui/ressources/strings/GUIStringTool.java | 13 +++++++++++++ .../startup_frame/StartupFrameController.java | 19 +++++++++++-------- .../gui/startup_frame/StartupFrameView.java | 13 ++++++++++++- .../client/src/main/resources/nightmode.css | 9 ++++++--- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java index 698af73f..25945093 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/ressources/strings/GUIStringTool.java @@ -340,6 +340,10 @@ public class GUIStringTool { return "Compte"; } + public static String getErrorConsoleSectionTitleLabel() { + return "Informations"; + } + public static String getServerHostLabel() { return "Host : "; } @@ -347,6 +351,15 @@ public class GUIStringTool { public static String getServerPortLabel() { return "Port : "; } + + public static IObjectStringRenderer getExceptionFormatter() { + return e->{ + if(e.getMessage()==null || e.getMessage().isEmpty()) + return String.format("%s", e.getClass().getName()); + else + return String.format("%s : %s", e.getClass().getName(), e.getMessage()); + }; + } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java index 346335d4..f9bb07d1 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameController.java @@ -1,5 +1,6 @@ package com.pqt.client.gui.startup_frame; +import com.pqt.client.gui.ressources.strings.GUIStringTool; import com.pqt.client.gui.startup_frame.listeners.frame.IStartupFrameModelListener; public class StartupFrameController implements IStartupFrameModelListener { @@ -27,14 +28,16 @@ public class StartupFrameController implements IStartupFrameModelListener { public void onValidation() { if(!model.isStartupProcessRunning()){ - //TODO catch following exceptions and update GUI when needed : - //NullPointerException && IllegalArgumentException - model.beginStartupProcess( - view.getServerHostTextFieldContent(), - view.getServerPortTextFieldContent(), - view.getAccountUsernameTextFieldContent(), - view.getAccountPasswordTextFieldContent() - ); + try { + model.beginStartupProcess( + view.getServerHostTextFieldContent(), + view.getServerPortTextFieldContent(), + view.getAccountUsernameTextFieldContent(), + view.getAccountPasswordTextFieldContent() + ); + }catch(NullPointerException | IllegalArgumentException e){ + view.displayError(GUIStringTool.getExceptionFormatter().render(e)); + } } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java index b2d03caa..f617423c 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameView.java @@ -4,6 +4,7 @@ import com.pqt.client.gui.ressources.components.generics.IFXComponent; import com.pqt.client.gui.ressources.strings.GUIStringTool; import javafx.scene.control.*; import javafx.scene.layout.*; +import javafx.scene.text.Text; public class StartupFrameView implements IFXComponent{ @@ -16,6 +17,7 @@ public class StartupFrameView implements IFXComponent{ private TextField passwordTextField; private Button validationButton; + private Text infoText; public StartupFrameView(StartupFrameController ctrl) { this.ctrl = ctrl; @@ -58,7 +60,12 @@ public class StartupFrameView implements IFXComponent{ ctrl.onValidation(); }); - mainPane.getChildren().addAll(serverTitledPane, accountTitledPane, validationButton); + infoText = new Text(""); + infoText.getStyleClass().add("text-displayer"); + TitledPane errorConsoleTitledPane = new TitledPane(GUIStringTool.getErrorConsoleSectionTitleLabel(), infoText); + infoText.textProperty().addListener((obs, oldValue, newValue)->errorConsoleTitledPane.setExpanded(true)); + + mainPane.getChildren().addAll(serverTitledPane, accountTitledPane, errorConsoleTitledPane, validationButton); }catch(Exception e){ //TODO Shutdown software on exception e.printStackTrace(); @@ -101,4 +108,8 @@ public class StartupFrameView implements IFXComponent{ public void clearPasswordField() { passwordTextField.setText(""); } + + public void displayError(String errorMsg) { + infoText.setText(errorMsg); + } } diff --git a/Workspace/client/src/main/resources/nightmode.css b/Workspace/client/src/main/resources/nightmode.css index 080c1589..a4bf07ec 100644 --- a/Workspace/client/src/main/resources/nightmode.css +++ b/Workspace/client/src/main/resources/nightmode.css @@ -122,13 +122,16 @@ } .titled-pane, .titled-pane > .title, .titled-pane > *.content, .text-field, -.password-field, .choice-box, .text-area, .combo-box, .button, .label { - -fx-font-size: 12pt; - -fx-font-family: "Segoe UI Semibold"; +.password-field, .choice-box, .text-area, .combo-box, .button, .label, .text-displayer { + -fx-font: 12pt "Segoe UI Semibold"; -fx-background-color: #1d1d1d; -fx-text-fill: #d8d8d8; } +.text-displayer { + -fx-fill: #d8d8d8; +} + .titled-pane, .titled-pane > .title, .titled-pane > *.content { -fx-border-width: 0; } From 14010eb47111e8374eee5590c8494c64aa46edc1 Mon Sep 17 00:00:00 2001 From: "Notmoo-PC\\Notmoo" Date: Thu, 26 Oct 2017 22:22:46 +0200 Subject: [PATCH 18/18] =?UTF-8?q?Module=20Client=20:=20R=C3=A9solutions=20?= =?UTF-8?q?de=20TODO;=20Ajout=20d'un=20TODO=20dans=20clss=20AccountService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/pqt/client/gui/main_frame/MainFrameModel.java | 4 ---- .../client/gui/modules/account_screen/AccountScreenModel.java | 2 -- .../com/pqt/client/gui/startup_frame/StartupFrameModel.java | 4 ---- .../java/com/pqt/client/module/account/AccountService.java | 1 + 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java index 4a0133a6..12a95bd7 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/main_frame/MainFrameModel.java @@ -41,11 +41,7 @@ class MainFrameModel { } void disconnectCurrentAccount() { - fireAccountDisconnectedEvent(); - //TODO uncomment code when test are to be done - /* accountService.logOutCurrentAccount(); - */ } void addListener(IMainFrameModelListener listener){ diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/AccountScreenModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/AccountScreenModel.java index a1a129a0..471b7506 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/AccountScreenModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/account_screen/AccountScreenModel.java @@ -37,8 +37,6 @@ class AccountScreenModel { } Collection getLevels() { - //TODO régler ça aussi - //return accountService.getAvailableLevels(); return EnumSet.allOf(AccountLevel.class); } } diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java index 998e931a..b02374db 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/startup_frame/StartupFrameModel.java @@ -31,9 +31,6 @@ public class StartupFrameModel { } public void beginStartupProcess(String requiredHost, String requiredPort, String username, String password) { - //TODO uncomment code when test are to be done - firerer.fireStartupValidated(); - /* if(!startupProcessBegan){ checkParameters(requiredHost, requiredPort, username, password); startupProcessBegan = true; @@ -65,7 +62,6 @@ public class StartupFrameModel { }) .handle(); } - */ } private void checkParameters(String host, String port, String username, String password) { diff --git a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java index 9c9c96bb..08c35435 100644 --- a/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java +++ b/Workspace/client/src/main/java/com/pqt/client/module/account/AccountService.java @@ -15,6 +15,7 @@ import java.util.List; //TODO écrire javadoc //TODO add log lines +//TODO supporter la modif de comptes public class AccountService { private QueryExecutor executor;