Initial commit : ajout des fichiers existants

This commit is contained in:
Notmoo-PC\Notmoo
2017-07-21 17:12:47 +02:00
parent 33cdbba13b
commit e1dd5d0b61
79 changed files with 3459 additions and 0 deletions

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core" />
</component>
</module>

22
Workspace/client/pom.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Main</artifactId>
<groupId>com.pqt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>client</artifactId>
<dependencies>
<dependency>
<groupId>com.pqt</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,45 @@
package com.pqt.client.module.account;
import com.pqt.core.entities.user_account.Account;
import com.pqt.client.module.account.listeners.IAccountListener;
import java.util.List;
//TODO écrire contenu méthodes
//TODO écrire javadoc
//TODO add log lines
public class AccountService {
public Account getCurrentAccount() {
return null;
}
public void setCurrentAccount(Account account) {
}
public boolean isAccountLoggedIn(Account account) {
return false;
}
public void logInCurrentAccount(String password) {
}
public void logOutCurrentAccount(String password) {
}
public List<Account> getRecentAccounts() {
return null;
}
public void addListener(IAccountListener listener) {
}
public void removeListener(IAccountListener listener) {
}
}

View File

@ -0,0 +1,15 @@
package com.pqt.client.module.account.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class AccountListenerAdapter implements IAccountListener {
/**
* @see com.pqt.client.module.account.listeners.IAccountListener#onAccountStatusChanged(boolean)
*/
public void onAccountStatusChanged(boolean status) {
}
}

View File

@ -0,0 +1,11 @@
package com.pqt.client.module.account.listeners;
public interface IAccountFirerer {
public void fireAccountStatusChanged(boolean status);
public abstract void addListener(IAccountListener listener);
public abstract void removeListener(IAccountListener listener);
}

View File

@ -0,0 +1,9 @@
package com.pqt.client.module.account.listeners;
import java.util.EventListener;
public interface IAccountListener extends EventListener {
public void onAccountStatusChanged(boolean status);
}

View File

@ -0,0 +1,31 @@
package com.pqt.client.module.account.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SimpleAccountFirerer implements IAccountFirerer {
/**
* @see com.pqt.client.module.account.listeners.IAccountFirerer#fireAccountStatusChanged(boolean)
*/
public void fireAccountStatusChanged(boolean status) {
}
/**
* @see com.pqt.client.module.account.listeners.IAccountFirerer#addListener(com.pqt.client.module.account.listeners.IAccountListener)
*/
public void addListener(IAccountListener listener) {
}
/**
* @see com.pqt.client.module.account.listeners.IAccountFirerer#removeListener(com.pqt.client.module.account.listeners.IAccountListener)
*/
public void removeListener(IAccountListener listener) {
}
}

View File

@ -0,0 +1,46 @@
package com.pqt.client.module.connection;
import com.pqt.client.module.connection.listeners.IConnectionListener;
//TODO écrire contenu méthodes
//TODO écrire javadoc
//TODO add log lines?
public class ConnectionService {
public boolean isConnectedToServer() {
return false;
}
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) {
}
}

View File

@ -0,0 +1,37 @@
package com.pqt.client.module.connection.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class ConnectionListenerAdapter implements IConnectionListener {
/**
* @see com.pqt.client.module.connection.listeners.IConnectionListener#onMessageReceivedEvent(String)
*
*
*/
public void onMessageReceivedEvent(String msg) {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionListener#onConnectedEvent()
*
*
*/
public void onConnectedEvent() {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionListener#onDisconnectedEvent()
*
*
*/
public void onDisconnectedEvent() {
}
}

View File

@ -0,0 +1,15 @@
package com.pqt.client.module.connection.listeners;
public interface IConnectionFirerer {
public abstract void fireMessageReceivedEvent(String msg);
public abstract void fireConnectedEvent();
public abstract void fireDisconnectedEvent();
public abstract void addListener(IConnectionListener listener);
public abstract void removeListener(IConnectionListener listener);
}

View File

@ -0,0 +1,13 @@
package com.pqt.client.module.connection.listeners;
import java.util.EventListener;
public interface IConnectionListener extends EventListener {
public abstract void onMessageReceivedEvent(String msg);
public abstract void onConnectedEvent();
public abstract void onDisconnectedEvent();
}

View File

@ -0,0 +1,49 @@
package com.pqt.client.module.connection.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SimpleConnectionFirerer implements IConnectionFirerer {
/**
* @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireMessageReceivedEvent(String)
*
*
*/
public void fireMessageReceivedEvent(String msg) {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireConnectedEvent()
*/
public void fireConnectedEvent() {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionFirerer#fireDisconnectedEvent()
*/
public void fireDisconnectedEvent() {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionFirerer#addListener(com.pqt.client.module.connection.listeners.IConnectionListener)
*/
public void addListener(IConnectionListener listener) {
}
/**
* @see com.pqt.client.module.connection.listeners.IConnectionFirerer#removeListener(com.pqt.client.module.connection.listeners.IConnectionListener)
*/
public void removeListener(IConnectionListener listener) {
}
}

View File

@ -0,0 +1,8 @@
package com.pqt.client.module.log;
import com.pqt.core.entities.log.LogLine;
import com.pqt.core.entities.log.ILoggable;
public interface ILogLineMaker {
LogLine make(ILoggable loggable);
}

View File

@ -0,0 +1,23 @@
package com.pqt.client.module.log;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class LogLineMakerManager {
public ILogLineMaker getMaker(Class clazz) {
return null;
}
public boolean setMaker(Class clazz, ILogLineMaker maker) {
return false;
}
public ILogLineMaker getDefaultMaker() {
return null;
}
public boolean setDefaultMaker(ILogLineMaker maker) {
return false;
}
}

View File

@ -0,0 +1,28 @@
package com.pqt.client.module.log;
import com.pqt.core.entities.log.ILoggable;
import com.pqt.core.entities.log.LogLine;
import java.util.List;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class LogService {
public void log(ILoggable loggable) {
}
public List<LogLine> getAllLogs() {
return null;
}
public List<LogLine> getLastLogs(int number) {
return null;
}
public List<LogLine> getLastLogs(int number, int offset) {
return null;
}
}

View File

@ -0,0 +1,11 @@
package com.pqt.client.module.log.listeners;
public interface ILogFirerer {
public abstract void addListener(ILogListener listener);
public abstract void removeListener(ILogListener listener);
public abstract void fireLogEvent();
}

View File

@ -0,0 +1,9 @@
package com.pqt.client.module.log.listeners;
import java.util.EventListener;
public interface ILogListener extends EventListener {
public abstract void onLogEvent();
}

View File

@ -0,0 +1,17 @@
package com.pqt.client.module.log.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class LogListenerAdapter implements ILogListener {
/**
* @see com.pqt.client.module.log.listeners.ILogListener#onLogEvent()
*
*
*/
public void onLogEvent() {
}
}

View File

@ -0,0 +1,33 @@
package com.pqt.client.module.log.listeners;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SimpleLogFirerer implements ILogFirerer {
/**
* @see com.pqt.client.module.log.listeners.ILogFirerer#addListener(com.pqt.client.module.log.listeners.ILogListener)
*/
public void addListener(ILogListener listener) {
}
/**
* @see com.pqt.client.module.log.listeners.ILogFirerer#removeListener(com.pqt.client.module.log.listeners.ILogListener)
*/
public void removeListener(ILogListener listener) {
}
/**
* @see com.pqt.client.module.log.listeners.ILogFirerer#fireLogEvent()
*
*
*/
public void fireLogEvent() {
}
}

View File

@ -0,0 +1,35 @@
package com.pqt.client.module.query;
import com.pqt.client.module.query.query_callback.IUpdateQueryCallback;
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;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class QueryExecutor {
public static final QueryExecutor INSTANCE = new QueryExecutor();
private QueryExecutor(){
}
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, IUpdateQueryCallback callback) {
return 0;
}
}

View File

@ -0,0 +1,38 @@
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<ProductUpdate> updates) {
return null;
}
}

View File

@ -0,0 +1,7 @@
package com.pqt.client.module.query.query_callback;
public interface ISimpleQueryCallback {
public void ack();
public void err(Throwable cause);
public void ref(Throwable cause);
}

View File

@ -0,0 +1,10 @@
package com.pqt.client.module.query.query_callback;
import java.util.Map;
public interface IStatQueryCallback {
public void ack(Map<String,String> stats);
public void err(Throwable cause);
public void ref(Throwable cause);
}

View File

@ -0,0 +1,11 @@
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<Product> products);
public void err(Throwable cause);
public void ref(Throwable cause);
}

View File

@ -0,0 +1,7 @@
package com.pqt.client.module.query.query_callback;
public interface IUpdateQueryCallback {
public void ack(long id);
public void err(long id, Throwable cause);
public void ref(long id, Throwable cause);
}

View File

@ -0,0 +1,28 @@
package com.pqt.client.module.sale;
import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.sale.Sale;
import java.util.Map;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SaleBuilder {
public boolean addProduct(Product product) {
return false;
}
public boolean removeProduct(Product product) {
return false;
}
public Map<Product,Integer> getCurrentProductList() {
return null;
}
public Sale build() {
return null;
}
}

View File

@ -0,0 +1,30 @@
package com.pqt.client.module.sale;
import com.pqt.client.module.sale.listeners.ISaleListener;
//TODO écrire contenu méthodes
//TODO écrire javadoc
//TODO add log lines
public class SaleService {
public void getNewSaleBuilder() {
}
public void commitSale(SaleBuilder saleBuilder) {
}
public void revertSale(int saleId) {
}
public void addListener(ISaleListener listener) {
}
public void removeListener(ISaleListener listener) {
}
}

View File

@ -0,0 +1,17 @@
package com.pqt.client.module.sale.listeners;
import com.pqt.core.entities.sale.Sale;
public interface ISaleFirerer {
public abstract void fireSaleValidationSuccess(Sale sale);
public abstract void fireSaleValidationError(Sale sale, Throwable cause);
public abstract void fireSaleValidationRefused(Sale sale, Throwable cause);
public abstract void addListener(ISaleListener listener);
public abstract void removeListener(ISaleListener listener);
}

View File

@ -0,0 +1,15 @@
package com.pqt.client.module.sale.listeners;
import com.pqt.core.entities.sale.Sale;
import java.util.EventListener;
public interface ISaleListener extends EventListener {
public abstract void onSaleValidationSuccess(Sale sale);
public abstract void onSaleValidationError(Sale sale, Throwable cause);
public abstract void onSaleValidationRefused(Sale sale, Throwable cause);
}

View File

@ -0,0 +1,35 @@
package com.pqt.client.module.sale.listeners;
import com.pqt.core.entities.sale.Sale;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SaleListenerAdapter implements ISaleListener {
/**
* @see com.pqt.client.module.sale.listeners.ISaleListener#onSaleValidationSuccess(com.pqt.core.entities.sale.Sale)
*
*
*/
public void onSaleValidationSuccess(Sale sale) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleListener#onSaleValidationError(com.pqt.core.entities.sale.Sale, Throwable)
*/
public void onSaleValidationError(Sale sale, Throwable cause) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleListener#onSaleValidationRefused(com.pqt.core.entities.sale.Sale, Throwable)
*/
public void onSaleValidationRefused(Sale sale, Throwable cause) {
}
}

View File

@ -0,0 +1,49 @@
package com.pqt.client.module.sale.listeners;
import com.pqt.core.entities.sale.Sale;
//TODO écrire contenu méthodes
//TODO écrire javadoc
public class SimpleSaleFirerer implements ISaleFirerer {
/**
* @see com.pqt.client.module.sale.listeners.ISaleFirerer#fireSaleValidationSuccess(com.pqt.core.entities.sale.Sale)
*/
public void fireSaleValidationSuccess(Sale sale) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleFirerer#fireSaleValidationError(com.pqt.core.entities.sale.Sale, Throwable)
*/
public void fireSaleValidationError(Sale sale, Throwable cause) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleFirerer#fireSaleValidationRefused(com.pqt.core.entities.sale.Sale, Throwable)
*/
public void fireSaleValidationRefused(Sale sale, Throwable cause) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleFirerer#addListener(com.pqt.client.module.sale.listeners.ISaleListener)
*/
public void addListener(ISaleListener listener) {
}
/**
* @see com.pqt.client.module.sale.listeners.ISaleFirerer#removeListener(com.pqt.client.module.sale.listeners.ISaleListener)
*/
public void removeListener(ISaleListener listener) {
}
}

View File

@ -0,0 +1,68 @@
package com.pqt.client.module.stat;
import com.pqt.client.module.query.QueryExecutor;
import com.pqt.client.module.query.QueryFactory;
import com.pqt.client.module.query.query_callback.IStatQueryCallback;
import com.pqt.client.module.stat.listeners.IStatFirerer;
import com.pqt.client.module.stat.listeners.IStatListener;
import com.pqt.client.module.stat.listeners.SimpleStatFirerer;
import java.util.*;
//TODO écrire javadoc
public class StatDao {
private Date lastRefreshTimestamp;
private Map<String, String> stats;
private IStatFirerer eventFirerer;
public StatDao() {
eventFirerer = new SimpleStatFirerer();
stats = new HashMap<>();
lastRefreshTimestamp = null;
}
public synchronized Map<String, String> getStats() {
return new HashMap<>(stats);
}
public void refreshStats() {
QueryExecutor.INSTANCE.execute(QueryFactory.newStockQuery(), new IStatQueryCallback() {
@Override
public void ack(Map<String, String> stats) {
replaceStats(stats);
eventFirerer.fireGetStatSuccess();
//TODO add log line
}
@Override
public void err(Throwable cause) {
eventFirerer.fireGetStatError(cause);
//TODO add log line
}
@Override
public void ref(Throwable cause) {
eventFirerer.fireGetStatRefused(cause);
//TODO add log line
}
});
}
public Date getLastRefreshTimestamp(){
return lastRefreshTimestamp;
}
private synchronized void replaceStats(Map<String, String> stats) {
this.stats = new HashMap<>(stats);
this.lastRefreshTimestamp = new Date();
}
public void removeListener(IStatListener listener) {
eventFirerer.removeListener(listener);
}
public void addListener(IStatListener listener) {
eventFirerer.addListener(listener);
}
}

View File

@ -0,0 +1,33 @@
package com.pqt.client.module.stat;
import com.pqt.client.module.stat.listeners.IStatListener;
import java.util.Map;
//TODO écrire javadoc
//TODO add log lines
public class StatService {
private StatDao dao;
public StatService() {
dao = new StatDao();
}
public Map<String,String> getStats() {
return dao.getStats();
}
public void refreshStats() {
dao.refreshStats();
}
public void addListener(IStatListener listener) {
dao.addListener(listener);
}
public void removeListener(IStatListener listener) {
dao.removeListener(listener);
}
}

View File

@ -0,0 +1,16 @@
package com.pqt.client.module.stat.listeners;
import java.util.Map;
public interface IStatFirerer {
public abstract void fireGetStatSuccess();
public abstract void fireGetStatError(Throwable cause);
public abstract void fireGetStatRefused(Throwable cause);
void removeListener(IStatListener listener);
void addListener(IStatListener listener);
}

View File

@ -0,0 +1,14 @@
package com.pqt.client.module.stat.listeners;
import java.util.EventListener;
import java.util.Map;
public interface IStatListener extends EventListener {
public abstract void onGetStatSuccess();
public abstract void onGetStatError(Throwable cause);
public abstract void onGetStatRefused(Throwable cause);
}

View File

@ -0,0 +1,53 @@
package com.pqt.client.module.stat.listeners;
import javax.swing.event.EventListenerList;
//TODO écrire javadoc
public class SimpleStatFirerer implements IStatFirerer {
private EventListenerList listeners;
public SimpleStatFirerer() {
listeners = new EventListenerList();
}
/**
* @see com.pqt.client.module.stat.listeners.IStatFirerer#fireGetStatSuccess()
*/
public void fireGetStatSuccess() {
for(IStatListener l : listeners.getListeners(IStatListener.class)){
l.onGetStatSuccess();
}
}
/**
* @see com.pqt.client.module.stat.listeners.IStatFirerer#fireGetStatError(Throwable)
*/
public void fireGetStatError(Throwable cause) {
for(IStatListener l : listeners.getListeners(IStatListener.class)){
l.onGetStatError(cause);
}
}
/**
* @see com.pqt.client.module.stat.listeners.IStatFirerer#fireGetStatRefused(Throwable)
*/
public void fireGetStatRefused(Throwable cause) {
for(IStatListener l : listeners.getListeners(IStatListener.class)){
l.onGetStatRefused(cause);
}
}
@Override
public void removeListener(IStatListener listener) {
listeners.remove(IStatListener.class, listener);
}
@Override
public void addListener(IStatListener listener) {
listeners.add(IStatListener.class, listener);
}
}

View File

@ -0,0 +1,29 @@
package com.pqt.client.module.stat.listeners;
public class StatListenerAdapter implements IStatListener {
/**
* @see com.pqt.client.module.stat.listeners.IStatListener#onGetStatSuccess()
*/
public void onGetStatSuccess() {
}
/**
* @see com.pqt.client.module.stat.listeners.IStatListener#onGetStatError(Throwable)
*/
public void onGetStatError(Throwable cause) {
}
/**
* @see com.pqt.client.module.stat.listeners.IStatListener#onGetStatRefused(Throwable)
*/
public void onGetStatRefused(Throwable cause) {
}
}

View File

@ -0,0 +1,16 @@
package com.pqt.client.module.stock.Listeners;
public interface IStockFirerer {
void fireGetProductListSuccessEvent();
void fireGetProductListErrorEvent(Throwable cause);
void fireGetProductListRefusedEvent(Throwable cause);
void fireProductListChangedEvent();
void fireProductListUpdateSuccessEvent(long id);
void fireProductListUpdateErrorEvent(long id, Throwable cause);
void fireProductListUpdateRefusedEvent(long id, Throwable cause);
void addListener(IStockListener listener);
void removeListener(IStockListener listener);
}

View File

@ -0,0 +1,16 @@
package com.pqt.client.module.stock.Listeners;
import java.util.EventListener;
public interface IStockListener extends EventListener {
void onGetProductListSuccessEvent();
void onGetProductListErrorEvent(Throwable cause);
void onGetProductListRefusedEvent(Throwable cause);
void onProductListUpdateSuccessEvent(long id);
void onProductListUpdateErrorEvent(long id, Throwable cause);
void onProductListUpdateRefusedEvent(long id, Throwable cause);
void onProductListChangedEvent();
}

View File

@ -0,0 +1,73 @@
package com.pqt.client.module.stock.Listeners;
import javax.swing.event.EventListenerList;
//TODO écrire javadoc
public class SimpleStockFirerer implements IStockFirerer {
private EventListenerList listeners;
public SimpleStockFirerer() {
listeners = new EventListenerList();
}
@Override
public void fireGetProductListSuccessEvent() {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onGetProductListSuccessEvent();
}
}
@Override
public void fireGetProductListErrorEvent(Throwable cause) {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onGetProductListErrorEvent(cause);
}
}
@Override
public void fireGetProductListRefusedEvent(Throwable cause) {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onGetProductListRefusedEvent(cause);
}
}
@Override
public void fireProductListChangedEvent() {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onProductListChangedEvent();
}
}
@Override
public void fireProductListUpdateSuccessEvent(long id) {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onProductListUpdateSuccessEvent(id);
}
}
@Override
public void fireProductListUpdateErrorEvent(long id, Throwable cause) {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onProductListUpdateErrorEvent(id, cause);
}
}
@Override
public void fireProductListUpdateRefusedEvent(long id, Throwable cause) {
for(IStockListener l : listeners.getListeners(IStockListener.class)){
l.onProductListUpdateRefusedEvent(id, cause);
}
}
@Override
public void addListener(IStockListener listener) {
listeners.add(IStockListener.class, listener);
}
@Override
public void removeListener(IStockListener listener) {
listeners.remove(IStockListener.class, listener);
}
}

View File

@ -0,0 +1,39 @@
package com.pqt.client.module.stock.Listeners;
public class StockListenerAdapter implements IStockListener {
@Override
public void onGetProductListSuccessEvent() {
}
@Override
public void onGetProductListErrorEvent(Throwable cause) {
}
@Override
public void onGetProductListRefusedEvent(Throwable cause) {
}
@Override
public void onProductListUpdateSuccessEvent(long id) {
}
@Override
public void onProductListUpdateErrorEvent(long id, Throwable cause) {
}
@Override
public void onProductListUpdateRefusedEvent(long id, Throwable cause) {
}
@Override
public void onProductListChangedEvent() {
}
}

View File

@ -0,0 +1,118 @@
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.IUpdateQueryCallback;
import com.pqt.client.module.stock.Listeners.IStockFirerer;
import com.pqt.client.module.stock.Listeners.IStockListener;
import com.pqt.client.module.stock.Listeners.SimpleStockFirerer;
import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.product.ProductUpdate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
//TODO écrire javadoc
public class StockDao {
private IStockFirerer eventFirerer;
private Date lastRefreshTimestamp;
private List<Product> products;
public StockDao() {
eventFirerer = new SimpleStockFirerer();
products = new ArrayList<>();
lastRefreshTimestamp = null;
}
public synchronized List<Product> getProducts() {
return new ArrayList<>(products);
}
public synchronized Product getProduct(final int id) {
Optional<Product> match = products.stream().filter((product->product.getId()==id)).findFirst();
if(match.isPresent())
return match.get();
return null;
}
public void refreshProductList() {
QueryExecutor.INSTANCE.execute(QueryFactory.newStockQuery(), new IStockQueryCallback() {
@Override
public void ack(List<Product> products) {
replaceProductList(products);
eventFirerer.fireGetProductListSuccessEvent();
//TODO add log line
}
@Override
public void err(Throwable cause) {
//TODO add log line
eventFirerer.fireGetProductListErrorEvent(cause);
}
@Override
public void ref(Throwable cause) {
//TODO add log line
eventFirerer.fireGetProductListRefusedEvent(cause);
}
});
}
public Date getLastRefreshTimestamp(){
return lastRefreshTimestamp;
}
private synchronized void replaceProductList(List<Product> products){
this.products.clear();
this.products.addAll(products);
this.lastRefreshTimestamp = new Date();
eventFirerer.fireProductListChangedEvent();
}
public long commitUpdate(List<ProductUpdate> updates){
return QueryExecutor.INSTANCE.execute(QueryFactory.newUpdateQuery(updates),new IUpdateQueryCallback(){
@Override
public void ack(long id) {
//TODO add log line
refreshProductList();
eventFirerer.fireProductListUpdateSuccessEvent(id);
}
@Override
public void err(long id, Throwable cause) {
//TODO add log line
eventFirerer.fireProductListUpdateErrorEvent(id, cause);
}
@Override
public void ref(long id, Throwable cause) {
//TODO add log line
eventFirerer.fireProductListUpdateRefusedEvent(id, cause);
}
});
}
/**
* Ajoute un listener à la liste de diffusion des événements pouvant être levé par le service.
* @param listener
* @see {@link IStockListener}
*/
public void addListener(IStockListener listener) {
eventFirerer.addListener(listener);
}
/**
* Retire un listener d'événement donné de la liste de diffusion des événements.
* @param listener
* @see {@link IStockListener}
*/
public void removeListener(IStockListener listener) {
eventFirerer.removeListener(listener);
}
}

View File

@ -0,0 +1,109 @@
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.IUpdateQueryCallback;
import com.pqt.client.module.stock.Listeners.IStockFirerer;
import com.pqt.client.module.stock.Listeners.SimpleStockFirerer;
import com.pqt.core.entities.product.Product;
import com.pqt.client.module.stock.Listeners.IStockListener;
import java.util.Date;
import java.util.List;
//TODO Add log lines
public class StockService {
public static final StockService INSTANCE = new StockService();
private StockDao dao;
private StockService() {
dao = new StockDao();
}
/**
* Accesseur renvoyant un objet {@link Date} correspondant à la dernière heure où les stocks ont été mis à jour
* <p/>
* @return {@link Date} représentant l'instant de la dernière mise à jour des stocks.
*/
public Date getLastRefreshTimestamp(){
return dao.getLastRefreshTimestamp();
}
/**
* Démarre la procédure de mise à jour des stocks.
* <p/>
* L'exécution de cette méthode ne constitue pas la mise à jour, elle ne fait que démarrer la procédure.
* Les événements liées à la mise à jour du stock peuvent être écoutés via la classe de listener {@link IStockListener}.
*/
public void refreshProductList() {
dao.refreshProductList();
}
/**
* Accesseur de la liste des produits actuellement en vente.
* <p/>
* La liste peut être obsolète, voir {@link #getLastRefreshTimestamp()} pour la date du dernier refresh et {@link #refreshProductList()} pour la mettre à jour.
*
* @return Liste des produits en vente.
*/
public List<Product> getProducts() {
return dao.getProducts();
}
/**
* Accesseur récupérant un unique produit présent dans les stocks en se basant sur son id.
*
* @param id identifiant du produit voulu
* @return produit voulu s'il est présent dans le stock, ou null si l'identifiant {@code id} ne correspond à aucun produit présent dans le stock.
*/
public Product getProduct(int id) {
return dao.getProduct(id);
}
/**
* Renvoie un nouveau builder d'update de stock.
* <p/>
* Un update de stock correspond à un ticket de demande de modification du stock, composé d'ajouts, de suppressions et de modifications de produits.
* Un objet {@link UpdateBuilder} permet de générer facilement une update. Pour valider l'update, voir {@link #commitUpdate(UpdateBuilder)}.
*
* @return nouvelle instance de la classe {@link UpdateBuilder}.
*/
public UpdateBuilder getNewUpdateBuilder() {
return new UpdateBuilder();
}
/**
* Propose une modification de stock et lance la procédure de validation. Retourne l'identifiant de la modification, qui sera utilisé dans les notifications pour discriminer les événements.
* <p/>
* L'exécution de cette méthode ne constitue pas la modification, elle ne fait que démarrer la procédure.
* Les événements liées à la valiation des updates du stock peuvent être écoutés via la classe de listener {@link IStockListener}.
* <p/>
* Une procédure de mise à jour du stock sera automatiquement lancée si la modification est validée (comme si la méthode {@link #refreshProductList()} avait été appelée).
* @param updateBuilder
* @return l'identifiant de l'update soumise.
*/
public long commitUpdate(UpdateBuilder updateBuilder) {
return dao.commitUpdate(updateBuilder.build());
}
/**
* Ajoute un listener à la liste de diffusion des événements pouvant être levé par le service.
* @param listener
* @see {@link IStockListener}
*/
public void addListener(IStockListener listener) {
dao.addListener(listener);
}
/**
* Retire un listener d'événement donné de la liste de diffusion des événements.
* @param listener
* @see {@link IStockListener}
*/
public void removeListener(IStockListener listener) {
dao.removeListener(listener);
}
}

View File

@ -0,0 +1,50 @@
package com.pqt.client.module.stock;
import com.pqt.core.entities.product.Product;
import com.pqt.core.entities.product.ProductUpdate;
import java.util.*;
public class UpdateBuilder {
private Set<Product> toAdd, toRemove;
private Map<Product, Product> toModify;
public UpdateBuilder() {
toAdd = new HashSet<>();
toRemove = new HashSet<>();
toModify = new HashMap<>();
}
public void addProduct(Product product) {
if(!toAdd.contains(product)){
toAdd.add(product);
}
}
public void removeProduct(Product product) {
if(toRemove.contains(product)){
toRemove.remove(product);
}
}
public void modifyProduct(Product oldVersion, Product newVersion) {
toModify.put(oldVersion, newVersion);
}
public List<ProductUpdate> build() {
List<ProductUpdate> reply = new ArrayList<>();
for(Product product : toAdd){
reply.add(new ProductUpdate(null, product));
}
for(Product product : toRemove){
reply.add(new ProductUpdate(product, null));
}
for(Product product : toModify.keySet()){
reply.add(new ProductUpdate(product, toModify.get(product)));
}
return reply;
}
}