No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ConnectionScreenController.java 9.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. package app.insa.clav.UIControllers;
  2. import app.insa.clav.Core.DataBaseAccess;
  3. import app.insa.clav.Core.Model;
  4. import com.jfoenix.controls.JFXButton;
  5. import com.jfoenix.controls.JFXToggleButton;
  6. import javafx.application.Platform;
  7. import javafx.event.ActionEvent;
  8. import javafx.event.EventHandler;
  9. import javafx.fxml.FXML;
  10. import javafx.fxml.FXMLLoader;
  11. import javafx.fxml.Initializable;
  12. import javafx.scene.Parent;
  13. import javafx.scene.Scene;
  14. import javafx.scene.control.Label;
  15. import javafx.scene.control.ProgressIndicator;
  16. import javafx.scene.control.TextField;
  17. import javafx.stage.Stage;
  18. import javafx.stage.WindowEvent;
  19. import java.beans.PropertyChangeEvent;
  20. import java.beans.PropertyChangeListener;
  21. import java.io.IOException;
  22. import java.net.URL;
  23. import java.util.ResourceBundle;
  24. public class ConnectionScreenController implements Initializable, PropertyChangeListener {
  25. /**
  26. * Text input login for sign in
  27. */
  28. @FXML
  29. private TextField loginInputIn;
  30. /**
  31. * Text input pseudo for sign in
  32. */
  33. @FXML
  34. private TextField pseudoInputIn;
  35. /**
  36. * Sign in button
  37. */
  38. @FXML
  39. private JFXButton signInButton;
  40. /**
  41. * Text input login for sign up
  42. */
  43. @FXML
  44. private TextField loginInputUp;
  45. /**
  46. * Text input pseudo for sign in
  47. */
  48. @FXML
  49. private TextField pseudoInputUp;
  50. /**
  51. * Sign up Button
  52. */
  53. @FXML
  54. private JFXButton signUpButton;
  55. /**
  56. * Spinner Sign in
  57. */
  58. @FXML
  59. private ProgressIndicator spinnerIn;
  60. /**
  61. * Spinner Sign Up
  62. */
  63. @FXML
  64. private ProgressIndicator spinnerUp;
  65. /**
  66. * Error text displayed when pseudo already used sign in
  67. */
  68. @FXML
  69. private Label errorLabelIn;
  70. /**
  71. * Error text displayed when pseudo already used sign up
  72. */
  73. @FXML
  74. private Label errorLabelUp;
  75. /**
  76. * Error text displayed when login wrong sign in
  77. */
  78. @FXML
  79. private Label labelErrorInLogin;
  80. /**
  81. * Error text displayed when login wrong sign up
  82. */
  83. @FXML
  84. private Label labelErrorUpLogin;
  85. @FXML
  86. private Model model;
  87. /**
  88. * True if trying to sign in
  89. */
  90. private boolean isSubmittingIn;
  91. /**
  92. * True if trying to sign up
  93. */
  94. private boolean isSubmittingUp;
  95. /**
  96. * True if pseudo in DB already used when sign in and trying new one
  97. */
  98. private boolean isSubmittingNewPseudoIn;
  99. /**
  100. * True if the user is outdoor
  101. */
  102. @FXML
  103. private JFXToggleButton isOutdoorUserButton;
  104. private DataBaseAccess dbAccess;
  105. private String loginUp;
  106. private String pseudoUp;
  107. private String pseudoIn;
  108. private boolean isOutdoor;
  109. public ConnectionScreenController(){
  110. this.dbAccess = DataBaseAccess.getInstance();
  111. System.out.println(this.dbAccess.toString());
  112. isSubmittingIn = false;
  113. isSubmittingUp = false;
  114. isSubmittingNewPseudoIn = false;
  115. this.isOutdoor = false;
  116. }
  117. @Override
  118. public void initialize(URL location, ResourceBundle resources) {
  119. }
  120. /**Called when button Sign In pushed
  121. * @param event
  122. */
  123. @FXML
  124. void submitConnection(ActionEvent event) {
  125. String login = this.loginInputIn.getText();
  126. //System.out.println(this.dbAccess == null);
  127. if (!login.equals("") && !this.isSubmittingIn && !this.isSubmittingUp) {
  128. this.isSubmittingIn = true;
  129. this.spinnerIn.setVisible(true);
  130. if (this.dbAccess.isLoginUsed(login)) {
  131. this.model = Model.getInstance();
  132. this.model.addPropertyChangeListener(this,"pseudoRefused");
  133. this.model.addPropertyChangeListener(this,"pseudoValide");
  134. String pseudo = this.dbAccess.getPseudoFromLogin(login);
  135. int id = this.dbAccess.getIdFromLogin(login);
  136. this.model.setUserId(id);
  137. if (this.isOutdoor) {
  138. this.model.choosePseudoOutdoor(pseudo,true);
  139. } else {
  140. model.configModelIndoor();
  141. this.model.choosePseudo(pseudo,true);
  142. }
  143. } else {
  144. this.labelErrorInLogin.setVisible(true);
  145. }
  146. }
  147. }
  148. /**Called when Butto sign in pushed
  149. * @param event
  150. */
  151. @FXML
  152. void submitSignUp(ActionEvent event) {
  153. this.loginUp = this.loginInputUp.getText();
  154. this.pseudoUp = this.pseudoInputUp.getText();
  155. if (!this.loginUp.equals("") && !this.pseudoUp.equals("") && !this.isSubmittingIn && !this.isSubmittingUp){
  156. this.isSubmittingUp = true;
  157. this.spinnerUp.setVisible(true);
  158. boolean loginExist = this.dbAccess.isLoginUsed(this.loginUp);
  159. if (!loginExist){
  160. this.model = Model.getInstance();
  161. this.model.addPropertyChangeListener(this,"pseudoRefused");
  162. this.model.addPropertyChangeListener(this,"pseudoValide");
  163. if (this.isOutdoor) {
  164. this.model.choosePseudoOutdoor(pseudoUp,true);
  165. } else {
  166. model.configModelIndoor();
  167. this.model.choosePseudo(pseudoUp,true);
  168. }
  169. }
  170. else{
  171. this.labelErrorUpLogin.setVisible(true);
  172. this.spinnerUp.setVisible(false);
  173. this.isSubmittingUp = false;
  174. }
  175. }
  176. }
  177. /**
  178. * Called when signing up and pseudo valid, used to update DB ad send pseudo Confirmation
  179. */
  180. private void pseudoValideUp(){
  181. System.out.println("Log et pseudo " + this.loginUp + this.pseudoUp);
  182. this.model.setUserId(this.dbAccess.addUtilisateur(this.loginUp,this.pseudoUp));
  183. this.model.sendPseudoValideBroadcast();
  184. }
  185. @FXML
  186. void outdoorUserAction(ActionEvent event) {
  187. //this.model.user.setOutdoor(this.isOutdoorUserButton.isSelected());
  188. this.isOutdoor = this.isOutdoorUserButton.isSelected();
  189. }
  190. /**
  191. * Handler of notifications sent by te model
  192. * @param evt
  193. */
  194. @Override
  195. public void propertyChange(PropertyChangeEvent evt) {
  196. switch (evt.getPropertyName()){
  197. case "pseudoValide" :
  198. Stage mainStage = (Stage) loginInputIn.getScene().getWindow();
  199. mainStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
  200. @Override
  201. public void handle(WindowEvent t) {
  202. Model.getInstance().sendDeconnectionMessage();
  203. }
  204. });
  205. this.model.deletePropertyChangeListener(this,"pseudoValide");
  206. this.model.deletePropertyChangeListener(this,"pseudoRefused");
  207. System.out.println("Pseudo valide");
  208. if (isSubmittingUp && !this.model.user.isOutdoor()){
  209. this.pseudoValideUp();
  210. }
  211. if (this.isSubmittingNewPseudoIn){
  212. System.out.println("Update pseudo with " + this.model.user.getPseudo());
  213. this.dbAccess.updatePseudo(this.model.user.getId(),this.pseudoIn);
  214. }
  215. this.isSubmittingUp = false;
  216. this.isSubmittingIn = false;
  217. this.model.startTim2s();
  218. Platform.runLater(new Runnable() {
  219. @Override
  220. public void run() {
  221. Stage mainStage = (Stage) signUpButton.getScene().getWindow();
  222. FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/mainWindow.fxml"));
  223. try {
  224. Parent rootMainScreen = fxmlLoader.load();
  225. Scene scene = new Scene(rootMainScreen);
  226. mainStage.setScene(scene);
  227. mainStage.show();
  228. } catch (IOException ioException) {
  229. ioException.printStackTrace();
  230. }
  231. }
  232. });
  233. case "pseudoRefused" :
  234. if (this.isSubmittingIn) {
  235. this.isSubmittingIn = false;
  236. if (this.isSubmittingNewPseudoIn || this.pseudoInputIn.getText().equals("")) {
  237. this.isSubmittingNewPseudoIn = false;
  238. Platform.runLater(new Runnable() {
  239. @Override
  240. public void run() {
  241. errorLabelIn.setVisible(true);
  242. spinnerIn.setVisible(false);
  243. }
  244. });
  245. }
  246. else{
  247. this.pseudoIn = this.pseudoInputIn.getText();
  248. this.isSubmittingNewPseudoIn = true;
  249. System.out.println("Pseudo refused, trying new " + this.pseudoIn);
  250. this.model.choosePseudo(this.pseudoIn,true);
  251. }
  252. }else if (this.isSubmittingUp){
  253. this.isSubmittingUp = false;
  254. Platform.runLater(new Runnable() {
  255. @Override
  256. public void run() {
  257. errorLabelUp.setVisible(true);
  258. spinnerUp.setVisible(false);
  259. }
  260. });
  261. }
  262. }
  263. }
  264. }