mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-11-22 08:13:20 +00:00
Module Client, écran StartupFrame : ajout GUI + portion du code métier
This commit is contained in:
parent
20ac907c73
commit
0ed6d78cac
@ -331,6 +331,22 @@ public class GUIStringTool {
|
|||||||
public static String getAccountLevelColumnHeaderLabel() {
|
public static String getAccountLevelColumnHeaderLabel() {
|
||||||
return "Niveau d'accréditation";
|
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 : ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ public class StartupFrame implements IFXComponent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pane getMainPane() {
|
public Pane getPane() {
|
||||||
return view.getMainPane();
|
return view.getPane();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,4 +18,17 @@ public class StartupFrameController implements IStartupFrameModelListener {
|
|||||||
public void updateView() {
|
public void updateView() {
|
||||||
//TODO écrire corps méthd StartupFrameController.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()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,10 @@ package com.pqt.client.gui.startup_frame;
|
|||||||
|
|
||||||
import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener;
|
import com.pqt.client.gui.startup_frame.listeners.IStartupFrameModelListener;
|
||||||
import com.pqt.client.module.account.AccountService;
|
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.NetworkService;
|
||||||
|
import com.pqt.client.module.network.listeners.INetworkServiceListener;
|
||||||
|
|
||||||
import javax.swing.event.EventListenerList;
|
import javax.swing.event.EventListenerList;
|
||||||
|
|
||||||
@ -12,13 +15,44 @@ public class StartupFrameModel {
|
|||||||
private final NetworkService networkService;
|
private final NetworkService networkService;
|
||||||
private final EventListenerList listenerList;
|
private final EventListenerList listenerList;
|
||||||
|
|
||||||
|
private boolean startupProcessBegan;
|
||||||
|
|
||||||
public StartupFrameModel(AccountService accountService, NetworkService networkService) {
|
public StartupFrameModel(AccountService accountService, NetworkService networkService) {
|
||||||
this.accountService = accountService;
|
this.accountService = accountService;
|
||||||
this.networkService = networkService;
|
this.networkService = networkService;
|
||||||
this.listenerList = new EventListenerList();
|
this.listenerList = new EventListenerList();
|
||||||
|
startupProcessBegan = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addListener(IStartupFrameModelListener ctrl) {
|
public void addListener(IStartupFrameModelListener ctrl) {
|
||||||
listenerList.add(IStartupFrameModelListener.class, 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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,81 @@
|
|||||||
package com.pqt.client.gui.startup_frame;
|
package com.pqt.client.gui.startup_frame;
|
||||||
|
|
||||||
import com.pqt.client.gui.ressources.components.generics.IFXComponent;
|
import com.pqt.client.gui.ressources.components.generics.IFXComponent;
|
||||||
import javafx.scene.layout.BorderPane;
|
import com.pqt.client.gui.ressources.strings.GUIStringTool;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.layout.*;
|
||||||
|
|
||||||
public class StartupFrameView implements IFXComponent{
|
public class StartupFrameView implements IFXComponent{
|
||||||
|
|
||||||
private BorderPane mainPane;
|
private VBox mainPane;
|
||||||
private final StartupFrameController ctrl;
|
private final StartupFrameController ctrl;
|
||||||
|
|
||||||
|
private TextField serverHostTextField;
|
||||||
|
private TextField serverPortTextField;
|
||||||
|
private TextField usernameTextField;
|
||||||
|
private TextField passwordTextField;
|
||||||
|
|
||||||
public StartupFrameView(StartupFrameController ctrl) {
|
public StartupFrameView(StartupFrameController ctrl) {
|
||||||
this.ctrl = ctrl;
|
this.ctrl = ctrl;
|
||||||
initGui();
|
initGui();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGui() {
|
private void initGui() {
|
||||||
mainPane = new BorderPane();
|
mainPane = new VBox();
|
||||||
//TODO ajouter GUI StartupFrameView
|
|
||||||
|
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
|
@Override
|
||||||
public Pane getMainPane() {
|
public Pane getPane() {
|
||||||
return mainPane;
|
return mainPane;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -27,7 +27,6 @@ public class AccountService {
|
|||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
listenerList = new EventListenerList();
|
listenerList = new EventListenerList();
|
||||||
accounts = new ArrayList<>();
|
accounts = new ArrayList<>();
|
||||||
refreshAccounts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Account getCurrentAccount() {
|
public Account getCurrentAccount() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.pqt.client.module.network;
|
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.network.listeners.INetworkServiceListener;
|
||||||
import com.pqt.client.module.query.QueryExecutor;
|
import com.pqt.client.module.query.QueryExecutor;
|
||||||
import com.pqt.client.module.query.query_callback.IMapItemMessageCallback;
|
import com.pqt.client.module.query.query_callback.IMapItemMessageCallback;
|
||||||
@ -18,11 +19,13 @@ import java.util.*;
|
|||||||
public class NetworkService {
|
public class NetworkService {
|
||||||
|
|
||||||
private final QueryExecutor queryExecutor;
|
private final QueryExecutor queryExecutor;
|
||||||
|
private final ConnectionService connectionService;
|
||||||
private final EventListenerList listenerList;
|
private final EventListenerList listenerList;
|
||||||
private final ServerConfigCache configCache;
|
private final ServerConfigCache configCache;
|
||||||
|
|
||||||
public NetworkService(QueryExecutor queryExecutor) {
|
public NetworkService(QueryExecutor queryExecutor, ConnectionService connectionService) {
|
||||||
this.queryExecutor = queryExecutor;
|
this.queryExecutor = queryExecutor;
|
||||||
|
this.connectionService = connectionService;
|
||||||
listenerList = new EventListenerList();
|
listenerList = new EventListenerList();
|
||||||
configCache = new ServerConfigCache();
|
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){
|
public ServerConfig getServerConfig(String host, Integer port){
|
||||||
checkData(host, port);
|
checkData(host, port);
|
||||||
return configCache.getConfig(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){
|
private void sendConfigRequest(String host, Integer port){
|
||||||
queryExecutor.executeConfigListQuery(new IMapItemMessageCallback<String, String>(){
|
queryExecutor.executeConfigListQuery(new IMapItemMessageCallback<String, String>(){
|
||||||
|
|
||||||
|
@ -2,13 +2,6 @@
|
|||||||
-fx-background-color: #1d1d1d;
|
-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 {
|
.label-bright {
|
||||||
-fx-font-size: 11pt;
|
-fx-font-size: 11pt;
|
||||||
-fx-font-family: "Segoe UI Semibold";
|
-fx-font-family: "Segoe UI Semibold";
|
||||||
@ -127,15 +120,29 @@
|
|||||||
.context-menu {
|
.context-menu {
|
||||||
-fx-background-color: derive(#1d1d1d,5%);
|
-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-size: 12pt;
|
||||||
-fx-font-family: "Segoe UI Semibold";
|
-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-width: 150;
|
||||||
-fx-pref-height: 30;
|
-fx-pref-height: 30;
|
||||||
-fx-background-color: #1d1d1d;
|
|
||||||
-fx-border-color: #e2e2e2;
|
-fx-border-color: #e2e2e2;
|
||||||
-fx-border-width: 2;
|
-fx-border-width: 2;
|
||||||
-fx-text-fill: #d8d8d8;
|
}
|
||||||
|
|
||||||
|
.label{
|
||||||
|
-fx-pref-width: 150;
|
||||||
|
-fx-pref-height: 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button:hover {
|
.button:hover {
|
||||||
|
Loading…
Reference in New Issue
Block a user