diff --git a/src/main/java/controllers/MainController.java b/src/main/java/controllers/MainController.java index 738ac4c..3030be4 100644 --- a/src/main/java/controllers/MainController.java +++ b/src/main/java/controllers/MainController.java @@ -21,6 +21,10 @@ public class MainController extends Controller{ @FXML PasswordField password; + public void register() throws Exception{ + changeScene(SceneCode.REGISTER); + } + public boolean validateLogin(String user, String pass){ if (user.equals(pass)){ return true; diff --git a/src/main/java/controllers/RegisterController.java b/src/main/java/controllers/RegisterController.java new file mode 100644 index 0000000..0b20958 --- /dev/null +++ b/src/main/java/controllers/RegisterController.java @@ -0,0 +1,134 @@ +package controllers; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.control.ComboBox; +import javafx.scene.control.PasswordField; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; +import model.SceneCode; +import model.User; +import utils.DataValidator; + +import java.net.URL; +import java.util.ResourceBundle; +import java.util.regex.Pattern; + +/** + * Created by Gondr on 1/06/2017. + */ +public class RegisterController extends Controller { + @FXML + private PasswordField password; + @FXML + private TextField address; + @FXML + private TextField mobilePhone; + @FXML + private PasswordField passwordConfirm; + @FXML + private TextField homePhone; + @FXML + private ComboBox accountType; + @FXML + private TextField email; + @FXML + private TextField username; + + public String validateStudentNumber(String studentNumber){ + String failure = ""; + //student number + if (studentNumber.equals("") || studentNumber == null){ + failure += "Your must enter your Student Number.\n"; + } + try{ + Integer.parseInt(studentNumber); + } catch (NumberFormatException e){ + failure += "Your Student Number must be a number.\n"; + } + return failure; + } + + public String validateEmail(String email){ + String failure = ""; + Pattern uclivePattern = Pattern.compile(".*@uclive.ac.nz", Pattern.CASE_INSENSITIVE); + Pattern canterburyPattern = Pattern.compile(".*@canterbury.ac.nz", Pattern.CASE_INSENSITIVE); + if (!uclivePattern.matcher(email).matches() && !canterburyPattern.matcher(email).matches()){ + failure += "Your email must end in @uclive.ac.nz or @canterbury.ac.nz.\n"; + } + return failure; + } + + public String validatePassword(String p1, String p2){ + String failure = ""; + if (p1.length() < 6){ + failure += "Your password must be at least 6 letters long.\n"; + } + if (!p1.equals(p2)){ + failure += "Your passwords entered do not match.\n"; + } + return failure; + } + + public String validateAddress(String address){ + String failure = ""; + if (!DataValidator.addressValidator(address)){ + failure += "Your address must be similar to 1 University Drive or 1/1 University Drive or 1A/2 University Drive or 1A/2A University Drive.\n"; + } + return failure; + } + + public String validatePhone(String hp, String mp){ + String failure = ""; + if ((hp.equals("") || hp == null) && (mp.equals("")||mp == null)){ + failure += "You must enter either a home phone number or a mobile phone number.\n"; + } + return failure; + } + + public boolean validate(){ + String failure = ""; + failure += validateStudentNumber(username.getText()); + failure += validateEmail(email.getText()); + failure += validatePassword(password.getText(), passwordConfirm.getText()); + failure += validateAddress(address.getText()); + failure += validatePhone(homePhone.getText(), mobilePhone.getText()); + if (failure.equals("")){ + return true; + }else{ + popUp(Alert.AlertType.WARNING, "Error!", "Your details are not valid for the following reasons.", failure); + return false; + } + } + + public void uploadPhoto(){ + if (validate()){ + try { + UploadPhotoController c = (UploadPhotoController) changeScene(SceneCode.ADD_PHOTO); + c.setUserInformation(Integer.parseInt(username.getText()), email.getText(), password.getText(), address.getText(), + homePhone.getText(), mobilePhone.getText(), accountType.getValue()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + ObservableList accountTypes = FXCollections.observableArrayList(); + accountTypes.addAll(User.AccountType.DRIVER.name, User.AccountType.PASSENGER.name); + accountType.setItems(accountTypes); + accountType.getSelectionModel().select(0); + + //default values just for testing + username.setText("79984862"); + email.setText("fwy13@uclive.ac.nz"); + password.setText("123456"); + passwordConfirm.setText("123456"); + address.setText("90 Stables Street"); + homePhone.setText("033466057"); + mobilePhone.setText("+642726242114"); + } +} diff --git a/src/main/java/controllers/UploadPhotoController.java b/src/main/java/controllers/UploadPhotoController.java new file mode 100644 index 0000000..0bffbf2 --- /dev/null +++ b/src/main/java/controllers/UploadPhotoController.java @@ -0,0 +1,65 @@ +package controllers; + +import javafx.embed.swing.SwingFXUtils; +import javafx.fxml.FXML; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.stage.FileChooser; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; + +/** + * Created by Gondr on 1/06/2017. + */ +public class UploadPhotoController extends Controller { + + private Image photoStored; + private int studentNumber; + private String email; + private String password; + private String address; + private String homephone; + private String mobilephone; + private String accountType; + @FXML + private ImageView photo; + + public void setUserInformation(int studentNumber, String email, String password, String address, String homephone, String mobilephone, String accountType){ + this.studentNumber = studentNumber; + this.email = email; + this.password = password; + this.address = address; + this.homephone = homephone; + this.mobilephone = mobilephone; + this.accountType = accountType; + } + + public void upload(){ + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Select a Picture for you Profile."); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); + File file = fileChooser.showOpenDialog(parent.getPrimaryStage()); + if (file != null){ + try { + BufferedImage bufferedImage = ImageIO.read(file); + photoStored = SwingFXUtils.toFXImage(bufferedImage, null); + photo.setImage(photoStored); + } catch (IOException e) { + } + } + } + + public void next(){ + + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + + } +} diff --git a/src/main/java/model/Driver.java b/src/main/java/model/Driver.java new file mode 100644 index 0000000..e464079 --- /dev/null +++ b/src/main/java/model/Driver.java @@ -0,0 +1,36 @@ +package model; + +import javafx.scene.image.Image; + +import java.awt.image.BufferedImage; + +/** + * Created by Gondr on 1/06/2017. + */ +public class Driver extends User{ + + protected LicenseType licenseType; + protected String licenseNumber; + protected String licenseDateIssued; + protected String licenseDateExpire; + + public enum LicenseType{ + RESTRICTED("Restricted"), FULL("Full"), FULL2YEARS("Full for 2 Years"); + public String name; + + LicenseType(String name){ + this.name = name; + } + } + + public Driver(int studentNumber, String email, String password, String address, String homephone, String mobilephone, + Image photo, LicenseType licenseType, String licenseNumber, String licenseDateIssued, String licenseDateExpire){ + super(studentNumber, email, password, address, homephone, mobilephone, photo); + this.accountType = AccountType.DRIVER; + this.licenseType = licenseType; + this.licenseNumber = licenseNumber; + this.licenseDateIssued = licenseDateIssued; + this.licenseDateExpire = licenseDateExpire; + } + +} diff --git a/src/main/java/model/SceneCode.java b/src/main/java/model/SceneCode.java index 7d0f5cd..b1e135d 100644 --- a/src/main/java/model/SceneCode.java +++ b/src/main/java/model/SceneCode.java @@ -15,7 +15,8 @@ public enum SceneCode { MAIN("main", false), BASE("base", false), //screens after login HOME("home"),ADD_RIDE("addride"),MY_RIDES("myrides"), ADD_STOPS("addstops"), MY_STOPS("mystops"), ADD_ROUTE("addroute"), - MY_ROUTES("myroutes"), ADD_TRIP("addtrip"), MY_TRIPS("mytrips"), SHARED_RIDES("sharedtrips"), SEARCH_STOPS("searchstops"); + MY_ROUTES("myroutes"), ADD_TRIP("addtrip"), MY_TRIPS("mytrips"), SHARED_RIDES("sharedtrips"), SEARCH_STOPS("searchstops"), + REGISTER("register", false), ADD_PHOTO("addphoto", false); private String path; private boolean loadMenu; diff --git a/src/main/java/model/Session.java b/src/main/java/model/Session.java index 5f55214..45a1168 100644 --- a/src/main/java/model/Session.java +++ b/src/main/java/model/Session.java @@ -1,7 +1,7 @@ package model; /** - * Created by fwy13 on 4/04/17. + * All user preferences are to be serialised in this class */ public class Session { diff --git a/src/main/java/model/User.java b/src/main/java/model/User.java new file mode 100644 index 0000000..92d9e8a --- /dev/null +++ b/src/main/java/model/User.java @@ -0,0 +1,39 @@ +package model; + +import javafx.scene.image.Image; + +import java.awt.image.BufferedImage; + +/** + * Created by Gondr on 1/06/2017. + */ +public class User { + protected int studentNumber; + protected String email; + protected String password; + protected String address; + protected String homephone; + protected String mobilephone; + protected AccountType accountType; + protected Image photo; + + public enum AccountType{ + PASSENGER("Passenger"), DRIVER("Driver"); + public String name; + AccountType(String name){ + this.name = name; + } + } + + public User(int studentNumber, String email, String password, String address, String homephone, String mobilephone, + Image photo){ + this.studentNumber = studentNumber; + this.email = email; + this.password = password; + this.address = address; + this.homephone = homephone; + this.mobilephone = mobilephone; + this.photo = photo; + this.accountType = AccountType.PASSENGER; + } +} diff --git a/src/main/java/utils/DataValidator.java b/src/main/java/utils/DataValidator.java new file mode 100644 index 0000000..1c6d4a6 --- /dev/null +++ b/src/main/java/utils/DataValidator.java @@ -0,0 +1,14 @@ +package utils; + +import java.util.regex.Pattern; + +/** + * Created by Gondr on 1/06/2017. + */ +public class DataValidator { + + public static boolean addressValidator(String address){ + Pattern addressPattern = Pattern.compile("[0-9]+[a-zA-Z]?(/[0-9]*[a-zA-Z]?)?([\\sa-zA-Z])+"); + return addressPattern.matcher(address).matches(); + } +} diff --git a/src/main/resources/scenes/addphoto.fxml b/src/main/resources/scenes/addphoto.fxml new file mode 100644 index 0000000..e2ca5c9 --- /dev/null +++ b/src/main/resources/scenes/addphoto.fxml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +