From d9462b4a13cc3254a572c7476356a98d3b2d41e4 Mon Sep 17 00:00:00 2001 From: Notmoo Date: Wed, 2 Aug 2017 17:32:07 +0200 Subject: [PATCH] =?UTF-8?q?Module=20Server,=20Service=20Client=20:=20rewor?= =?UTF-8?q?k=20contenu=20m=C3=A9thds=20clss=20ClientService,=20ajout=20cls?= =?UTF-8?q?s=20ClientEntry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pqt/server/module/client/ClientEntry.java | 58 +++++++++++++++ .../server/module/client/ClientService.java | 70 ++++++++++++++++--- 2 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java new file mode 100644 index 00000000..2f577782 --- /dev/null +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientEntry.java @@ -0,0 +1,58 @@ +package com.pqt.server.module.client; + +import com.pqt.core.entities.members.Client; + +import java.util.Date; + +public class ClientEntry { + private Client client; + private Date timestamp; + + public ClientEntry(Client client) { + this.client = client; + timestamp = new Date(); + } + + public ClientEntry(Client client, Date timestamp) { + this.client = client; + this.timestamp = timestamp; + } + + public Client getClient() { + return client; + } + + public void setClient(Client client) { + this.client = client; + } + + public Date getTimestamp() { + return timestamp; + } + + public void setTimestamp(Date timestamp) { + this.timestamp = timestamp; + } + + public boolean check(Client client){ + return this.client.equals(client); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ClientEntry that = (ClientEntry) o; + + if (client != null ? !client.equals(that.client) : that.client != null) return false; + return timestamp != null ? timestamp.equals(that.timestamp) : that.timestamp == null; + } + + @Override + public int hashCode() { + int result = client != null ? client.hashCode() : 0; + result = 31 * result + (timestamp != null ? timestamp.hashCode() : 0); + return result; + } +} diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java index 94665ef1..26a03396 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/client/ClientService.java @@ -4,34 +4,88 @@ import com.pqt.core.entities.members.Client; import java.util.Date; import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.stream.Collectors; -//TODO écrire javadoc //TODO ajouter logs + +/** + * Cette classe correspond au service de gestion des clients. + *

+ * Un client est une instance du logiciel de composition des commandes, ce dernier étant la principale entitée capable + * d'envoyer des requêtes aux serveurs de données. + *

+ * Ce service est censé permettre la tracabilité des clients se connectant au serveur, en gardant en cache tous les + * clients avec des horodateurs représentant la date et l'heure de la dernière requête reçue de chaque client. + */ public class ClientService { - private Set clientCache; + private Set clientCache; public ClientService(){ clientCache = new HashSet<>(); } + private ClientEntry lookupClientEntry(Client client){ + return clientCache.stream().filter(clientEntry -> clientEntry.check(client)).findFirst().orElse(null); + } + /** + * Vérifie si le client donné est connu. + * @param client client à vérifier + * @return {@code true} si le client donné correspond à une entrée du cache, {@code false} sinon. + */ public boolean isClientRegistered(Client client) { return clientCache.contains(client); } + /** + * Enregistre un client dans le cache du service. Si le client existe déjà dans la base, rafraichit l'horodateur + * associé. + * @param client client à enregistrer + */ public void registerClient(Client client) { - if(clientCache.contains(client)){ + if(lookupClientEntry(client)==null){ + clientCache.add(new ClientEntry(client)); + }else{ refreshClientTimestamp(client); - clientCache.add(client); } } - public Date getLastClientAction(Client client) { - return client.getLastUpdate(); + /** + * Etabit une correspondance entre {@code client} et une entrée du cache du service, et renvoie l'horodateur associé + * à la correspondance. Renvoie {@code null} si aucune correspondance n'a pû être faite. + * @param client données à utiliser pour établir la correspondance + * @return l'horodateur associé à la correspondance, ou {@code null} si aucune correspondance ne peut être faite. + */ + public Date getClientTimestamp(Client client) { + ClientEntry entry = lookupClientEntry(client); + return entry!=null? entry.getTimestamp() : null; } - public void refreshClientTimestamp(Client client) { - client.setLastUpdate(new Date()); + /** + * Récupère la liste des clients actuellement dans le cache du service + * @return Liste des clients dans le cache + */ + public List getClientList(){ + return clientCache.stream().map(ClientEntry::getClient).collect(Collectors.toList()); + } + + /** + * Vide le cache du service. + */ + public void clear(){ + clientCache.clear(); + } + + /** + * Met à jour l'horodateur associé au client donné. + * @param client données à utiliser pour établir la correspondance + */ + private void refreshClientTimestamp(Client client) { + ClientEntry entry = lookupClientEntry(client); + if(entry!=null){ + entry.setTimestamp(new Date()); + } } }